bool CMusicThumbLoader::LoadItemCached(CFileItem* pItem) { if (pItem->m_bIsShareOrDrive) return false; if (pItem->HasMusicInfoTag() && pItem->GetArt().empty()) { if (FillLibraryArt(*pItem)) return true; if (pItem->GetMusicInfoTag()->GetType() == "artist") return false; // No fallback } if (pItem->HasVideoInfoTag() && pItem->GetArt().empty()) { // music video CVideoThumbLoader loader; if (loader.LoadItemCached(pItem)) return true; } if (!pItem->HasArt("thumb")) { std::string art = GetCachedImage(*pItem, "thumb"); if (!art.empty()) pItem->SetArt("thumb", art); } if (!pItem->HasArt("fanart")) { std::string art = GetCachedImage(*pItem, "fanart"); if (!art.empty()) { pItem->SetArt("fanart", art); } else if (pItem->HasMusicInfoTag() && !pItem->GetMusicInfoTag()->GetArtist().empty()) { std::string artist = pItem->GetMusicInfoTag()->GetArtist()[0]; m_musicDatabase->Open(); int idArtist = m_musicDatabase->GetArtistByName(artist); if (idArtist >= 0) { string fanart = m_musicDatabase->GetArtForItem(idArtist, "artist", "fanart"); if (!fanart.empty()) { pItem->SetArt("artist.fanart", fanart); pItem->SetArtFallback("fanart", "artist.fanart"); } } m_musicDatabase->Close(); } } return false; }
bool CPictureThumbLoader::LoadItemCached(CFileItem* pItem) { if (pItem->m_bIsShareOrDrive || pItem->IsParentFolder()) return false; if (pItem->HasArt("thumb") && m_regenerateThumbs) { CTextureCache::Get().ClearCachedImage(pItem->GetArt("thumb")); if (m_textureDatabase->Open()) { m_textureDatabase->ClearTextureForPath(pItem->GetPath(), "thumb"); m_textureDatabase->Close(); } pItem->SetArt("thumb", ""); } CStdString thumb; if (pItem->IsPicture() && !pItem->IsZIP() && !pItem->IsRAR() && !pItem->IsCBZ() && !pItem->IsCBR() && !pItem->IsPlayList()) { // load the thumb from the image file thumb = pItem->HasArt("thumb") ? pItem->GetArt("thumb") : CTextureCache::GetWrappedThumbURL(pItem->GetPath()); } else if (pItem->IsVideo() && !pItem->IsZIP() && !pItem->IsRAR() && !pItem->IsCBZ() && !pItem->IsCBR() && !pItem->IsPlayList()) { // video CVideoThumbLoader loader; if (!loader.FillThumb(*pItem)) { CStdString thumbURL = CVideoThumbLoader::GetEmbeddedThumbURL(*pItem); if (CTextureCache::Get().HasCachedImage(thumbURL)) { thumb = thumbURL; } else if (CSettings::Get().GetBool("myvideos.extractthumb") && CSettings::Get().GetBool("myvideos.extractflags")) { CFileItem item(*pItem); CThumbExtractor* extract = new CThumbExtractor(item, pItem->GetPath(), true, thumbURL); AddJob(extract); thumb.clear(); } } } else if (!pItem->HasArt("thumb")) { // folder, zip, cbz, rar, cbr, playlist may have a previously cached image thumb = GetCachedImage(*pItem, "thumb"); } if (!thumb.IsEmpty()) { CTextureCache::Get().BackgroundCacheImage(thumb); pItem->SetArt("thumb", thumb); } pItem->FillInDefaultIcon(); return true; }
bool CMusicThumbLoader::LoadItemCached(CFileItem* pItem) { if (pItem->m_bIsShareOrDrive) return false; if (pItem->HasMusicInfoTag() && (pItem->GetArt().empty() || (pItem->GetArt().size() == 1 && pItem->HasArt("thumb")))) { if (FillLibraryArt(*pItem)) return true; if (pItem->GetMusicInfoTag()->GetType() == MediaTypeArtist) return false; // No fallback } if (pItem->HasVideoInfoTag() && pItem->GetArt().empty()) { // music video CVideoThumbLoader loader; if (loader.LoadItemCached(pItem)) return true; } // Fallback to folder thumb when path has one cached if (!pItem->HasArt("thumb")) { std::string art = GetCachedImage(*pItem, "thumb"); if (!art.empty()) pItem->SetArt("thumb", art); } // Fallback to folder fanart when path has one cached //! @todo Remove as "fanart" is never been cached for music folders (only for // artists) or start caching fanart for folders? if (!pItem->HasArt("fanart")) { std::string art = GetCachedImage(*pItem, "fanart"); if (!art.empty()) { pItem->SetArt("fanart", art); } } return false; }
bool CMusicThumbLoader::LoadItemLookup(CFileItem* pItem) { if (pItem->m_bIsShareOrDrive) return false; if (pItem->HasMusicInfoTag() && pItem->GetMusicInfoTag()->GetType() == "artist") // No fallback for artist return false; if (pItem->HasVideoInfoTag()) { // music video CVideoThumbLoader loader; if (loader.LoadItemLookup(pItem)) return true; } if (!pItem->HasArt("thumb")) { // Look for embedded art if (pItem->HasMusicInfoTag() && !pItem->GetMusicInfoTag()->GetCoverArtInfo().empty()) { // The item has got embedded art but user thumbs overrule, so check for those first if (!FillThumb(*pItem, false)) // Check for user thumbs but ignore folder thumbs { // No user thumb, use embedded art CStdString thumb = CTextureUtils::GetWrappedImageURL(pItem->GetPath(), "music"); pItem->SetArt("thumb", thumb); } } else { // Check for user thumbs FillThumb(*pItem, true); } } return true; }
bool CRecentlyAddedJob::UpdateVideo() { CGUIWindow* home = g_windowManager.GetWindow(WINDOW_HOME); if ( home == NULL ) return false; CLog::Log(LOGDEBUG, "CRecentlyAddedJob::UpdateVideos() - Running RecentlyAdded home screen update"); int i = 0; CFileItemList items; CVideoDatabase videodatabase; std::string path; CVideoThumbLoader loader; loader.OnLoaderStart(); path = g_advancedSettings.m_recentlyAddedMoviePath; if (g_advancedSettings.m_iVideoLibraryRecentlyAddedUnseen) { CVideoDbUrl url; url.FromString(path); url.AddOption("filter", "{\"type\":\"movies\", \"rules\":[{\"field\":\"playcount\", \"operator\":\"is\", \"value\":\"0\"}]}"); path = url.ToString(); } videodatabase.Open(); if (videodatabase.GetRecentlyAddedMoviesNav(path, items, NUM_ITEMS)) { for (; i < items.Size(); ++i) { CFileItemPtr item = items.Get(i); std::string value = StringUtils::Format("%i", i + 1); std::string strRating = StringUtils::Format("%.1f", item->GetVideoInfoTag()->m_fRating); home->SetProperty("LatestMovie." + value + ".Title" , item->GetLabel()); home->SetProperty("LatestMovie." + value + ".Rating" , strRating); home->SetProperty("LatestMovie." + value + ".Year" , item->GetVideoInfoTag()->m_iYear); home->SetProperty("LatestMovie." + value + ".Plot" , item->GetVideoInfoTag()->m_strPlot); home->SetProperty("LatestMovie." + value + ".RunningTime" , item->GetVideoInfoTag()->GetDuration() / 60); home->SetProperty("LatestMovie." + value + ".Path" , item->GetVideoInfoTag()->m_strFileNameAndPath); home->SetProperty("LatestMovie." + value + ".Trailer" , item->GetVideoInfoTag()->m_strTrailer); if (!item->HasArt("thumb")) loader.LoadItem(item.get()); home->SetProperty("LatestMovie." + value + ".Thumb" , item->GetArt("thumb")); home->SetProperty("LatestMovie." + value + ".Fanart" , item->GetArt("fanart")); } } for (; i < NUM_ITEMS; ++i) { std::string value = StringUtils::Format("%i", i + 1); home->SetProperty("LatestMovie." + value + ".Title" , ""); home->SetProperty("LatestMovie." + value + ".Thumb" , ""); home->SetProperty("LatestMovie." + value + ".Rating" , ""); home->SetProperty("LatestMovie." + value + ".Year" , ""); home->SetProperty("LatestMovie." + value + ".Plot" , ""); home->SetProperty("LatestMovie." + value + ".RunningTime" , ""); home->SetProperty("LatestMovie." + value + ".Path" , ""); home->SetProperty("LatestMovie." + value + ".Trailer" , ""); home->SetProperty("LatestMovie." + value + ".Fanart" , ""); } i = 0; CFileItemList TVShowItems; path = g_advancedSettings.m_recentlyAddedEpisodePath; if (g_advancedSettings.m_iVideoLibraryRecentlyAddedUnseen) { CVideoDbUrl url; url.FromString(path); url.AddOption("filter", "{\"type\":\"episodes\", \"rules\":[{\"field\":\"playcount\", \"operator\":\"is\", \"value\":\"0\"}]}"); path = url.ToString(); } if (videodatabase.GetRecentlyAddedEpisodesNav(path, TVShowItems, NUM_ITEMS)) { for (; i < TVShowItems.Size(); ++i) { CFileItemPtr item = TVShowItems.Get(i); int EpisodeSeason = item->GetVideoInfoTag()->m_iSeason; int EpisodeNumber = item->GetVideoInfoTag()->m_iEpisode; std::string EpisodeNo = StringUtils::Format("s%02de%02d", EpisodeSeason, EpisodeNumber); std::string value = StringUtils::Format("%i", i + 1); std::string strRating = StringUtils::Format("%.1f", item->GetVideoInfoTag()->m_fRating); home->SetProperty("LatestEpisode." + value + ".ShowTitle" , item->GetVideoInfoTag()->m_strShowTitle); home->SetProperty("LatestEpisode." + value + ".EpisodeTitle" , item->GetVideoInfoTag()->m_strTitle); home->SetProperty("LatestEpisode." + value + ".Rating" , strRating); home->SetProperty("LatestEpisode." + value + ".Plot" , item->GetVideoInfoTag()->m_strPlot); home->SetProperty("LatestEpisode." + value + ".EpisodeNo" , EpisodeNo); home->SetProperty("LatestEpisode." + value + ".EpisodeSeason" , EpisodeSeason); home->SetProperty("LatestEpisode." + value + ".EpisodeNumber" , EpisodeNumber); home->SetProperty("LatestEpisode." + value + ".Path" , item->GetVideoInfoTag()->m_strFileNameAndPath); if (!item->HasArt("thumb")) loader.LoadItem(item.get()); std::string seasonThumb; if (item->GetVideoInfoTag()->m_iIdSeason > 0) seasonThumb = videodatabase.GetArtForItem(item->GetVideoInfoTag()->m_iIdSeason, MediaTypeSeason, "thumb"); home->SetProperty("LatestEpisode." + value + ".Thumb" , item->GetArt("thumb")); home->SetProperty("LatestEpisode." + value + ".ShowThumb" , item->GetArt("tvshow.thumb")); home->SetProperty("LatestEpisode." + value + ".SeasonThumb" , seasonThumb); home->SetProperty("LatestEpisode." + value + ".Fanart" , item->GetArt("fanart")); } } for (; i < NUM_ITEMS; ++i) { std::string value = StringUtils::Format("%i", i + 1); home->SetProperty("LatestEpisode." + value + ".ShowTitle" , ""); home->SetProperty("LatestEpisode." + value + ".EpisodeTitle" , ""); home->SetProperty("LatestEpisode." + value + ".Rating" , ""); home->SetProperty("LatestEpisode." + value + ".Plot" , ""); home->SetProperty("LatestEpisode." + value + ".EpisodeNo" , ""); home->SetProperty("LatestEpisode." + value + ".EpisodeSeason" , ""); home->SetProperty("LatestEpisode." + value + ".EpisodeNumber" , ""); home->SetProperty("LatestEpisode." + value + ".Path" , ""); home->SetProperty("LatestEpisode." + value + ".Thumb" , ""); home->SetProperty("LatestEpisode." + value + ".ShowThumb" , ""); home->SetProperty("LatestEpisode." + value + ".SeasonThumb" , ""); home->SetProperty("LatestEpisode." + value + ".Fanart" , ""); } i = 0; CFileItemList MusicVideoItems; path = g_advancedSettings.m_recentlyAddedMusicVideoPath; if (g_advancedSettings.m_iVideoLibraryRecentlyAddedUnseen) { CVideoDbUrl url; url.FromString(path); url.AddOption("filter", "{\"type\":\"musicvideos\", \"rules\":[{\"field\":\"playcount\", \"operator\":\"is\", \"value\":\"0\"}]}"); path = url.ToString(); } if (videodatabase.GetRecentlyAddedMusicVideosNav(path, MusicVideoItems, NUM_ITEMS)) { for (; i < MusicVideoItems.Size(); ++i) { CFileItemPtr item = MusicVideoItems.Get(i); std::string value = StringUtils::Format("%i", i + 1); home->SetProperty("LatestMusicVideo." + value + ".Title" , item->GetLabel()); home->SetProperty("LatestMusicVideo." + value + ".Year" , item->GetVideoInfoTag()->m_iYear); home->SetProperty("LatestMusicVideo." + value + ".Plot" , item->GetVideoInfoTag()->m_strPlot); home->SetProperty("LatestMusicVideo." + value + ".RunningTime" , item->GetVideoInfoTag()->GetDuration() / 60); home->SetProperty("LatestMusicVideo." + value + ".Path" , item->GetVideoInfoTag()->m_strFileNameAndPath); home->SetProperty("LatestMusicVideo." + value + ".Artist" , StringUtils::Join(item->GetVideoInfoTag()->m_artist, g_advancedSettings.m_videoItemSeparator)); if (!item->HasArt("thumb")) loader.LoadItem(item.get()); home->SetProperty("LatestMusicVideo." + value + ".Thumb" , item->GetArt("thumb")); home->SetProperty("LatestMusicVideo." + value + ".Fanart" , item->GetArt("fanart")); } } for (; i < NUM_ITEMS; ++i) { std::string value = StringUtils::Format("%i", i + 1); home->SetProperty("LatestMusicVideo." + value + ".Title" , ""); home->SetProperty("LatestMusicVideo." + value + ".Thumb" , ""); home->SetProperty("LatestMusicVideo." + value + ".Year" , ""); home->SetProperty("LatestMusicVideo." + value + ".Plot" , ""); home->SetProperty("LatestMusicVideo." + value + ".RunningTime" , ""); home->SetProperty("LatestMusicVideo." + value + ".Path" , ""); home->SetProperty("LatestMusicVideo." + value + ".Artist" , ""); home->SetProperty("LatestMusicVideo." + value + ".Fanart" , ""); } videodatabase.Close(); return true; }
bool CRecentlyAddedJob::UpdateVideo() { CGUIWindow* home = g_windowManager.GetWindow(WINDOW_HOME); if ( home == NULL ) return false; CLog::Log(LOGDEBUG, "CRecentlyAddedJob::UpdateVideos() - Running RecentlyAdded home screen update"); int i = 0; CFileItemList items; CVideoDatabase videodatabase; CVideoThumbLoader loader; loader.Initialize(); videodatabase.Open(); if (videodatabase.GetRecentlyAddedMoviesNav("videodb://4/", items, NUM_ITEMS)) { for (; i < items.Size(); ++i) { CFileItemPtr item = items.Get(i); CStdString value; CStdString strRating; value.Format("%i", i + 1); strRating.Format("%.1f", item->GetVideoInfoTag()->m_fRating); home->SetProperty("LatestMovie." + value + ".Title" , item->GetLabel()); home->SetProperty("LatestMovie." + value + ".Rating" , strRating); home->SetProperty("LatestMovie." + value + ".Year" , item->GetVideoInfoTag()->m_iYear); home->SetProperty("LatestMovie." + value + ".Plot" , item->GetVideoInfoTag()->m_strPlot); home->SetProperty("LatestMovie." + value + ".RunningTime" , item->GetVideoInfoTag()->GetDuration() / 60); home->SetProperty("LatestMovie." + value + ".Path" , item->GetVideoInfoTag()->m_strFileNameAndPath); home->SetProperty("LatestMovie." + value + ".Trailer" , item->GetVideoInfoTag()->m_strTrailer); if (!item->HasArt("thumb")) loader.LoadItem(item.get()); home->SetProperty("LatestMovie." + value + ".Thumb" , item->GetArt("thumb")); home->SetProperty("LatestMovie." + value + ".Fanart" , item->GetArt("fanart")); } } for (; i < NUM_ITEMS; ++i) { CStdString value; value.Format("%i", i + 1); home->SetProperty("LatestMovie." + value + ".Title" , ""); home->SetProperty("LatestMovie." + value + ".Thumb" , ""); home->SetProperty("LatestMovie." + value + ".Rating" , ""); home->SetProperty("LatestMovie." + value + ".Year" , ""); home->SetProperty("LatestMovie." + value + ".Plot" , ""); home->SetProperty("LatestMovie." + value + ".RunningTime" , ""); home->SetProperty("LatestMovie." + value + ".Path" , ""); home->SetProperty("LatestMovie." + value + ".Trailer" , ""); home->SetProperty("LatestMovie." + value + ".Fanart" , ""); } i = 0; CFileItemList TVShowItems; if (videodatabase.GetRecentlyAddedEpisodesNav("videodb://5/", TVShowItems, NUM_ITEMS)) { for (; i < TVShowItems.Size(); ++i) { CFileItemPtr item = TVShowItems.Get(i); int EpisodeSeason = item->GetVideoInfoTag()->m_iSeason; int EpisodeNumber = item->GetVideoInfoTag()->m_iEpisode; CStdString EpisodeNo; CStdString value; CStdString strRating; EpisodeNo.Format("s%02de%02d", EpisodeSeason, EpisodeNumber); value.Format("%i", i + 1); strRating.Format("%.1f", item->GetVideoInfoTag()->m_fRating); CFileItem show(item->GetVideoInfoTag()->m_strShowPath, true); home->SetProperty("LatestEpisode." + value + ".ShowTitle" , item->GetVideoInfoTag()->m_strShowTitle); home->SetProperty("LatestEpisode." + value + ".EpisodeTitle" , item->GetVideoInfoTag()->m_strTitle); home->SetProperty("LatestEpisode." + value + ".Rating" , strRating); home->SetProperty("LatestEpisode." + value + ".Plot" , item->GetVideoInfoTag()->m_strPlot); home->SetProperty("LatestEpisode." + value + ".EpisodeNo" , EpisodeNo); home->SetProperty("LatestEpisode." + value + ".EpisodeSeason" , EpisodeSeason); home->SetProperty("LatestEpisode." + value + ".EpisodeNumber" , EpisodeNumber); home->SetProperty("LatestEpisode." + value + ".Path" , item->GetVideoInfoTag()->m_strFileNameAndPath); if (!item->HasArt("thumb")) loader.LoadItem(item.get()); std::string seasonThumb; if (item->GetVideoInfoTag()->m_iIdSeason > 0) seasonThumb = videodatabase.GetArtForItem(item->GetVideoInfoTag()->m_iIdSeason, "season", "thumb"); home->SetProperty("LatestEpisode." + value + ".Thumb" , item->GetArt("thumb")); home->SetProperty("LatestEpisode." + value + ".ShowThumb" , item->GetArt("tvshow.thumb")); home->SetProperty("LatestEpisode." + value + ".SeasonThumb" , seasonThumb); home->SetProperty("LatestEpisode." + value + ".Fanart" , item->GetArt("fanart")); } } for (; i < NUM_ITEMS; ++i) { CStdString value; value.Format("%i", i + 1); home->SetProperty("LatestEpisode." + value + ".ShowTitle" , ""); home->SetProperty("LatestEpisode." + value + ".EpisodeTitle" , ""); home->SetProperty("LatestEpisode." + value + ".Rating" , ""); home->SetProperty("LatestEpisode." + value + ".Plot" , ""); home->SetProperty("LatestEpisode." + value + ".EpisodeNo" , ""); home->SetProperty("LatestEpisode." + value + ".EpisodeSeason" , ""); home->SetProperty("LatestEpisode." + value + ".EpisodeNumber" , ""); home->SetProperty("LatestEpisode." + value + ".Path" , ""); home->SetProperty("LatestEpisode." + value + ".Thumb" , ""); home->SetProperty("LatestEpisode." + value + ".ShowThumb" , ""); home->SetProperty("LatestEpisode." + value + ".SeasonThumb" , ""); home->SetProperty("LatestEpisode." + value + ".Fanart" , ""); } i = 0; CFileItemList MusicVideoItems; if (videodatabase.GetRecentlyAddedMusicVideosNav("videodb://6/", MusicVideoItems, NUM_ITEMS)) { for (; i < MusicVideoItems.Size(); ++i) { CFileItemPtr item = MusicVideoItems.Get(i); CStdString value; value.Format("%i", i + 1); home->SetProperty("LatestMusicVideo." + value + ".Title" , item->GetLabel()); home->SetProperty("LatestMusicVideo." + value + ".Year" , item->GetVideoInfoTag()->m_iYear); home->SetProperty("LatestMusicVideo." + value + ".Plot" , item->GetVideoInfoTag()->m_strPlot); home->SetProperty("LatestMusicVideo." + value + ".RunningTime" , item->GetVideoInfoTag()->GetDuration() / 60); home->SetProperty("LatestMusicVideo." + value + ".Path" , item->GetVideoInfoTag()->m_strFileNameAndPath); home->SetProperty("LatestMusicVideo." + value + ".Artist" , StringUtils::Join(item->GetVideoInfoTag()->m_artist, g_advancedSettings.m_videoItemSeparator)); if (!item->HasArt("thumb")) loader.LoadItem(item.get()); home->SetProperty("LatestMusicVideo." + value + ".Thumb" , item->GetArt("thumb")); home->SetProperty("LatestMusicVideo." + value + ".Fanart" , item->GetArt("fanart")); } } for (; i < NUM_ITEMS; ++i) { CStdString value; value.Format("%i", i + 1); home->SetProperty("LatestMusicVideo." + value + ".Title" , ""); home->SetProperty("LatestMusicVideo." + value + ".Thumb" , ""); home->SetProperty("LatestMusicVideo." + value + ".Year" , ""); home->SetProperty("LatestMusicVideo." + value + ".Plot" , ""); home->SetProperty("LatestMusicVideo." + value + ".RunningTime" , ""); home->SetProperty("LatestMusicVideo." + value + ".Path" , ""); home->SetProperty("LatestMusicVideo." + value + ".Artist" , ""); home->SetProperty("LatestMusicVideo." + value + ".Fanart" , ""); } videodatabase.Close(); return true; }
void CGUIDialogVideoInfo::SetMovie(const CFileItem *item) { *m_movieItem = *item; // setup cast list + determine type. We need to do this here as it makes // sure that content type (among other things) is set correctly for the // old fixed id labels that we have floating around (they may be using // content type to determine visibility, so we'll set the wrong label) ClearCastList(); VIDEODB_CONTENT_TYPE type = (VIDEODB_CONTENT_TYPE)m_movieItem->GetVideoContentType(); if (type == VIDEODB_CONTENT_MUSICVIDEOS) { // music video CMusicDatabase database; database.Open(); const std::vector<std::string> &artists = m_movieItem->GetVideoInfoTag()->m_artist; for (std::vector<std::string>::const_iterator it = artists.begin(); it != artists.end(); ++it) { int idArtist = database.GetArtistByName(*it); CStdString thumb = database.GetArtForItem(idArtist, "artist", "thumb"); CFileItemPtr item(new CFileItem(*it)); if (!thumb.empty()) item->SetArt("thumb", thumb); item->SetIconImage("DefaultArtist.png"); m_castList->Add(item); } m_castList->SetContent("musicvideos"); } else { // movie/show/episode for (CVideoInfoTag::iCast it = m_movieItem->GetVideoInfoTag()->m_cast.begin(); it != m_movieItem->GetVideoInfoTag()->m_cast.end(); ++it) { CStdString character; if (it->strRole.IsEmpty()) character = it->strName; else character.Format("%s %s %s", it->strName.c_str(), g_localizeStrings.Get(20347).c_str(), it->strRole.c_str()); CFileItemPtr item(new CFileItem(it->strName)); if (!it->thumb.IsEmpty()) item->SetArt("thumb", it->thumb); else if (g_guiSettings.GetBool("videolibrary.actorthumbs")) { // backward compatibility CStdString thumb = CScraperUrl::GetThumbURL(it->thumbUrl.GetFirstThumb()); if (!thumb.IsEmpty()) { item->SetArt("thumb", thumb); CTextureCache::Get().BackgroundCacheImage(thumb); } } item->SetIconImage("DefaultActor.png"); item->SetLabel(character); m_castList->Add(item); } // determine type: if (type == VIDEODB_CONTENT_TVSHOWS) { m_castList->SetContent("tvshows"); // special case stuff for shows (not currently retrieved from the library in filemode (ref: GetTvShowInfo vs GetTVShowsByWhere) m_movieItem->m_dateTime = m_movieItem->GetVideoInfoTag()->m_premiered; if(m_movieItem->GetVideoInfoTag()->m_iYear == 0 && m_movieItem->m_dateTime.IsValid()) m_movieItem->GetVideoInfoTag()->m_iYear = m_movieItem->m_dateTime.GetYear(); m_movieItem->SetProperty("totalepisodes", m_movieItem->GetVideoInfoTag()->m_iEpisode); m_movieItem->SetProperty("numepisodes", m_movieItem->GetVideoInfoTag()->m_iEpisode); // info view has no concept of current watched/unwatched filter as we could come here from files view, but set for consistency m_movieItem->SetProperty("watchedepisodes", m_movieItem->GetVideoInfoTag()->m_playCount); m_movieItem->SetProperty("unwatchedepisodes", m_movieItem->GetVideoInfoTag()->m_iEpisode - m_movieItem->GetVideoInfoTag()->m_playCount); m_movieItem->GetVideoInfoTag()->m_playCount = (m_movieItem->GetVideoInfoTag()->m_iEpisode == m_movieItem->GetVideoInfoTag()->m_playCount) ? 1 : 0; } else if (type == VIDEODB_CONTENT_EPISODES) { m_castList->SetContent("episodes"); // special case stuff for episodes (not currently retrieved from the library in filemode (ref: GetEpisodeInfo vs GetEpisodesByWhere) m_movieItem->m_dateTime = m_movieItem->GetVideoInfoTag()->m_firstAired; if(m_movieItem->GetVideoInfoTag()->m_iYear == 0 && m_movieItem->m_dateTime.IsValid()) m_movieItem->GetVideoInfoTag()->m_iYear = m_movieItem->m_dateTime.GetYear(); // retrieve the season thumb. // TODO: should we use the thumbloader for this? CVideoDatabase db; if (db.Open()) { if (m_movieItem->GetVideoInfoTag()->m_iSeason > -1) { int seasonID = m_movieItem->GetVideoInfoTag()->m_iIdSeason; if (seasonID < 0) seasonID = db.GetSeasonId(m_movieItem->GetVideoInfoTag()->m_iIdShow, m_movieItem->GetVideoInfoTag()->m_iSeason); CGUIListItem::ArtMap thumbs; if (db.GetArtForItem(seasonID, "season", thumbs)) { for (CGUIListItem::ArtMap::iterator i = thumbs.begin(); i != thumbs.end(); i++) m_movieItem->SetArt("season." + i->first, i->second); } } db.Close(); } } else if (type == VIDEODB_CONTENT_MOVIES) { m_castList->SetContent("movies"); // local trailers should always override non-local, so check // for a local one if the registered trailer is online if (m_movieItem->GetVideoInfoTag()->m_strTrailer.IsEmpty() || URIUtils::IsInternetStream(m_movieItem->GetVideoInfoTag()->m_strTrailer)) { CStdString localTrailer = m_movieItem->FindTrailer(); if (!localTrailer.IsEmpty()) { m_movieItem->GetVideoInfoTag()->m_strTrailer = localTrailer; CVideoDatabase database; if(database.Open()) { database.SetDetail(m_movieItem->GetVideoInfoTag()->m_strTrailer, m_movieItem->GetVideoInfoTag()->m_iDbId, VIDEODB_ID_TRAILER, VIDEODB_CONTENT_MOVIES); database.Close(); CUtil::DeleteVideoDatabaseDirectoryCache(); } } } } } CVideoThumbLoader loader; loader.LoadItem(m_movieItem.get()); }
bool CHomeShelfJob::UpdateVideo() { CGUIWindow* home = g_windowManager.GetWindow(WINDOW_HOME); if ( home == NULL ) return false; CLog::Log(LOGDEBUG, "CHomeShelfJob::UpdateVideos() - Running HomeShelf screen update"); CVideoDatabase videodatabase; videodatabase.Open(); CFileItemList homeShelfTV; CFileItemList homeShelfMovies; if (CSettings::GetInstance().GetBool(CSettings::SETTING_VIDEOLIBRARY_SHOWINPROGRESS)) { if (videodatabase.HasContent()) { CVideoThumbLoader loader; XFILE::CDirectory::GetDirectory("library://video/inprogressmovies.xml/", homeShelfMovies); XFILE::CDirectory::GetDirectory("library://video/inprogressepisodes.xml/", homeShelfTV); homeShelfMovies.Sort(SortByLastPlayed, SortOrderDescending); homeShelfTV.Sort(SortByLastPlayed, SortOrderDescending); for (int i = 0; i < homeShelfMovies.Size() && i < NUM_ITEMS; i++) { CFileItemPtr item = homeShelfMovies.Get(i); item->SetProperty("ItemType", g_localizeStrings.Get(20386)); if (!item->HasArt("thumb")) { loader.LoadItem(item.get()); } m_HomeShelfMovies->Add(item); } for (int i = 0; i < homeShelfTV.Size() && i < NUM_ITEMS; i++) { CFileItemPtr item = homeShelfTV.Get(i); std::string seasonEpisode = StringUtils::Format("S%02iE%02i", item->GetVideoInfoTag()->m_iSeason, item->GetVideoInfoTag()->m_iEpisode); item->SetProperty("SeasonEpisode", seasonEpisode); item->SetProperty("ItemType", g_localizeStrings.Get(20387)); if (!item->HasArt("thumb")) { loader.LoadItem(item.get()); } if (!item->HasArt("tvshow.thumb")) { item->SetArt("tvshow.thumb", item->GetArt("season.poster")); } m_HomeShelfTV->Add(item); } } // get InProgress TVSHOWS and MOVIES from any enabled service CServicesManager::GetInstance().GetAllInProgressShows(*m_HomeShelfTV, NUM_ITEMS); CServicesManager::GetInstance().GetAllInProgressMovies(*m_HomeShelfMovies, NUM_ITEMS); } else { if (videodatabase.HasContent()) { std::string path; CVideoThumbLoader loader; loader.OnLoaderStart(); path = g_advancedSettings.m_recentlyAddedMoviePath; if (g_advancedSettings.m_iVideoLibraryRecentlyAddedUnseen) { CVideoDbUrl url; url.FromString(path); url.AddOption("filter", "{\"type\":\"movies\", \"rules\":[{\"field\":\"playcount\", \"operator\":\"is\", \"value\":\"0\"}]}"); path = url.ToString(); } videodatabase.GetRecentlyAddedMoviesNav(path, homeShelfMovies, NUM_ITEMS); for (int i = 0; i < homeShelfMovies.Size(); i++) { CFileItemPtr item = homeShelfMovies.Get(i); item->SetProperty("ItemType", g_localizeStrings.Get(20386)); if (!item->HasArt("thumb")) { loader.LoadItem(item.get()); } m_HomeShelfMovies->Add(item); } path = g_advancedSettings.m_recentlyAddedEpisodePath; if (g_advancedSettings.m_iVideoLibraryRecentlyAddedUnseen) { CVideoDbUrl url; url.FromString(path); url.AddOption("filter", "{\"type\":\"episodes\", \"rules\":[{\"field\":\"playcount\", \"operator\":\"is\", \"value\":\"0\"}]}"); path = url.ToString(); } videodatabase.GetRecentlyAddedEpisodesNav(path, homeShelfTV, NUM_ITEMS); std::string seasonThumb; for (int i = 0; i < homeShelfTV.Size(); i++) { CFileItemPtr item = homeShelfTV.Get(i); std::string seasonEpisode = StringUtils::Format("S%02iE%02i", item->GetVideoInfoTag()->m_iSeason, item->GetVideoInfoTag()->m_iEpisode); item->SetProperty("SeasonEpisode", seasonEpisode); item->SetProperty("ItemType", g_localizeStrings.Get(20387)); if (!item->HasArt("thumb")) { loader.LoadItem(item.get()); } if (!item->HasArt("tvshow.thumb")) { item->SetArt("tvshow.thumb", item->GetArt("season.poster")); } m_HomeShelfTV->Add(item); } } // get recently added TVSHOWS and MOVIES from any enabled service CServicesManager::GetInstance().GetAllRecentlyAddedShows(*m_HomeShelfTV, NUM_ITEMS); CServicesManager::GetInstance().GetAllRecentlyAddedMovies(*m_HomeShelfMovies, NUM_ITEMS); } videodatabase.Close(); m_HomeShelfTV->SetContent("episodes"); m_HomeShelfMovies->SetContent("movies"); #if defined(TARGET_DARWIN_TVOS) // send recently added Movies and TvShows to TopShelf CTVOSTopShelf::GetInstance().SetTopShelfItems(*m_HomeShelfMovies,*m_HomeShelfTV); #endif return true; }
void CFileItemHandler::FillDetails(ISerializable* info, CFileItemPtr item, const CVariant& fields, CVariant &result) { if (info == NULL || fields.size() == 0) return; CVariant serialization; info->Serialize(serialization); bool fetchedArt = false; for (unsigned int i = 0; i < fields.size(); i++) { CStdString field = fields[i].asString(); if (item) { if (item->IsAlbum() && field.Equals("albumlabel")) field = "label"; if (item->IsAlbum()) { if (field == "label") { result["albumlabel"] = item->GetProperty("album_label"); continue; } if (item->HasProperty("album_" + field + "_array")) { result[field] = item->GetProperty("album_" + field + "_array"); continue; } if (item->HasProperty("album_" + field)) { result[field] = item->GetProperty("album_" + field); continue; } } if (item->HasProperty("artist_" + field + "_array")) { result[field] = item->GetProperty("artist_" + field + "_array"); continue; } if (item->HasProperty("artist_" + field)) { result[field] = item->GetProperty("artist_" + field); continue; } if (field == "thumbnail") { if (item->HasVideoInfoTag()) { if (!item->HasThumbnail() && !fetchedArt && item->GetVideoInfoTag()->m_iDbId > -1) { CVideoThumbLoader loader; loader.FillLibraryArt(item.get()); fetchedArt = true; } } else if (item->HasPictureInfoTag()) { if (!item->HasThumbnail()) item->SetThumbnailImage(CTextureCache::GetWrappedThumbURL(item->GetPath())); } else if (item->HasMusicInfoTag()) { if (!item->HasThumbnail() && !fetchedArt && item->GetMusicInfoTag()->GetDatabaseId() > -1) { CMusicThumbLoader loader; loader.FillLibraryArt(*item); fetchedArt = true; } } if (item->HasThumbnail()) result["thumbnail"] = CTextureCache::GetWrappedImageURL(item->GetThumbnailImage()); if (!result.isMember("thumbnail")) result["thumbnail"] = ""; continue; } if (field == "fanart") { if (item->HasVideoInfoTag()) { if (!item->HasProperty("fanart_image") && !fetchedArt && item->GetVideoInfoTag()->m_iDbId > -1) { CVideoThumbLoader loader; loader.FillLibraryArt(item.get()); fetchedArt = true; } if (item->HasProperty("fanart_image")) result["fanart"] = CTextureCache::GetWrappedImageURL(item->GetProperty("fanart_image").asString()); } else if (item->HasMusicInfoTag()) { if (!item->HasProperty("fanart_image") && !fetchedArt && item->GetMusicInfoTag()->GetDatabaseId() > -1) { CMusicThumbLoader loader; loader.FillLibraryArt(*item); fetchedArt = true; } if (item->HasProperty("fanart_image")) result["fanart"] = CTextureCache::GetWrappedImageURL(item->GetProperty("fanart_image").asString()); } if (!result.isMember("fanart")) result["fanart"] = ""; continue; } if (item->HasVideoInfoTag() && item->GetVideoContentType() == VIDEODB_CONTENT_TVSHOWS) { if (item->GetVideoInfoTag()->m_iSeason < 0 && field == "season") { result[field] = (int)item->GetProperty("totalseasons").asInteger(); continue; } if (field == "watchedepisodes") { result[field] = (int)item->GetProperty("watchedepisodes").asInteger(); continue; } } if (field == "lastmodified" && item->m_dateTime.IsValid()) { result[field] = item->m_dateTime.GetAsLocalizedDateTime(); continue; } } if (serialization.isMember(field) && (!result.isMember(field) || result[field].empty())) result[field] = serialization[field]; } }
void CGUIWindowVideoInfo::SetMovie(const CFileItem *item) { CVideoThumbLoader loader; *m_movieItem = *item; // setup cast list + determine type. We need to do this here as it makes // sure that content type (among other things) is set correctly for the // old fixed id labels that we have floating around (they may be using // content type to determine visibility, so we'll set the wrong label) ClearCastList(); VIDEODB_CONTENT_TYPE type = GetContentType(m_movieItem.get()); if (type == VIDEODB_CONTENT_MUSICVIDEOS) { // music video CStdStringArray artists; StringUtils::SplitString(m_movieItem->GetVideoInfoTag()->m_strArtist, g_advancedSettings.m_videoItemSeparator, artists); for (std::vector<CStdString>::const_iterator it = artists.begin(); it != artists.end(); ++it) { CFileItemPtr item(new CFileItem(*it)); if (CFile::Exists(item->GetCachedArtistThumb())) item->SetThumbnailImage(item->GetCachedArtistThumb()); item->SetIconImage("DefaultArtist.png"); m_castList->Add(item); } m_castList->SetContent("musicvideos"); } else { // movie/show/episode for (CVideoInfoTag::iCast it = m_movieItem->GetVideoInfoTag()->m_cast.begin(); it != m_movieItem->GetVideoInfoTag()->m_cast.end(); ++it) { CStdString character; if (it->strRole.IsEmpty()) character = it->strName; else character.Format("%s %s %s", it->strName.c_str(), g_localizeStrings.Get(20347).c_str(), it->strRole.c_str()); CFileItemPtr item(new CFileItem(it->strName)); if (CFile::Exists(item->GetCachedActorThumb())) item->SetThumbnailImage(item->GetCachedActorThumb()); item->SetIconImage("DefaultActor.png"); item->SetLabel(character); m_castList->Add(item); } // set fanart property for tvshows and movies if (type == VIDEODB_CONTENT_TVSHOWS || type == VIDEODB_CONTENT_MOVIES) { m_movieItem->CacheFanart(); if (CFile::Exists(m_movieItem->GetCachedFanart())) m_movieItem->SetProperty("fanart_image",m_movieItem->GetCachedFanart()); } // determine type: if (type == VIDEODB_CONTENT_TVSHOWS) { m_castList->SetContent("tvshows"); // special case stuff for shows (not currently retrieved from the library in filemode (ref: GetTvShowInfo vs GetTVShowsByWhere) m_movieItem->m_dateTime.SetFromDateString(m_movieItem->GetVideoInfoTag()->m_strPremiered); m_movieItem->GetVideoInfoTag()->m_iYear = m_movieItem->m_dateTime.GetYear(); m_movieItem->SetProperty("watchedepisodes", m_movieItem->GetVideoInfoTag()->m_playCount); m_movieItem->SetProperty("unwatchedepisodes", m_movieItem->GetVideoInfoTag()->m_iEpisode - m_movieItem->GetVideoInfoTag()->m_playCount); m_movieItem->GetVideoInfoTag()->m_playCount = (m_movieItem->GetVideoInfoTag()->m_iEpisode == m_movieItem->GetVideoInfoTag()->m_playCount) ? 1 : 0; } else if (type == VIDEODB_CONTENT_EPISODES) { m_castList->SetContent("episodes"); // special case stuff for episodes (not currently retrieved from the library in filemode (ref: GetEpisodeInfo vs GetEpisodesByWhere) m_movieItem->m_dateTime.SetFromDateString(m_movieItem->GetVideoInfoTag()->m_strFirstAired); m_movieItem->GetVideoInfoTag()->m_iYear = m_movieItem->m_dateTime.GetYear(); if (CFile::Exists(m_movieItem->GetCachedEpisodeThumb())) m_movieItem->SetThumbnailImage(m_movieItem->GetCachedEpisodeThumb()); // retrieve the season thumb. // NOTE: This is overly complicated. Perhaps we should cache season thumbs by showtitle and season number, // rather than bothering with show path and the localized strings involved? if (m_movieItem->GetVideoInfoTag()->m_iSeason > -1) { CStdString label; if (m_movieItem->GetVideoInfoTag()->m_iSeason == 0) label = g_localizeStrings.Get(20381); else label.Format(g_localizeStrings.Get(20358), m_movieItem->GetVideoInfoTag()->m_iSeason); CFileItem season(label); season.m_bIsFolder = true; // grab show path CVideoDatabase db; if (db.Open()) { CFileItemList items; CStdString where = db.FormatSQL("where c%02d='%s'", VIDEODB_ID_TV_TITLE, m_movieItem->GetVideoInfoTag()->m_strShowTitle.c_str()); if (db.GetTvShowsByWhere("", where, items) && items.Size()) season.GetVideoInfoTag()->m_strPath = items[0]->GetVideoInfoTag()->m_strPath; db.Close(); } season.SetCachedSeasonThumb(); if (season.HasThumbnail()) m_movieItem->SetProperty("seasonthumb", season.GetThumbnailImage()); } } else if (type == VIDEODB_CONTENT_MOVIES) m_castList->SetContent("movies"); } loader.LoadItem(m_movieItem.get()); }