JSON_STATUS CPlayerOperations::PlayPause(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant ¶meterObject, CVariant &result) { CGUIWindowSlideShow *slideshow = NULL; switch (GetPlayer(parameterObject["playerid"])) { case Video: case Audio: CBuiltins::Execute("playercontrol(play)"); result["speed"] = g_application.IsPaused() ? 0 : g_application.GetPlaySpeed(); return OK; case Picture: SendSlideshowAction(ACTION_PAUSE); slideshow = (CGUIWindowSlideShow*)g_windowManager.GetWindow(WINDOW_SLIDESHOW); if (slideshow && slideshow->IsPlaying() && !slideshow->IsPaused()) result["speed"] = slideshow->GetDirection(); else result["speed"] = 0; return OK; case None: default: return FailedToExecute; } }
JSONRPC_STATUS CPlayerOperations::SetShuffle(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant ¶meterObject, CVariant &result) { CGUIWindowSlideShow *slideshow = NULL; CVariant shuffle = parameterObject["shuffle"]; switch (GetPlayer(parameterObject["playerid"])) { case Video: case Audio: { if (IsPVRChannel()) return FailedToExecute; int playlistid = GetPlaylist(GetPlayer(parameterObject["playerid"])); if (g_playlistPlayer.IsShuffled(playlistid)) { if ((shuffle.isBoolean() && !shuffle.asBoolean()) || (shuffle.isString() && shuffle.asString() == "toggle")) { CApplicationMessenger::Get().PlayListPlayerShuffle(playlistid, false); OnPlaylistChanged(); } } else { if ((shuffle.isBoolean() && shuffle.asBoolean()) || (shuffle.isString() && shuffle.asString() == "toggle")) { CApplicationMessenger::Get().PlayListPlayerShuffle(playlistid, true); OnPlaylistChanged(); } } break; } case Picture: slideshow = (CGUIWindowSlideShow*)g_windowManager.GetWindow(WINDOW_SLIDESHOW); if (slideshow == NULL) return FailedToExecute; if (slideshow->IsShuffled()) { if ((shuffle.isBoolean() && !shuffle.asBoolean()) || (shuffle.isString() && shuffle.asString() == "toggle")) return FailedToExecute; } else { if ((shuffle.isBoolean() && shuffle.asBoolean()) || (shuffle.isString() && shuffle.asString() == "toggle")) slideshow->Shuffle(); } break; default: return FailedToExecute; } return ACK; }
JSONRPC_STATUS CPlayerOperations::SetShuffle(const std::string &method, ITransportLayer *transport, IClient *client, const CVariant ¶meterObject, CVariant &result) { CGUIWindowSlideShow *slideshow = NULL; CVariant shuffle = parameterObject["shuffle"]; switch (GetPlayer(parameterObject["playerid"])) { case Video: case Audio: { if (IsPVRChannel()) return FailedToExecute; int playlistid = GetPlaylist(GetPlayer(parameterObject["playerid"])); if (CServiceBroker::GetPlaylistPlayer().IsShuffled(playlistid)) { if ((shuffle.isBoolean() && !shuffle.asBoolean()) || (shuffle.isString() && shuffle.asString() == "toggle")) { CApplicationMessenger::GetInstance().SendMsg(TMSG_PLAYLISTPLAYER_SHUFFLE, playlistid, 0); OnPlaylistChanged(); } } else { if ((shuffle.isBoolean() && shuffle.asBoolean()) || (shuffle.isString() && shuffle.asString() == "toggle")) { CApplicationMessenger::GetInstance().SendMsg(TMSG_PLAYLISTPLAYER_SHUFFLE, playlistid, 1); OnPlaylistChanged(); } } break; } case Picture: slideshow = CServiceBroker::GetGUI()->GetWindowManager().GetWindow<CGUIWindowSlideShow>(WINDOW_SLIDESHOW); if (slideshow == NULL) return FailedToExecute; if (slideshow->IsShuffled()) { if ((shuffle.isBoolean() && !shuffle.asBoolean()) || (shuffle.isString() && shuffle.asString() == "toggle")) return FailedToExecute; } else { if ((shuffle.isBoolean() && shuffle.asBoolean()) || (shuffle.isString() && shuffle.asString() == "toggle")) slideshow->Shuffle(); } break; default: return FailedToExecute; } return ACK; }
bool CPicturesGUIInfo::GetBool(bool& value, const CGUIListItem *gitem, int contextWindow, const CGUIInfo &info) const { switch (info.m_info) { /////////////////////////////////////////////////////////////////////////////////////////////// // SLIDESHOW_* /////////////////////////////////////////////////////////////////////////////////////////////// case SLIDESHOW_ISPAUSED: { CGUIWindowSlideShow *slideShow = CServiceBroker::GetGUI()->GetWindowManager().GetWindow<CGUIWindowSlideShow>(WINDOW_SLIDESHOW); value = (slideShow && slideShow->IsPaused()); return true; } case SLIDESHOW_ISRANDOM: { CGUIWindowSlideShow *slideShow = CServiceBroker::GetGUI()->GetWindowManager().GetWindow<CGUIWindowSlideShow>(WINDOW_SLIDESHOW); value = (slideShow && slideShow->IsShuffled()); return true; } case SLIDESHOW_ISACTIVE: { CGUIWindowSlideShow *slideShow = CServiceBroker::GetGUI()->GetWindowManager().GetWindow<CGUIWindowSlideShow>(WINDOW_SLIDESHOW); value = (slideShow && slideShow->InSlideShow()); return true; } case SLIDESHOW_ISVIDEO: { CGUIWindowSlideShow *slideShow = CServiceBroker::GetGUI()->GetWindowManager().GetWindow<CGUIWindowSlideShow>(WINDOW_SLIDESHOW); value = (slideShow && slideShow->GetCurrentSlide() && slideShow->GetCurrentSlide()->IsVideo()); return true; } } return false; }
//! @todo 2.0: Can this be removed, or should we run without the "special" file directories while // in filemanager view. void CGUIWindowFileManager::OnStart(CFileItem *pItem, const std::string &player) { // start playlists from file manager if (pItem->IsPlayList()) { std::string strPlayList = pItem->GetPath(); std::unique_ptr<CPlayList> pPlayList (CPlayListFactory::Create(strPlayList)); if (NULL != pPlayList.get()) { if (!pPlayList->Load(strPlayList)) { HELPERS::ShowOKDialogText(CVariant{6}, CVariant{477}); return; } } g_application.ProcessAndStartPlaylist(strPlayList, *pPlayList, PLAYLIST_MUSIC); return; } if (pItem->IsAudio() || pItem->IsVideo()) { CServiceBroker::GetPlaylistPlayer().Play(std::make_shared<CFileItem>(*pItem), player); return; } if (pItem->IsGame()) { g_application.PlayFile(*pItem, player); return ; } #ifdef HAS_PYTHON if (pItem->IsPythonScript()) { CScriptInvocationManager::GetInstance().ExecuteAsync(pItem->GetPath()); return ; } #endif if (pItem->IsPicture()) { CGUIWindowSlideShow *pSlideShow = g_windowManager.GetWindow<CGUIWindowSlideShow>(WINDOW_SLIDESHOW); if (!pSlideShow) return ; if (g_application.m_pPlayer->IsPlayingVideo()) g_application.StopPlaying(); pSlideShow->Reset(); pSlideShow->Add(pItem); pSlideShow->Select(pItem->GetPath()); g_windowManager.ActivateWindow(WINDOW_SLIDESHOW); return; } if (pItem->IsType(".txt") || pItem->IsType(".xml")) CGUIDialogTextViewer::ShowForFile(pItem->GetPath(), true); }
JSONRPC_STATUS CPlaylistOperations::GetPropertyValue(int playlist, const CStdString &property, CVariant &result) { if (property.Equals("type")) { switch (playlist) { case PLAYLIST_MUSIC: result = "audio"; break; case PLAYLIST_VIDEO: result = "video"; break; case PLAYLIST_PICTURE: result = "pictures"; break; default: result = "unknown"; break; } } else if (property.Equals("size")) { CFileItemList list; CGUIWindowSlideShow *slideshow = NULL; switch (playlist) { case PLAYLIST_MUSIC: case PLAYLIST_VIDEO: CApplicationMessenger::Get().PlayListPlayerGetItems(playlist, list); result = list.Size(); break; case PLAYLIST_PICTURE: slideshow = (CGUIWindowSlideShow*)g_windowManager.GetWindow(WINDOW_SLIDESHOW); if (slideshow) result = slideshow->NumSlides(); else result = 0; break; default: result = 0; break; } } else return InvalidParams; return OK; }
JSONRPC_STATUS CPlaylistOperations::GetPropertyValue(int playlist, const std::string &property, CVariant &result) { if (property == "type") { switch (playlist) { case PLAYLIST_MUSIC: result = "audio"; break; case PLAYLIST_VIDEO: result = "video"; break; case PLAYLIST_PICTURE: result = "pictures"; break; default: result = "unknown"; break; } } else if (property == "size") { CFileItemList list; CGUIWindowSlideShow *slideshow = NULL; switch (playlist) { case PLAYLIST_MUSIC: case PLAYLIST_VIDEO: CApplicationMessenger::GetInstance().SendMsg(TMSG_PLAYLISTPLAYER_GET_ITEMS, playlist, -1, static_cast<void*>(&list)); result = list.Size(); break; case PLAYLIST_PICTURE: slideshow = (CGUIWindowSlideShow*)g_windowManager.GetWindow(WINDOW_SLIDESHOW); if (slideshow) result = slideshow->NumSlides(); else result = 0; break; default: result = 0; break; } } else return InvalidParams; return OK; }
JSONRPC_STATUS CPlaylistOperations::Add(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant ¶meterObject, CVariant &result) { int playlist = GetPlaylist(parameterObject["playlistid"]); CFileItemList list; CVariant params = parameterObject; if (!CheckMediaParameter(playlist, parameterObject)) return InvalidParams; CGUIWindowSlideShow *slideshow = NULL; switch (playlist) { case PLAYLIST_VIDEO: case PLAYLIST_MUSIC: if (playlist == PLAYLIST_VIDEO) params["item"]["media"] = "video"; else if (playlist == PLAYLIST_MUSIC) params["item"]["media"] = "music"; if (!FillFileItemList(params["item"], list)) return InvalidParams; CApplicationMessenger::Get().PlayListPlayerAdd(playlist, list); break; case PLAYLIST_PICTURE: slideshow = (CGUIWindowSlideShow*)g_windowManager.GetWindow(WINDOW_SLIDESHOW); if (!slideshow) return FailedToExecute; if (!parameterObject["item"].isMember("media")) params["item"]["media"] = "pictures"; if (!FillFileItemList(params["item"], list)) return InvalidParams; for (int index = 0; index < list.Size(); index++) { CPictureInfoTag picture = CPictureInfoTag(); if (!picture.Load(list[index]->GetPath())) continue; *list[index]->GetPictureInfoTag() = picture; slideshow->Add(list[index].get()); } break; } NotifyAll(); return ACK; }
void CGUIWindowPictures::OnShowPictureRecursive(const CStdString& strPath) { CGUIWindowSlideShow *pSlideShow = (CGUIWindowSlideShow *)g_windowManager.GetWindow(WINDOW_SLIDESHOW); if (pSlideShow) { // stop any video if (g_application.IsPlayingVideo()) g_application.StopPlaying(); pSlideShow->AddFromPath(strPath, true, m_guiState->GetSortMethod(), m_guiState->GetSortOrder()); if (pSlideShow->NumSlides()) g_windowManager.ActivateWindow(WINDOW_SLIDESHOW); } }
// TODO 2.0: Can this be removed, or should we run without the "special" file directories while // in filemanager view. void CGUIWindowFileManager::OnStart(CFileItem *pItem) { // start playlists from file manager if (pItem->IsPlayList()) { CStdString strPlayList = pItem->m_strPath; auto_ptr<CPlayList> pPlayList (CPlayListFactory::Create(strPlayList)); if (NULL != pPlayList.get()) { if (!pPlayList->Load(strPlayList)) { CGUIDialogOK::ShowAndGetInput(6, 0, 477, 0); return; } } g_application.ProcessAndStartPlaylist(strPlayList, *pPlayList, PLAYLIST_MUSIC); return; } if (pItem->IsAudio() || pItem->IsVideo()) { g_application.PlayFile(*pItem); return ; } #ifdef HAS_PYTHON if (pItem->IsPythonScript()) { g_pythonParser.evalFile(pItem->m_strPath.c_str()); return ; } #endif if (pItem->IsShortCut()) CUtil::RunShortcut(pItem->m_strPath); if (pItem->IsPicture()) { CGUIWindowSlideShow *pSlideShow = (CGUIWindowSlideShow *)m_gWindowManager.GetWindow(WINDOW_SLIDESHOW); if (!pSlideShow) return ; if (g_application.IsPlayingVideo()) g_application.StopPlaying(); pSlideShow->Reset(); pSlideShow->Add(pItem); pSlideShow->Select(pItem->m_strPath); m_gWindowManager.ActivateWindow(WINDOW_SLIDESHOW); } }
JSONRPC_STATUS CPlaylistOperations::Add(const std::string &method, ITransportLayer *transport, IClient *client, const CVariant ¶meterObject, CVariant &result) { int playlist = GetPlaylist(parameterObject["playlistid"]); CGUIWindowSlideShow *slideshow = NULL; if (playlist == PLAYLIST_PICTURE) { slideshow = (CGUIWindowSlideShow*)g_windowManager.GetWindow(WINDOW_SLIDESHOW); if (slideshow == NULL) return FailedToExecute; } CFileItemList list; if (!HandleItemsParameter(playlist, parameterObject["item"], list)) return InvalidParams; switch (playlist) { case PLAYLIST_VIDEO: case PLAYLIST_MUSIC: { auto tmpList = new CFileItemList(); tmpList->Copy(list); CApplicationMessenger::GetInstance().SendMsg(TMSG_PLAYLISTPLAYER_ADD, playlist, -1, static_cast<void*>(tmpList)); break; } case PLAYLIST_PICTURE: for (int index = 0; index < list.Size(); index++) { CPictureInfoTag picture = CPictureInfoTag(); if (!picture.Load(list[index]->GetPath())) continue; *list[index]->GetPictureInfoTag() = picture; slideshow->Add(list[index].get()); } break; default: return InvalidParams; } NotifyAll(); return ACK; }
JSONRPC_STATUS CPlayerOperations::PlayPause(const std::string &method, ITransportLayer *transport, IClient *client, const CVariant ¶meterObject, CVariant &result) { CGUIWindowSlideShow *slideshow = NULL; switch (GetPlayer(parameterObject["playerid"])) { case Video: case Audio: if (!g_application.m_pPlayer->CanPause()) return FailedToExecute; if (parameterObject["play"].isString()) CBuiltins::GetInstance().Execute("playercontrol(play)"); else { if (parameterObject["play"].asBoolean()) { if (g_application.m_pPlayer->IsPausedPlayback()) CApplicationMessenger::GetInstance().SendMsg(TMSG_MEDIA_PAUSE); else if (g_application.m_pPlayer->GetPlaySpeed() != 1) g_application.m_pPlayer->SetPlaySpeed(1); } else if (!g_application.m_pPlayer->IsPausedPlayback()) CApplicationMessenger::GetInstance().SendMsg(TMSG_MEDIA_PAUSE); } result["speed"] = g_application.m_pPlayer->IsPausedPlayback() ? 0 : g_application.m_pPlayer->GetPlaySpeed(); return OK; case Picture: slideshow = (CGUIWindowSlideShow*)g_windowManager.GetWindow(WINDOW_SLIDESHOW); if (slideshow && slideshow->IsPlaying() && (parameterObject["play"].isString() || (parameterObject["play"].isBoolean() && parameterObject["play"].asBoolean() == slideshow->IsPaused()))) SendSlideshowAction(ACTION_PAUSE); if (slideshow && slideshow->IsPlaying() && !slideshow->IsPaused()) result["speed"] = slideshow->GetDirection(); else result["speed"] = 0; return OK; case None: default: return FailedToExecute; } }
// TODO 2.0: Can this be removed, or should we run without the "special" file directories while // in filemanager view. void CGUIWindowFileManager::OnStart(CFileItem *pItem) { // start playlists from file manager if (pItem->IsPlayList()) { std::string strPlayList = pItem->GetPath(); std::unique_ptr<CPlayList> pPlayList (CPlayListFactory::Create(strPlayList)); if (NULL != pPlayList.get()) { if (!pPlayList->Load(strPlayList)) { CGUIDialogOK::ShowAndGetInput(CVariant{6}, CVariant{477}); return; } } g_application.ProcessAndStartPlaylist(strPlayList, *pPlayList, PLAYLIST_MUSIC); return; } if (pItem->IsAudio() || pItem->IsVideo()) { g_application.PlayFile(*pItem); return ; } #ifdef HAS_PYTHON if (pItem->IsPythonScript()) { CScriptInvocationManager::Get().ExecuteAsync(pItem->GetPath()); return ; } #endif if (pItem->IsPicture()) { CGUIWindowSlideShow *pSlideShow = (CGUIWindowSlideShow *)g_windowManager.GetWindow(WINDOW_SLIDESHOW); if (!pSlideShow) return ; if (g_application.m_pPlayer->IsPlayingVideo()) g_application.StopPlaying(); pSlideShow->Reset(); pSlideShow->Add(pItem); pSlideShow->Select(pItem->GetPath()); g_windowManager.ActivateWindow(WINDOW_SLIDESHOW); } }
void CGUIWindowPictures::OnInitWindow() { CGUIMediaWindow::OnInitWindow(); if (m_slideShowStarted) { CGUIWindowSlideShow* wndw = CServiceBroker::GetGUI()->GetWindowManager().GetWindow<CGUIWindowSlideShow>(WINDOW_SLIDESHOW); std::string path; if (wndw && wndw->GetCurrentSlide()) path = URIUtils::GetDirectory(wndw->GetCurrentSlide()->GetPath()); if (m_vecItems->IsPath(path)) { if (wndw && wndw->GetCurrentSlide()) m_viewControl.SetSelectedItem(wndw->GetCurrentSlide()->GetPath()); SaveSelectedItemInHistory(); } m_slideShowStarted = false; } }
void CGUIWindowPictures::OnInitWindow() { CGUIMediaWindow::OnInitWindow(); if (m_slideShowStarted) { CGUIWindowSlideShow* wndw = (CGUIWindowSlideShow*)g_windowManager.GetWindow(WINDOW_SLIDESHOW); CStdString path; if (wndw && wndw->GetCurrentSlide()) path = URIUtils::GetDirectory(wndw->GetCurrentSlide()->GetPath()); if (path.Equals(m_vecItems->GetPath())) { if (wndw && wndw->GetCurrentSlide()) m_viewControl.SetSelectedItem(wndw->GetCurrentSlide()->GetPath()); m_iSelectedItem = m_viewControl.GetSelectedItem(); } m_slideShowStarted = false; } }
void CGUIWindowPictures::OnShowPictureRecursive(const CStdString& strPath) { CGUIWindowSlideShow *pSlideShow = (CGUIWindowSlideShow *)g_windowManager.GetWindow(WINDOW_SLIDESHOW); if (pSlideShow) { // stop any video if (g_application.m_pPlayer->IsPlayingVideo()) g_application.StopPlaying(); SortDescription sorting = m_guiState->GetSortMethod(); pSlideShow->AddFromPath(strPath, true, sorting.sortBy, sorting.sortOrder, sorting.sortAttributes); if (pSlideShow->NumSlides()) { m_slideShowStarted = true; g_windowManager.ActivateWindow(WINDOW_SLIDESHOW); } } }
void CGUIWindowPictures::OnSlideShow(const CStdString &strPicture) { CGUIWindowSlideShow *pSlideShow = (CGUIWindowSlideShow *)g_windowManager.GetWindow(WINDOW_SLIDESHOW); if (pSlideShow) { CStdString strExtensions; CFileItemList items; CGUIViewState* viewState=CGUIViewState::GetViewState(GetID(), items); if (viewState) { strExtensions = viewState->GetExtensions(); delete viewState; } pSlideShow->RunSlideShow(strPicture, false ,false, false, m_guiState->GetSortMethod(), m_guiState->GetSortOrder(), strExtensions); } }
void CGUIWindowPictures::OnShowPictureRecursive(const std::string& strPath) { CGUIWindowSlideShow *pSlideShow = CServiceBroker::GetGUI()->GetWindowManager().GetWindow<CGUIWindowSlideShow>(WINDOW_SLIDESHOW); if (pSlideShow) { // stop any video if (g_application.GetAppPlayer().IsPlayingVideo()) g_application.StopPlaying(); SortDescription sorting = m_guiState->GetSortMethod(); pSlideShow->AddFromPath(strPath, true, sorting.sortBy, sorting.sortOrder, sorting.sortAttributes); if (pSlideShow->NumSlides()) { m_slideShowStarted = true; CServiceBroker::GetGUI()->GetWindowManager().ActivateWindow(WINDOW_SLIDESHOW); } } }
void CGUIWindowPictures::OnSlideShowRecursive(const CStdString &strPicture) { CGUIWindowSlideShow *pSlideShow = (CGUIWindowSlideShow *)g_windowManager.GetWindow(WINDOW_SLIDESHOW); if (pSlideShow) { CStdString strExtensions; CFileItemList items; CGUIViewState* viewState=CGUIViewState::GetViewState(GetID(), items); if (viewState) { strExtensions = viewState->GetExtensions(); delete viewState; } m_slideShowStarted = true; pSlideShow->RunSlideShow(strPicture, true, g_guiSettings.GetBool("slideshow.shuffle"),false, m_guiState->GetSortMethod(), m_guiState->GetSortOrder(), strExtensions); } }
JSON_STATUS CPlayerOperations::StartSlideshow() { CGUIWindowSlideShow *slideshow = (CGUIWindowSlideShow*)g_windowManager.GetWindow(WINDOW_SLIDESHOW); if (!slideshow && slideshow->NumSlides() <= 0) return FailedToExecute; if (g_application.IsPlayingVideo()) g_application.StopPlaying(); g_graphicsContext.Lock(); g_application.WakeUpScreenSaverAndDPMS(); slideshow->StartSlideShow(); if (g_windowManager.GetActiveWindow() != WINDOW_SLIDESHOW) g_windowManager.ActivateWindow(WINDOW_SLIDESHOW); g_graphicsContext.Unlock(); return ACK; }
void CGUIWindowPictures::LoadPlayList(const CStdString& strPlayList) { CLog::Log(LOGDEBUG,"CGUIWindowPictures::LoadPlayList()... converting playlist into slideshow: %s", strPlayList.c_str()); auto_ptr<CPlayList> pPlayList (CPlayListFactory::Create(strPlayList)); if ( NULL != pPlayList.get()) { if (!pPlayList->Load(strPlayList)) { CGUIDialogOK::ShowAndGetInput(6, 0, 477, 0); return ; //hmmm unable to load playlist? } } CPlayList playlist = *pPlayList; if (playlist.size() > 0) { // set up slideshow CGUIWindowSlideShow *pSlideShow = (CGUIWindowSlideShow *)g_windowManager.GetWindow(WINDOW_SLIDESHOW); if (!pSlideShow) return; if (g_application.m_pPlayer->IsPlayingVideo()) g_application.StopPlaying(); // convert playlist items into slideshow items pSlideShow->Reset(); for (int i = 0; i < (int)playlist.size(); ++i) { CFileItemPtr pItem = playlist[i]; //CLog::Log(LOGDEBUG,"-- playlist item: %s", pItem->GetPath().c_str()); if (pItem->IsPicture() && !(pItem->IsZIP() || pItem->IsRAR() || pItem->IsCBZ() || pItem->IsCBR())) pSlideShow->Add(pItem.get()); } // start slideshow if there are items pSlideShow->StartSlideShow(); if (pSlideShow->NumSlides()) g_windowManager.ActivateWindow(WINDOW_SLIDESHOW); } }
void CGUIWindowPictures::OnSlideShow(const CStdString &strPicture) { CGUIWindowSlideShow *pSlideShow = (CGUIWindowSlideShow *)g_windowManager.GetWindow(WINDOW_SLIDESHOW); if (pSlideShow) { CStdString strExtensions; CFileItemList items; CGUIViewState* viewState=CGUIViewState::GetViewState(GetID(), items); if (viewState) { strExtensions = viewState->GetExtensions(); delete viewState; } m_slideShowStarted = true; SortDescription sorting = m_guiState->GetSortMethod(); pSlideShow->RunSlideShow(strPicture, false ,false, false, "", true, sorting.sortBy, sorting.sortOrder, sorting.sortAttributes, strExtensions); } }
void CGUIWindowPictures::LoadPlayList(const std::string& strPlayList) { CLog::Log(LOGDEBUG,"CGUIWindowPictures::LoadPlayList()... converting playlist into slideshow: %s", strPlayList.c_str()); std::unique_ptr<CPlayList> pPlayList (CPlayListFactory::Create(strPlayList)); if ( NULL != pPlayList.get()) { if (!pPlayList->Load(strPlayList)) { HELPERS::ShowOKDialogText(CVariant{6}, CVariant{477}); return ; //hmmm unable to load playlist? } } CPlayList playlist = *pPlayList; if (playlist.size() > 0) { // set up slideshow CGUIWindowSlideShow *pSlideShow = CServiceBroker::GetGUI()->GetWindowManager().GetWindow<CGUIWindowSlideShow>(WINDOW_SLIDESHOW); if (!pSlideShow) return; if (g_application.GetAppPlayer().IsPlayingVideo()) g_application.StopPlaying(); // convert playlist items into slideshow items pSlideShow->Reset(); for (int i = 0; i < (int)playlist.size(); ++i) { CFileItemPtr pItem = playlist[i]; //CLog::Log(LOGDEBUG,"-- playlist item: %s", pItem->GetPath().c_str()); if (pItem->IsPicture() && !(pItem->IsZIP() || pItem->IsRAR() || pItem->IsCBZ() || pItem->IsCBR())) pSlideShow->Add(pItem.get()); } // start slideshow if there are items pSlideShow->StartSlideShow(); if (pSlideShow->NumSlides()) CServiceBroker::GetGUI()->GetWindowManager().ActivateWindow(WINDOW_SLIDESHOW); } }
void CGUIWindowPictures::OnSlideShowRecursive(const std::string &strPicture) { CGUIWindowSlideShow *pSlideShow = CServiceBroker::GetGUI()->GetWindowManager().GetWindow<CGUIWindowSlideShow>(WINDOW_SLIDESHOW); if (pSlideShow) { std::string strExtensions; CFileItemList items; CGUIViewState* viewState=CGUIViewState::GetViewState(GetID(), items); if (viewState) { strExtensions = viewState->GetExtensions(); delete viewState; } m_slideShowStarted = true; SortDescription sorting = m_guiState->GetSortMethod(); pSlideShow->RunSlideShow(strPicture, true, CServiceBroker::GetSettings().GetBool(CSettings::SETTING_SLIDESHOW_SHUFFLE),false, "", true, sorting.sortBy, sorting.sortOrder, sorting.sortAttributes, strExtensions); } }
JSONRPC_STATUS CPlaylistOperations::Clear(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant ¶meterObject, CVariant &result) { int playlist = GetPlaylist(parameterObject["playlistid"]); CGUIWindowSlideShow *slideshow = NULL; switch (playlist) { case PLAYLIST_MUSIC: case PLAYLIST_VIDEO: CApplicationMessenger::Get().PlayListPlayerClear(playlist); break; case PLAYLIST_PICTURE: slideshow = (CGUIWindowSlideShow*)g_windowManager.GetWindow(WINDOW_SLIDESHOW); if (!slideshow) return FailedToExecute; CApplicationMessenger::Get().SendAction(CAction(ACTION_STOP), WINDOW_SLIDESHOW); slideshow->Reset(); break; } NotifyAll(); return ACK; }
JSONRPC_STATUS CPlaylistOperations::Clear(const std::string &method, ITransportLayer *transport, IClient *client, const CVariant ¶meterObject, CVariant &result) { int playlist = GetPlaylist(parameterObject["playlistid"]); CGUIWindowSlideShow *slideshow = NULL; switch (playlist) { case PLAYLIST_MUSIC: case PLAYLIST_VIDEO: CApplicationMessenger::GetInstance().SendMsg(TMSG_PLAYLISTPLAYER_CLEAR, playlist); break; case PLAYLIST_PICTURE: slideshow = (CGUIWindowSlideShow*)g_windowManager.GetWindow(WINDOW_SLIDESHOW); if (!slideshow) return FailedToExecute; CApplicationMessenger::GetInstance().SendMsg(TMSG_GUI_ACTION, WINDOW_SLIDESHOW, -1, static_cast<void*>(new CAction(ACTION_STOP))); slideshow->Reset(); break; } NotifyAll(); return ACK; }
JSON_STATUS CPlayerOperations::Shuffle(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant ¶meterObject, CVariant &result) { CGUIWindowSlideShow *slideshow = NULL; switch (GetPlayer(parameterObject["playerid"])) { case Video: case Audio: g_application.getApplicationMessenger().PlayListPlayerShuffle(GetPlaylist(GetPlayer(parameterObject["playerid"])), true); OnPlaylistChanged(); break; case Picture: slideshow = (CGUIWindowSlideShow*)g_windowManager.GetWindow(WINDOW_SLIDESHOW); if (slideshow && !slideshow->IsShuffled()) slideshow->Shuffle(); else if (!slideshow) return FailedToExecute; break; default: return FailedToExecute; } return ACK; }
JSONRPC_STATUS CPlaylistOperations::GetItems(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant ¶meterObject, CVariant &result) { CFileItemList list; int playlist = GetPlaylist(parameterObject["playlistid"]); CGUIWindowSlideShow *slideshow = NULL; switch (playlist) { case PLAYLIST_VIDEO: case PLAYLIST_MUSIC: CApplicationMessenger::Get().PlayListPlayerGetItems(playlist, list); break; case PLAYLIST_PICTURE: slideshow = (CGUIWindowSlideShow*)g_windowManager.GetWindow(WINDOW_SLIDESHOW); if (slideshow) slideshow->GetSlideShowContents(list); break; } HandleFileItemList("id", true, "items", list, parameterObject, result); return OK; }
bool CGUIWindowPictures::ShowPicture(int iItem, bool startSlideShow) { if ( iItem < 0 || iItem >= (int)m_vecItems->Size() ) return false; CFileItemPtr pItem = m_vecItems->Get(iItem); CStdString strPicture = pItem->GetPath(); #ifdef HAS_DVD_DRIVE if (pItem->IsDVD()) return MEDIA_DETECT::CAutorun::PlayDiscAskResume(m_vecItems->Get(iItem)->GetPath()); #endif if (pItem->m_bIsShareOrDrive) return false; CGUIWindowSlideShow *pSlideShow = (CGUIWindowSlideShow *)g_windowManager.GetWindow(WINDOW_SLIDESHOW); if (!pSlideShow) return false; if (g_application.m_pPlayer->IsPlayingVideo()) g_application.StopPlaying(); pSlideShow->Reset(); for (int i = 0; i < (int)m_vecItems->Size();++i) { CFileItemPtr pItem = m_vecItems->Get(i); if (!pItem->m_bIsFolder && !(URIUtils::IsRAR(pItem->GetPath()) || URIUtils::IsZIP(pItem->GetPath())) && (pItem->IsPicture() || ( CSettings::Get().GetBool("pictures.showvideos") && pItem->IsVideo()))) { pSlideShow->Add(pItem.get()); } } if (pSlideShow->NumSlides() == 0) return false; pSlideShow->Select(strPicture); if (startSlideShow) pSlideShow->StartSlideShow(); else { CVariant param; param["player"]["speed"] = 1; param["player"]["playerid"] = PLAYLIST_PICTURE; ANNOUNCEMENT::CAnnouncementManager::Get().Announce(ANNOUNCEMENT::Player, "xbmc", "OnPlay", pSlideShow->GetCurrentSlide(), param); } m_slideShowStarted = true; g_windowManager.ActivateWindow(WINDOW_SLIDESHOW); return true; }
bool CGUIWindowPictures::ShowPicture(int iItem, bool startSlideShow) { if ( iItem < 0 || iItem >= (int)m_vecItems->Size() ) return false; CFileItemPtr pItem = m_vecItems->Get(iItem); CStdString strPicture = pItem->GetPath(); #ifdef HAS_DVD_DRIVE if (pItem->IsDVD()) return MEDIA_DETECT::CAutorun::PlayDiscAskResume(m_vecItems->Get(iItem)->GetPath()); #endif if (pItem->m_bIsShareOrDrive) return false; CGUIWindowSlideShow *pSlideShow = (CGUIWindowSlideShow *)g_windowManager.GetWindow(WINDOW_SLIDESHOW); if (!pSlideShow) return false; if (g_application.IsPlayingVideo()) g_application.StopPlaying(); pSlideShow->Reset(); for (int i = 0; i < (int)m_vecItems->Size();++i) { CFileItemPtr pItem = m_vecItems->Get(i); if (!pItem->m_bIsFolder && !(URIUtils::IsRAR(pItem->GetPath()) || URIUtils::IsZIP(pItem->GetPath())) && (pItem->IsPicture() || ( g_guiSettings.GetBool("pictures.showvideos") && pItem->IsVideo()))) { pSlideShow->Add(pItem.get()); } } if (pSlideShow->NumSlides() == 0) return false; pSlideShow->Select(strPicture); if (startSlideShow) pSlideShow->StartSlideShow(false); m_slideShowStarted = true; g_windowManager.ActivateWindow(WINDOW_SLIDESHOW); return true; }