Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Fetching contributors…

Cannot retrieve contributors at this time

383 lines (327 sloc) 16.394 kB
/*
* Copyright (C) 2005-2011 Team XBMC
* http://www.xbmc.org
*
* This Program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2, or (at your option)
* any later version.
*
* This Program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with XBMC; see the file COPYING. If not, write to
* the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
* http://www.gnu.org/copyleft/gpl.html
*
*/
#include "utils/log.h"
#include "video/VideoDatabase.h"
#include "video/VideoInfoTag.h"
#include "FileItem.h"
#include "RecentlyAddedJob.h"
#include "guilib/GUIWindow.h"
#include "guilib/GUIWindowManager.h"
#include "guilib/Key.h"
#include "music/MusicDatabase.h"
#include "music/tags/MusicInfoTag.h"
#include "settings/Settings.h"
#include "utils/Variant.h"
#include "utils/StringUtils.h"
#include "settings/AdvancedSettings.h"
#define NUM_ITEMS 10
CRecentlyAddedJob::CRecentlyAddedJob(int flag)
{
m_flag = flag;
}
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;
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()->m_strRuntime);
home->SetProperty("LatestMovie." + value + ".Path" , item->GetVideoInfoTag()->m_strFileNameAndPath);
home->SetProperty("LatestMovie." + value + ".Trailer" , item->GetVideoInfoTag()->m_strTrailer);
if (!item->HasThumbnail())
m_thumbLoader.LoadItem(item.get());
home->SetProperty("LatestMovie." + value + ".Thumb" , item->GetThumbnailImage());
home->SetProperty("LatestMovie." + value + ".Fanart" , item->GetProperty("fanart_image"));
}
}
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))
{
std::map<int, std::string> showThumbs;
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->HasThumbnail())
m_thumbLoader.LoadItem(item.get());
std::string showThumb;
if (item->GetVideoInfoTag()->m_iIdShow > 0)
{
std::map<int, std::string>::const_iterator thumbIter;
if ((thumbIter = showThumbs.find(item->GetVideoInfoTag()->m_iIdShow)) != showThumbs.end())
showThumb = thumbIter->second;
else
{
showThumb = videodatabase.GetArtForItem(item->GetVideoInfoTag()->m_iIdShow, "tvshow", "thumb");
showThumbs[item->GetVideoInfoTag()->m_iIdShow] = showThumb;
}
}
std::string seasonThumb;
if (item->GetVideoInfoTag()->m_iIdSeason > 0)
seasonThumb = videodatabase.GetArtForItem(item->GetVideoInfoTag()->m_iIdSeason, "season", "thumb");
home->SetProperty("LatestEpisode." + value + ".Thumb" , item->GetThumbnailImage());
home->SetProperty("LatestEpisode." + value + ".ShowThumb" , showThumb);
home->SetProperty("LatestEpisode." + value + ".SeasonThumb" , seasonThumb);
home->SetProperty("LatestEpisode." + value + ".Fanart" , item->GetProperty("fanart_image"));
}
}
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()->m_strRuntime);
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->HasThumbnail())
m_thumbLoader.LoadItem(item.get());
home->SetProperty("LatestMusicVideo." + value + ".Thumb" , item->GetThumbnailImage());
home->SetProperty("LatestMusicVideo." + value + ".Fanart" , item->GetProperty("fanart_image"));
}
}
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;
}
bool CRecentlyAddedJob::UpdateMusic()
{
CGUIWindow* home = g_windowManager.GetWindow(WINDOW_HOME);
if ( home == NULL )
return false;
CLog::Log(LOGDEBUG, "CRecentlyAddedJob::UpdateMusic() - Running RecentlyAdded home screen update");
int i = 0;
CFileItemList musicItems;
CMusicDatabase musicdatabase;
CMusicThumbLoader loader;
musicdatabase.Open();
if (musicdatabase.GetRecentlyAddedAlbumSongs("musicdb://", musicItems, NUM_ITEMS))
{
for (; i < musicItems.Size(); ++i)
{
CFileItemPtr item = musicItems.Get(i);
CStdString value;
value.Format("%i", i + 1);
CStdString strRating;
CStdString strAlbum = item->GetMusicInfoTag()->GetAlbum();
CStdString strArtist = StringUtils::Join(item->GetMusicInfoTag()->GetArtist(), g_advancedSettings.m_musicItemSeparator);
loader.LoadItem(item.get());
strRating.Format("%c", item->GetMusicInfoTag()->GetRating());
home->SetProperty("LatestSong." + value + ".Title" , item->GetMusicInfoTag()->GetTitle());
home->SetProperty("LatestSong." + value + ".Year" , item->GetMusicInfoTag()->GetYear());
home->SetProperty("LatestSong." + value + ".Artist" , strArtist);
home->SetProperty("LatestSong." + value + ".Album" , strAlbum);
home->SetProperty("LatestSong." + value + ".Rating" , strRating);
home->SetProperty("LatestSong." + value + ".Path" , item->GetMusicInfoTag()->GetURL());
home->SetProperty("LatestSong." + value + ".Thumb" , item->GetThumbnailImage());
home->SetProperty("LatestSong." + value + ".Fanart" , item->GetProperty("fanart_image"));
}
}
for (; i < NUM_ITEMS; ++i)
{
CStdString value;
value.Format("%i", i + 1);
home->SetProperty("LatestSong." + value + ".Title" , "");
home->SetProperty("LatestSong." + value + ".Year" , "");
home->SetProperty("LatestSong." + value + ".Artist" , "");
home->SetProperty("LatestSong." + value + ".Album" , "");
home->SetProperty("LatestSong." + value + ".Rating" , "");
home->SetProperty("LatestSong." + value + ".Path" , "");
home->SetProperty("LatestSong." + value + ".Thumb" , "");
home->SetProperty("LatestSong." + value + ".Fanart" , "");
}
i = 0;
VECALBUMS albums;
if (musicdatabase.GetRecentlyAddedAlbums(albums, NUM_ITEMS))
{
for (; i < (int)albums.size(); ++i)
{
CStdString value;
CStdString strPath;
CStdString strThumb;
CStdString strFanart;
CStdString strDBpath;
CStdString strSQLAlbum;
CAlbum& album=albums[i];
value.Format("%i", i + 1);
strThumb = musicdatabase.GetArtForItem(album.idAlbum, "album", "thumb");
strFanart = musicdatabase.GetArtistArtForItem(album.idAlbum, "album", "fanart");
strDBpath.Format("musicdb://3/%i/", album.idAlbum);
strSQLAlbum.Format("idAlbum=%i", album.idAlbum);
CStdString strArtist = musicdatabase.GetSingleValue("albumview", "strArtists", strSQLAlbum);
home->SetProperty("LatestAlbum." + value + ".Title" , album.strAlbum);
home->SetProperty("LatestAlbum." + value + ".Year" , album.iYear);
home->SetProperty("LatestAlbum." + value + ".Artist" , strArtist);
home->SetProperty("LatestAlbum." + value + ".Rating" , album.iRating);
home->SetProperty("LatestAlbum." + value + ".Path" , strDBpath);
home->SetProperty("LatestAlbum." + value + ".Thumb" , strThumb);
home->SetProperty("LatestAlbum." + value + ".Fanart" , strFanart);
}
}
for (; i < NUM_ITEMS; ++i)
{
CStdString value;
value.Format("%i", i + 1);
home->SetProperty("LatestAlbum." + value + ".Title" , "");
home->SetProperty("LatestAlbum." + value + ".Year" , "");
home->SetProperty("LatestAlbum." + value + ".Artist" , "");
home->SetProperty("LatestAlbum." + value + ".Rating" , "");
home->SetProperty("LatestAlbum." + value + ".Path" , "");
home->SetProperty("LatestAlbum." + value + ".Thumb" , "");
home->SetProperty("LatestAlbum." + value + ".Fanart" , "");
}
musicdatabase.Close();
return true;
}
bool CRecentlyAddedJob::UpdateTotal()
{
CGUIWindow* home = g_windowManager.GetWindow(WINDOW_HOME);
if ( home == NULL )
return false;
CLog::Log(LOGDEBUG, "CRecentlyAddedJob::UpdateTotal() - Running RecentlyAdded home screen update");
CVideoDatabase videodatabase;
CMusicDatabase musicdatabase;
musicdatabase.Open();
int MusSongTotals = atoi(musicdatabase.GetSingleValue("songview" , "count(1)"));
int MusAlbumTotals = atoi(musicdatabase.GetSingleValue("songview" , "count(distinct strAlbum)"));
int MusArtistTotals = atoi(musicdatabase.GetSingleValue("songview" , "count(distinct strArtists)"));
musicdatabase.Close();
videodatabase.Open();
int tvShowCount = atoi(videodatabase.GetSingleValue("tvshowview" , "count(1)"));
int movieTotals = atoi(videodatabase.GetSingleValue("movieview" , "count(1)"));
int movieWatched = atoi(videodatabase.GetSingleValue("movieview" , "count(playCount)"));
int MusVidTotals = atoi(videodatabase.GetSingleValue("musicvideoview" , "count(1)"));
int MusVidWatched = atoi(videodatabase.GetSingleValue("musicvideoview" , "count(playCount)"));
int EpWatched = atoi(videodatabase.GetSingleValue("tvshowview" , "sum(watchedcount)"));
int EpCount = atoi(videodatabase.GetSingleValue("tvshowview" , "sum(totalcount)"));
int TvShowsWatched = atoi(videodatabase.GetSingleValue("tvshowview" , "sum(watchedcount = totalcount)"));
videodatabase.Close();
home->SetProperty("TVShows.Count" , tvShowCount);
home->SetProperty("TVShows.Watched" , TvShowsWatched);
home->SetProperty("TVShows.UnWatched" , tvShowCount - TvShowsWatched);
home->SetProperty("Episodes.Count" , EpCount);
home->SetProperty("Episodes.Watched" , EpWatched);
home->SetProperty("Episodes.UnWatched" , EpCount-EpWatched);
home->SetProperty("Movies.Count" , movieTotals);
home->SetProperty("Movies.Watched" , movieWatched);
home->SetProperty("Movies.UnWatched" , movieTotals - movieWatched);
home->SetProperty("MusicVideos.Count" , MusVidTotals);
home->SetProperty("MusicVideos.Watched" , MusVidWatched);
home->SetProperty("MusicVideos.UnWatched" , MusVidTotals - MusVidWatched);
home->SetProperty("Music.SongsCount" , MusSongTotals);
home->SetProperty("Music.AlbumsCount" , MusAlbumTotals);
home->SetProperty("Music.ArtistsCount" , MusArtistTotals);
return true;
}
bool CRecentlyAddedJob::DoWork()
{
bool ret = true;
if (m_flag & Audio)
ret &= UpdateMusic();
if (m_flag & Video)
ret &= UpdateVideo();
if (m_flag & Totals)
ret &= UpdateTotal();
return ret;
}
Jump to Line
Something went wrong with that request. Please try again.