JSONRPC_STATUS CPlayerOperations::GetItem(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant ¶meterObject, CVariant &result) { PlayerType player = GetPlayer(parameterObject["playerid"]); CFileItemPtr fileItem; switch (player) { case Video: case Audio: { fileItem = CFileItemPtr(new CFileItem(g_application.CurrentFileItem())); if (fileItem->GetLabel().empty()) { if (IsPVRChannel()) { CPVRChannelPtr currentChannel; if (g_PVRManager.GetCurrentChannel(currentChannel) && currentChannel.get() != NULL) fileItem = CFileItemPtr(new CFileItem(*currentChannel.get())); } else if (player == Video) { if (!CVideoLibrary::FillFileItem(g_application.CurrentFile(), fileItem, parameterObject)) { const CVideoInfoTag *currentVideoTag = g_infoManager.GetCurrentMovieTag(); if (currentVideoTag != NULL) fileItem = CFileItemPtr(new CFileItem(*currentVideoTag)); fileItem->SetPath(g_application.CurrentFileItem().GetPath()); } } else { if (!CAudioLibrary::FillFileItem(g_application.CurrentFile(), fileItem, parameterObject)) { const MUSIC_INFO::CMusicInfoTag *currentMusicTag = g_infoManager.GetCurrentSongTag(); if (currentMusicTag != NULL) fileItem = CFileItemPtr(new CFileItem(*currentMusicTag)); fileItem->SetPath(g_application.CurrentFileItem().GetPath()); } } } if (IsPVRChannel()) break; if (player == Video) { bool additionalInfo = false; bool streamdetails = false; for (CVariant::const_iterator_array itr = parameterObject["properties"].begin_array(); itr != parameterObject["properties"].end_array(); itr++) { CStdString fieldValue = itr->asString(); if (fieldValue == "cast" || fieldValue == "set" || fieldValue == "setid" || fieldValue == "showlink" || fieldValue == "resume" || (fieldValue == "streamdetails" && !fileItem->GetVideoInfoTag()->m_streamDetails.HasItems())) additionalInfo = true; } CVideoDatabase videodatabase; if ((additionalInfo) && videodatabase.Open()) { if (additionalInfo) { switch (fileItem->GetVideoContentType()) { case VIDEODB_CONTENT_MOVIES: videodatabase.GetMovieInfo("", *(fileItem->GetVideoInfoTag()), fileItem->GetVideoInfoTag()->m_iDbId); break; case VIDEODB_CONTENT_MUSICVIDEOS: videodatabase.GetMusicVideoInfo("", *(fileItem->GetVideoInfoTag()), fileItem->GetVideoInfoTag()->m_iDbId); break; case VIDEODB_CONTENT_EPISODES: videodatabase.GetEpisodeInfo("", *(fileItem->GetVideoInfoTag()), fileItem->GetVideoInfoTag()->m_iDbId); break; case VIDEODB_CONTENT_TVSHOWS: case VIDEODB_CONTENT_MOVIE_SETS: default: break; } } videodatabase.Close(); } } else if (player == Audio) { if (fileItem->IsMusicDb()) { CMusicDatabase musicdb; CFileItemList items; items.Add(fileItem); CAudioLibrary::GetAdditionalSongDetails(parameterObject, items, musicdb); } } break; } case Picture: { CGUIWindowSlideShow *slideshow = (CGUIWindowSlideShow*)g_windowManager.GetWindow(WINDOW_SLIDESHOW); if (!slideshow) return FailedToExecute; CFileItemList slides; slideshow->GetSlideShowContents(slides); fileItem = slides[slideshow->CurrentSlide() - 1]; break; } case None: default: return FailedToExecute; } HandleFileItem("id", !IsPVRChannel(), "item", fileItem, parameterObject, parameterObject["properties"], result, false); return OK; }
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; }
JSON_STATUS CPlayerOperations::GetItem(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant ¶meterObject, CVariant &result) { PlayerType player = GetPlayer(parameterObject["playerid"]); CFileItemPtr fileItem; switch (player) { case Video: case Audio: { if (g_application.CurrentFileItem().GetLabel().empty()) { CFileItem tmpItem; if (player == Video) CVideoLibrary::FillFileItem(g_application.CurrentFile(), tmpItem); else CAudioLibrary::FillFileItem(g_application.CurrentFile(), tmpItem); fileItem = CFileItemPtr(new CFileItem(tmpItem)); } else fileItem = CFileItemPtr(new CFileItem(g_application.CurrentFileItem())); if (player == Video) { bool additionalInfo = false; for (CVariant::const_iterator_array itr = parameterObject["properties"].begin_array(); itr != parameterObject["properties"].end_array(); itr++) { CStdString fieldValue = itr->asString(); if (fieldValue == "cast" || fieldValue == "set" || fieldValue == "setid" || fieldValue == "showlink" || fieldValue == "resume") additionalInfo = true; } if (additionalInfo) { CVideoDatabase videodatabase; if (videodatabase.Open()) { switch (fileItem->GetVideoContentType()) { case VIDEODB_CONTENT_MOVIES: videodatabase.GetMovieInfo("", *(fileItem->GetVideoInfoTag()), fileItem->GetVideoInfoTag()->m_iDbId); break; case VIDEODB_CONTENT_MUSICVIDEOS: videodatabase.GetMusicVideoInfo("", *(fileItem->GetVideoInfoTag()), fileItem->GetVideoInfoTag()->m_iDbId); break; case VIDEODB_CONTENT_EPISODES: videodatabase.GetEpisodeInfo("", *(fileItem->GetVideoInfoTag()), fileItem->GetVideoInfoTag()->m_iDbId); break; case VIDEODB_CONTENT_TVSHOWS: case VIDEODB_CONTENT_MOVIE_SETS: default: break; } videodatabase.Close(); } } } break; } case Picture: { CGUIWindowSlideShow *slideshow = (CGUIWindowSlideShow*)g_windowManager.GetWindow(WINDOW_SLIDESHOW); if (!slideshow) return FailedToExecute; CFileItemList slides; slideshow->GetSlideShowContents(slides); fileItem = slides[slideshow->CurrentSlide() - 1]; break; } case None: default: return FailedToExecute; } HandleFileItem("id", true, "item", fileItem, parameterObject, parameterObject["properties"], result, false); return OK; }