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; }
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; }
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); } }
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; }
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::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); } } }
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::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); } }
JSONRPC_STATUS CPlayerOperations::GetPropertyValue(PlayerType player, const CStdString &property, CVariant &result) { if (player == None) return FailedToExecute; int playlist = GetPlaylist(player); if (property.Equals("type")) { switch (player) { case Video: result = "video"; break; case Audio: result = "audio"; break; case Picture: result = "picture"; break; default: return FailedToExecute; } } else if (property.Equals("partymode")) { switch (player) { case Video: case Audio: if (IsPVRChannel()) { result = false; break; } result = g_partyModeManager.IsEnabled(); break; case Picture: result = false; break; default: return FailedToExecute; } } else if (property.Equals("speed")) { CGUIWindowSlideShow *slideshow = NULL; switch (player) { case Video: case Audio: result = g_application.IsPaused() ? 0 : g_application.GetPlaySpeed(); break; case Picture: slideshow = (CGUIWindowSlideShow*)g_windowManager.GetWindow(WINDOW_SLIDESHOW); if (slideshow && slideshow->IsPlaying() && !slideshow->IsPaused()) result = slideshow->GetDirection(); else result = 0; break; default: return FailedToExecute; } } else if (property.Equals("time")) { switch (player) { case Video: case Audio: { int ms = 0; if (!IsPVRChannel()) ms = (int)(g_application.GetTime() * 1000.0); else { EPG::CEpgInfoTag epg; if (GetCurrentEpg(epg)) ms = epg.Progress() * 1000; } MillisecondsToTimeObject(ms, result); break; } case Picture: MillisecondsToTimeObject(0, result); break; default: return FailedToExecute; } } else if (property.Equals("percentage")) { CGUIWindowSlideShow *slideshow = NULL; switch (player) { case Video: case Audio: { if (!IsPVRChannel()) result = g_application.GetPercentage(); else { EPG::CEpgInfoTag epg; if (GetCurrentEpg(epg)) result = epg.ProgressPercentage(); else result = 0; } break; } case Picture: slideshow = (CGUIWindowSlideShow*)g_windowManager.GetWindow(WINDOW_SLIDESHOW); if (slideshow && slideshow->NumSlides() > 0) result = (double)slideshow->CurrentSlide() / slideshow->NumSlides(); else result = 0.0; break; default: return FailedToExecute; } } else if (property.Equals("totaltime")) { switch (player) { case Video: case Audio: { int ms = 0; if (!IsPVRChannel()) ms = (int)(g_application.GetTotalTime() * 1000.0); else { EPG::CEpgInfoTag epg; if (GetCurrentEpg(epg)) ms = epg.GetDuration() * 1000; } MillisecondsToTimeObject(ms, result); break; } case Picture: MillisecondsToTimeObject(0, result); break; default: return FailedToExecute; } } else if (property.Equals("playlistid")) { result = playlist; } else if (property.Equals("position")) { CGUIWindowSlideShow *slideshow = NULL; switch (player) { case Video: case Audio: if (!IsPVRChannel() && g_playlistPlayer.GetCurrentPlaylist() == playlist) result = g_playlistPlayer.GetCurrentSong(); else result = -1; break; case Picture: slideshow = (CGUIWindowSlideShow*)g_windowManager.GetWindow(WINDOW_SLIDESHOW); if (slideshow && slideshow->IsPlaying()) result = slideshow->CurrentSlide() - 1; else result = -1; break; default: result = -1; break; } } else if (property.Equals("repeat")) { switch (player) { case Video: case Audio: if (IsPVRChannel()) { result = "off"; break; } switch (g_playlistPlayer.GetRepeat(playlist)) { case REPEAT_ONE: result = "one"; break; case REPEAT_ALL: result = "all"; break; default: result = "off"; break; } break; case Picture: default: result = "off"; break; } } else if (property.Equals("shuffled")) { CGUIWindowSlideShow *slideshow = NULL; switch (player) { case Video: case Audio: if (IsPVRChannel()) { result = false; break; } result = g_playlistPlayer.IsShuffled(playlist); break; case Picture: slideshow = (CGUIWindowSlideShow*)g_windowManager.GetWindow(WINDOW_SLIDESHOW); if (slideshow && slideshow->IsPlaying()) result = slideshow->IsShuffled(); else result = -1; break; default: result = -1; break; } } else if (property.Equals("canseek")) { switch (player) { case Video: case Audio: if (g_application.m_pPlayer) result = g_application.m_pPlayer->CanSeek(); else result = false; break; case Picture: default: result = false; break; } } else if (property.Equals("canchangespeed")) { switch (player) { case Video: case Audio: result = !IsPVRChannel(); break; case Picture: default: result = false; break; } } else if (property.Equals("canmove")) { switch (player) { case Picture: result = true; break; case Video: case Audio: default: result = false; break; } } else if (property.Equals("canzoom")) { switch (player) { case Picture: result = true; break; case Video: case Audio: default: result = false; break; } } else if (property.Equals("canrotate")) { switch (player) { case Picture: result = true; break; case Video: case Audio: default: result = false; break; } } else if (property.Equals("canshuffle")) { switch (player) { case Video: case Audio: case Picture: result = !IsPVRChannel(); break; default: result = false; break; } } else if (property.Equals("canrepeat")) { switch (player) { case Video: case Audio: result = !IsPVRChannel(); break; case Picture: default: result = false; break; } } else if (property.Equals("currentaudiostream")) { switch (player) { case Video: case Audio: if (g_application.m_pPlayer) { result = CVariant(CVariant::VariantTypeObject); int index = g_application.m_pPlayer->GetAudioStream(); if (index >= 0) { result["index"] = index; CStdString value; g_application.m_pPlayer->GetAudioStreamName(index, value); result["name"] = value; value.Empty(); g_application.m_pPlayer->GetAudioStreamLanguage(index, value); result["language"] = value; } result["codec"] = g_application.m_pPlayer->GetAudioCodecName(); result["bitrate"] = g_application.m_pPlayer->GetAudioBitrate(); result["channels"] = g_application.m_pPlayer->GetChannels(); } else result = CVariant(CVariant::VariantTypeNull); break; case Picture: default: result = CVariant(CVariant::VariantTypeNull); break; } } else if (property.Equals("audiostreams")) { result = CVariant(CVariant::VariantTypeArray); switch (player) { case Video: if (g_application.m_pPlayer) { for (int index = 0; index < g_application.m_pPlayer->GetAudioStreamCount(); index++) { CVariant audioStream(CVariant::VariantTypeObject); audioStream["index"] = index; CStdString value; g_application.m_pPlayer->GetAudioStreamName(index, value); audioStream["name"] = value; value.Empty(); g_application.m_pPlayer->GetAudioStreamLanguage(index, value); audioStream["language"] = value; result.append(audioStream); } } break; case Audio: case Picture: default: break; } } else if (property.Equals("subtitleenabled")) { switch (player) { case Video: if (g_application.m_pPlayer) result = g_application.m_pPlayer->GetSubtitleVisible(); break; case Audio: case Picture: default: result = false; break; } } else if (property.Equals("currentsubtitle")) { switch (player) { case Video: if (g_application.m_pPlayer) { result = CVariant(CVariant::VariantTypeObject); int index = g_application.m_pPlayer->GetSubtitle(); if (index >= 0) { result["index"] = index; CStdString value; g_application.m_pPlayer->GetSubtitleName(index, value); result["name"] = value; value.Empty(); g_application.m_pPlayer->GetSubtitleLanguage(index, value); result["language"] = value; } } else result = CVariant(CVariant::VariantTypeNull); break; case Audio: case Picture: default: result = CVariant(CVariant::VariantTypeNull); break; } } else if (property.Equals("subtitles")) { result = CVariant(CVariant::VariantTypeArray); switch (player) { case Video: if (g_application.m_pPlayer) { for (int index = 0; index < g_application.m_pPlayer->GetSubtitleCount(); index++) { CVariant subtitle(CVariant::VariantTypeObject); subtitle["index"] = index; CStdString value; g_application.m_pPlayer->GetSubtitleName(index, value); subtitle["name"] = value; value.Empty(); g_application.m_pPlayer->GetSubtitleLanguage(index, value); subtitle["language"] = value; result.append(subtitle); } } break; case Audio: case Picture: default: break; } } else if (property.Equals("live")) result = IsPVRChannel(); else return InvalidParams; return OK; }
/*---------------------------------------------------------------------- | CUPnPRenderer::UpdateState +---------------------------------------------------------------------*/ void CUPnPRenderer::UpdateState() { NPT_AutoLock lock(m_state); PLT_Service *avt; if (NPT_FAILED(FindServiceByType("urn:schemas-upnp-org:service:AVTransport:1", avt))) return; /* don't update state while transitioning */ NPT_String state; avt->GetStateVariableValue("TransportState", state); if(state == "TRANSITIONING") return; avt->SetStateVariable("TransportStatus", "OK"); if (g_application.m_pPlayer->IsPlaying() || g_application.m_pPlayer->IsPausedPlayback()) { avt->SetStateVariable("NumberOfTracks", "1"); avt->SetStateVariable("CurrentTrack", "1"); std::string buffer = g_infoManager.GetCurrentPlayTime(TIME_FORMAT_HH_MM_SS); avt->SetStateVariable("RelativeTimePosition", buffer.c_str()); avt->SetStateVariable("AbsoluteTimePosition", buffer.c_str()); buffer = g_infoManager.GetDuration(TIME_FORMAT_HH_MM_SS); if (buffer.length() > 0) { avt->SetStateVariable("CurrentTrackDuration", buffer.c_str()); avt->SetStateVariable("CurrentMediaDuration", buffer.c_str()); } else { avt->SetStateVariable("CurrentTrackDuration", "00:00:00"); avt->SetStateVariable("CurrentMediaDuration", "00:00:00"); } } else if (g_windowManager.GetActiveWindow() == WINDOW_SLIDESHOW) { avt->SetStateVariable("TransportState", "PLAYING"); avt->SetStateVariable("AVTransportURI" , g_infoManager.GetPictureLabel(SLIDE_FILE_PATH).c_str()); avt->SetStateVariable("CurrentTrackURI", g_infoManager.GetPictureLabel(SLIDE_FILE_PATH).c_str()); avt->SetStateVariable("TransportPlaySpeed", "1"); CGUIWindowSlideShow *slideshow = g_windowManager.GetWindow<CGUIWindowSlideShow>(WINDOW_SLIDESHOW); if (slideshow) { std::string index; index = StringUtils::Format("%d", slideshow->NumSlides()); avt->SetStateVariable("NumberOfTracks", index.c_str()); index = StringUtils::Format("%d", slideshow->CurrentSlide()); avt->SetStateVariable("CurrentTrack", index.c_str()); } avt->SetStateVariable("CurrentTrackMetadata", ""); avt->SetStateVariable("AVTransportURIMetaData", ""); } else { avt->SetStateVariable("TransportState", "STOPPED"); avt->SetStateVariable("TransportPlaySpeed", "1"); avt->SetStateVariable("NumberOfTracks", "0"); avt->SetStateVariable("CurrentTrack", "0"); avt->SetStateVariable("RelativeTimePosition", "00:00:00"); avt->SetStateVariable("AbsoluteTimePosition", "00:00:00"); avt->SetStateVariable("CurrentTrackDuration", "00:00:00"); avt->SetStateVariable("CurrentMediaDuration", "00:00:00"); avt->SetStateVariable("NextAVTransportURI", ""); avt->SetStateVariable("NextAVTransportURIMetaData", ""); } }
JSONRPC_STATUS CPlayerOperations::GetPropertyValue(PlayerType player, const std::string &property, CVariant &result) { if (player == None) return FailedToExecute; int playlist = GetPlaylist(player); if (property == "type") { switch (player) { case Video: result = "video"; break; case Audio: result = "audio"; break; case Picture: result = "picture"; break; default: return FailedToExecute; } } else if (property == "partymode") { switch (player) { case Video: case Audio: if (IsPVRChannel()) { result = false; break; } result = g_partyModeManager.IsEnabled(); break; case Picture: result = false; break; default: return FailedToExecute; } } else if (property == "speed") { CGUIWindowSlideShow *slideshow = NULL; switch (player) { case Video: case Audio: result = g_application.m_pPlayer->IsPausedPlayback() ? 0 : g_application.m_pPlayer->GetPlaySpeed(); break; case Picture: slideshow = (CGUIWindowSlideShow*)g_windowManager.GetWindow(WINDOW_SLIDESHOW); if (slideshow && slideshow->IsPlaying() && !slideshow->IsPaused()) result = slideshow->GetDirection(); else result = 0; break; default: return FailedToExecute; } } else if (property == "time") { switch (player) { case Video: case Audio: { int ms = 0; if (!IsPVRChannel()) ms = (int)(g_application.GetTime() * 1000.0); else { EPG::CEpgInfoTagPtr epg(GetCurrentEpg()); if (epg) ms = epg->Progress() * 1000; } MillisecondsToTimeObject(ms, result); break; } case Picture: MillisecondsToTimeObject(0, result); break; default: return FailedToExecute; } } else if (property == "percentage") { CGUIWindowSlideShow *slideshow = NULL; switch (player) { case Video: case Audio: { if (!IsPVRChannel()) result = g_application.GetPercentage(); else { EPG::CEpgInfoTagPtr epg(GetCurrentEpg()); if (epg) result = epg->ProgressPercentage(); else result = 0; } break; } case Picture: slideshow = (CGUIWindowSlideShow*)g_windowManager.GetWindow(WINDOW_SLIDESHOW); if (slideshow && slideshow->NumSlides() > 0) result = (double)slideshow->CurrentSlide() / slideshow->NumSlides(); else result = 0.0; break; default: return FailedToExecute; } } else if (property == "totaltime") { switch (player) { case Video: case Audio: { int ms = 0; if (!IsPVRChannel()) ms = (int)(g_application.GetTotalTime() * 1000.0); else { EPG::CEpgInfoTagPtr epg(GetCurrentEpg()); if (epg) ms = epg->GetDuration() * 1000; } MillisecondsToTimeObject(ms, result); break; } case Picture: MillisecondsToTimeObject(0, result); break; default: return FailedToExecute; } } else if (property == "playlistid") { result = playlist; } else if (property == "position") { CGUIWindowSlideShow *slideshow = NULL; switch (player) { case Video: case Audio: /* Return the position of current item if there is an active playlist */ if (!IsPVRChannel() && g_playlistPlayer.GetCurrentPlaylist() == playlist) result = g_playlistPlayer.GetCurrentSong(); else result = -1; break; case Picture: slideshow = (CGUIWindowSlideShow*)g_windowManager.GetWindow(WINDOW_SLIDESHOW); if (slideshow && slideshow->IsPlaying()) result = slideshow->CurrentSlide() - 1; else result = -1; break; default: result = -1; break; } } else if (property == "repeat") { switch (player) { case Video: case Audio: if (IsPVRChannel()) { result = "off"; break; } switch (g_playlistPlayer.GetRepeat(playlist)) { case REPEAT_ONE: result = "one"; break; case REPEAT_ALL: result = "all"; break; default: result = "off"; break; } break; case Picture: default: result = "off"; break; } } else if (property == "shuffled") { CGUIWindowSlideShow *slideshow = NULL; switch (player) { case Video: case Audio: if (IsPVRChannel()) { result = false; break; } result = g_playlistPlayer.IsShuffled(playlist); break; case Picture: slideshow = (CGUIWindowSlideShow*)g_windowManager.GetWindow(WINDOW_SLIDESHOW); if (slideshow && slideshow->IsPlaying()) result = slideshow->IsShuffled(); else result = -1; break; default: result = -1; break; } } else if (property == "canseek") { switch (player) { case Video: case Audio: result = g_application.m_pPlayer->CanSeek(); break; case Picture: default: result = false; break; } } else if (property == "canchangespeed") { switch (player) { case Video: case Audio: result = !IsPVRChannel(); break; case Picture: default: result = false; break; } } else if (property == "canmove") { switch (player) { case Picture: result = true; break; case Video: case Audio: default: result = false; break; } } else if (property == "canzoom") { switch (player) { case Picture: result = true; break; case Video: case Audio: default: result = false; break; } } else if (property == "canrotate") { switch (player) { case Picture: result = true; break; case Video: case Audio: default: result = false; break; } } else if (property == "canshuffle") { switch (player) { case Video: case Audio: case Picture: result = !IsPVRChannel(); break; default: result = false; break; } } else if (property == "canrepeat") { switch (player) { case Video: case Audio: result = !IsPVRChannel(); break; case Picture: default: result = false; break; } } else if (property == "currentaudiostream") { switch (player) { case Video: case Audio: if (g_application.m_pPlayer->HasPlayer()) { result = CVariant(CVariant::VariantTypeObject); int index = g_application.m_pPlayer->GetAudioStream(); if (index >= 0) { SPlayerAudioStreamInfo info; g_application.m_pPlayer->GetAudioStreamInfo(index, info); result["index"] = index; result["name"] = info.name; result["language"] = info.language; result["codec"] = info.audioCodecName; result["bitrate"] = info.bitrate; result["channels"] = info.channels; } } else result = CVariant(CVariant::VariantTypeNull); break; case Picture: default: result = CVariant(CVariant::VariantTypeNull); break; } } else if (property == "audiostreams") { result = CVariant(CVariant::VariantTypeArray); switch (player) { case Video: if (g_application.m_pPlayer->HasPlayer()) { for (int index = 0; index < g_application.m_pPlayer->GetAudioStreamCount(); index++) { SPlayerAudioStreamInfo info; g_application.m_pPlayer->GetAudioStreamInfo(index, info); CVariant audioStream(CVariant::VariantTypeObject); audioStream["index"] = index; audioStream["name"] = info.name; audioStream["language"] = info.language; audioStream["codec"] = info.audioCodecName; audioStream["bitrate"] = info.bitrate; audioStream["channels"] = info.channels; result.append(audioStream); } } break; case Audio: case Picture: default: break; } } else if (property == "currentvideostream") { switch (player) { case Video: { int index = g_application.m_pPlayer->GetVideoStream(); if (index >= 0) { result = CVariant(CVariant::VariantTypeObject); SPlayerVideoStreamInfo info; g_application.m_pPlayer->GetVideoStreamInfo(index, info); result["index"] = index; result["name"] = info.name; result["language"] = info.language; result["codec"] = info.videoCodecName; result["width"] = info.width; result["height"] = info.height; } else result = CVariant(CVariant::VariantTypeNull); break; } case Audio: case Picture: default: result = CVariant(CVariant::VariantTypeNull); break; } } else if (property == "videostreams") { result = CVariant(CVariant::VariantTypeArray); switch (player) { case Video: { int streamCount = g_application.m_pPlayer->GetVideoStreamCount(); if (streamCount >= 0) { for (int index = 0; index < streamCount; ++index) { SPlayerVideoStreamInfo info; g_application.m_pPlayer->GetVideoStreamInfo(index, info); CVariant videoStream(CVariant::VariantTypeObject); videoStream["index"] = index; videoStream["name"] = info.name; videoStream["language"] = info.language; videoStream["codec"] = info.videoCodecName; videoStream["width"] = info.width; videoStream["height"] = info.height; result.append(videoStream); } } break; } case Audio: case Picture: default: break; } } else if (property == "subtitleenabled") { switch (player) { case Video: result = g_application.m_pPlayer->GetSubtitleVisible(); break; case Audio: case Picture: default: result = false; break; } } else if (property == "currentsubtitle") { switch (player) { case Video: if (g_application.m_pPlayer->HasPlayer()) { result = CVariant(CVariant::VariantTypeObject); int index = g_application.m_pPlayer->GetSubtitle(); if (index >= 0) { SPlayerSubtitleStreamInfo info; g_application.m_pPlayer->GetSubtitleStreamInfo(index, info); result["index"] = index; result["name"] = info.name; result["language"] = info.language; } } else result = CVariant(CVariant::VariantTypeNull); break; case Audio: case Picture: default: result = CVariant(CVariant::VariantTypeNull); break; } } else if (property == "subtitles") { result = CVariant(CVariant::VariantTypeArray); switch (player) { case Video: if (g_application.m_pPlayer->HasPlayer()) { for (int index = 0; index < g_application.m_pPlayer->GetSubtitleCount(); index++) { SPlayerSubtitleStreamInfo info; g_application.m_pPlayer->GetSubtitleStreamInfo(index, info); CVariant subtitle(CVariant::VariantTypeObject); subtitle["index"] = index; subtitle["name"] = info.name; subtitle["language"] = info.language; result.append(subtitle); } } break; case Audio: case Picture: default: break; } } else if (property == "live") result = IsPVRChannel(); else return InvalidParams; return OK; }
bool CPicturesGUIInfo::GetLabel(std::string& value, const CFileItem *item, int contextWindow, const CGUIInfo &info, std::string *fallback) const { /////////////////////////////////////////////////////////////////////////////////////////////// // LISTITEM_* / SLIDESHOW_* (values directly supported by PictureInfoTag) /////////////////////////////////////////////////////////////////////////////////////////////// if (item->IsPicture() && info.m_info >= LISTITEM_PICTURE_START && info.m_info <= LISTITEM_PICTURE_END) { const auto& it = listitem2slideshow_map.find(info.m_info); if (it != listitem2slideshow_map.end()) { value = item->GetPictureInfoTag()->GetInfo(it->second); return true; } else { CLog::Log(LOGERROR, "CPicturesGUIInfo::GetLabel - cannot map LISTITEM (%d) to SLIDESHOW label!", info.m_info); return false; } } else if (m_currentSlide && info.m_info >= SLIDESHOW_LABELS_START && info.m_info <= SLIDESHOW_LABELS_END) { value = m_currentSlide->GetPictureInfoTag()->GetInfo(info.m_info); return true; } if (item->IsPicture()) { ///////////////////////////////////////////////////////////////////////////////////////////////// // LISTITEM_* ///////////////////////////////////////////////////////////////////////////////////////////////// switch (info.m_info) { case LISTITEM_PICTURE_PATH: { if (!item->IsZIP() || item->IsRAR() || item->IsCBZ() || item->IsCBR()) { value = item->GetPath(); return true; } break; } } } if (item->HasPictureInfoTag()) { switch (info.m_info) { /////////////////////////////////////////////////////////////////////////////////////////////// // SLIDESHOW_* (values not directly supported by PictureInfoTag) /////////////////////////////////////////////////////////////////////////////////////////////// case SLIDESHOW_FILE_NAME: { value = URIUtils::GetFileName(item->GetPath()); return true; } case SLIDESHOW_FILE_PATH: { const std::string path = URIUtils::GetDirectory(item->GetPath()); value = CURL(path).GetWithoutUserDetails(); return true; } case SLIDESHOW_FILE_SIZE: { if (!item->m_bIsFolder || item->m_dwSize) { value = StringUtils::SizeToString(item->m_dwSize); return true; } break; } case SLIDESHOW_FILE_DATE: { if (item->m_dateTime.IsValid()) { value = item->m_dateTime.GetAsLocalizedDate(); return true; } break; } } } switch (info.m_info) { /////////////////////////////////////////////////////////////////////////////////////////////// // SLIDESHOW_* /////////////////////////////////////////////////////////////////////////////////////////////// case SLIDESHOW_INDEX: { CGUIWindowSlideShow *slideshow = CServiceBroker::GetGUI()->GetWindowManager().GetWindow<CGUIWindowSlideShow>(WINDOW_SLIDESHOW); if (slideshow && slideshow->NumSlides()) { value = StringUtils::Format("%d/%d", slideshow->CurrentSlide(), slideshow->NumSlides()); return true; } break; } } return false; }