本文整理汇总了C++中CVideoDbUrl::AddOption方法的典型用法代码示例。如果您正苦于以下问题:C++ CVideoDbUrl::AddOption方法的具体用法?C++ CVideoDbUrl::AddOption怎么用?C++ CVideoDbUrl::AddOption使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类CVideoDbUrl
的用法示例。
在下文中一共展示了CVideoDbUrl::AddOption方法的11个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: GetEpisodes
JSONRPC_STATUS CVideoLibrary::GetEpisodes(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant ¶meterObject, CVariant &result)
{
CVideoDatabase videodatabase;
if (!videodatabase.Open())
return InternalError;
SortDescription sorting;
ParseLimits(parameterObject, sorting.limitStart, sorting.limitEnd);
if (!ParseSorting(parameterObject, sorting.sortBy, sorting.sortOrder, sorting.sortAttributes))
return InvalidParams;
int tvshowID = (int)parameterObject["tvshowid"].asInteger();
int season = (int)parameterObject["season"].asInteger();
CStdString strPath;
strPath.Format("videodb://2/2/%i/%i/", tvshowID, season);
CVideoDbUrl videoUrl;
videoUrl.FromString(strPath);
int genreID = -1, year = -1;
const CVariant &filter = parameterObject["filter"];
if (filter.isMember("genreid"))
genreID = (int)filter["genreid"].asInteger();
else if (filter.isMember("genre"))
videoUrl.AddOption("genre", filter["genre"].asString());
else if (filter.isMember("year"))
year = (int)filter["year"].asInteger();
else if (filter.isMember("actor"))
videoUrl.AddOption("actor", filter["actor"].asString());
else if (filter.isMember("director"))
videoUrl.AddOption("director", filter["director"].asString());
else if (filter.isObject())
{
CStdString xsp;
if (!GetXspFiltering("episodes", filter, xsp))
return InvalidParams;
videoUrl.AddOption("xsp", xsp);
}
if (tvshowID <= 0 && (genreID > 0 || filter.isMember("actor")))
return InvalidParams;
CFileItemList items;
if (!videodatabase.GetEpisodesNav(videoUrl.ToString(), items, genreID, year, -1, -1, tvshowID, season, sorting))
return InvalidParams;
return GetAdditionalEpisodeDetails(parameterObject, items, result, videodatabase, false);
}
示例2: GetMovies
JSONRPC_STATUS CVideoLibrary::GetMovies(const std::string &method, ITransportLayer *transport, IClient *client, const CVariant ¶meterObject, CVariant &result)
{
CVideoDatabase videodatabase;
if (!videodatabase.Open())
return InternalError;
SortDescription sorting;
ParseLimits(parameterObject, sorting.limitStart, sorting.limitEnd);
if (!ParseSorting(parameterObject, sorting.sortBy, sorting.sortOrder, sorting.sortAttributes))
return InvalidParams;
CVideoDbUrl videoUrl;
if (!videoUrl.FromString("videodb://movies/titles/"))
return InternalError;
int genreID = -1, year = -1, setID = 0;
const CVariant &filter = parameterObject["filter"];
if (filter.isMember("genreid"))
genreID = (int)filter["genreid"].asInteger();
else if (filter.isMember("genre"))
videoUrl.AddOption("genre", filter["genre"].asString());
else if (filter.isMember("year"))
year = (int)filter["year"].asInteger();
else if (filter.isMember("actor"))
videoUrl.AddOption("actor", filter["actor"].asString());
else if (filter.isMember("director"))
videoUrl.AddOption("director", filter["director"].asString());
else if (filter.isMember("studio"))
videoUrl.AddOption("studio", filter["studio"].asString());
else if (filter.isMember("country"))
videoUrl.AddOption("country", filter["country"].asString());
else if (filter.isMember("setid"))
setID = (int)filter["setid"].asInteger();
else if (filter.isMember("set"))
videoUrl.AddOption("set", filter["set"].asString());
else if (filter.isMember("tag"))
videoUrl.AddOption("tag", filter["tag"].asString());
else if (filter.isObject())
{
std::string xsp;
if (!GetXspFiltering("movies", filter, xsp))
return InvalidParams;
videoUrl.AddOption("xsp", xsp);
}
// setID must not be -1 otherwise GetMoviesNav() will return sets
if (setID < 0)
setID = 0;
CFileItemList items;
if (!videodatabase.GetMoviesNav(videoUrl.ToString(), items, genreID, year, -1, -1, -1, -1, setID, -1, sorting, RequiresAdditionalDetails(MediaTypeMovie, parameterObject)))
return InvalidParams;
return HandleItems("movieid", "movies", items, parameterObject, result, false);
}
示例3: GetEpisodes
JSONRPC_STATUS CVideoLibrary::GetEpisodes(const std::string &method, ITransportLayer *transport, IClient *client, const CVariant ¶meterObject, CVariant &result)
{
CVideoDatabase videodatabase;
if (!videodatabase.Open())
return InternalError;
SortDescription sorting;
ParseLimits(parameterObject, sorting.limitStart, sorting.limitEnd);
if (!ParseSorting(parameterObject, sorting.sortBy, sorting.sortOrder, sorting.sortAttributes))
return InvalidParams;
int tvshowID = (int)parameterObject["tvshowid"].asInteger();
int season = (int)parameterObject["season"].asInteger();
std::string strPath = StringUtils::Format("videodb://tvshows/titles/%i/%i/", tvshowID, season);
CVideoDbUrl videoUrl;
if (!videoUrl.FromString(strPath))
return InternalError;
const CVariant &filter = parameterObject["filter"];
if (filter.isMember("genreid"))
videoUrl.AddOption("genreid", (int)filter["genreid"].asInteger());
else if (filter.isMember("genre"))
videoUrl.AddOption("genre", filter["genre"].asString());
else if (filter.isMember("year"))
videoUrl.AddOption("year", (int)filter["year"].asInteger());
else if (filter.isMember("actor"))
videoUrl.AddOption("actor", filter["actor"].asString());
else if (filter.isMember("director"))
videoUrl.AddOption("director", filter["director"].asString());
else if (filter.isObject())
{
std::string xsp;
if (!GetXspFiltering("episodes", filter, xsp))
return InvalidParams;
videoUrl.AddOption("xsp", xsp);
}
if (tvshowID <= 0 && (season > 0 || videoUrl.HasOption("genreid") || videoUrl.HasOption("genre") || videoUrl.HasOption("actor")))
return InvalidParams;
if (tvshowID > 0)
{
videoUrl.AddOption("tvshowid", tvshowID);
if (season >= 0)
videoUrl.AddOption("season", season);
}
CFileItemList items;
if (!videodatabase.GetEpisodesByWhere(videoUrl.ToString(), CDatabase::Filter(), items, false, sorting, RequiresAdditionalDetails(MediaTypeEpisode, parameterObject)))
return InvalidParams;
return HandleItems("episodeid", "episodes", items, parameterObject, result, false);
}
示例4: GetTVShows
JSONRPC_STATUS CVideoLibrary::GetTVShows(const std::string &method, ITransportLayer *transport, IClient *client, const CVariant ¶meterObject, CVariant &result)
{
CVideoDatabase videodatabase;
if (!videodatabase.Open())
return InternalError;
SortDescription sorting;
ParseLimits(parameterObject, sorting.limitStart, sorting.limitEnd);
if (!ParseSorting(parameterObject, sorting.sortBy, sorting.sortOrder, sorting.sortAttributes))
return InvalidParams;
CVideoDbUrl videoUrl;
if (!videoUrl.FromString("videodb://tvshows/titles/"))
return InternalError;
const CVariant &filter = parameterObject["filter"];
if (filter.isMember("genreid"))
videoUrl.AddOption("genreid", (int)filter["genreid"].asInteger());
else if (filter.isMember("genre"))
videoUrl.AddOption("genre", filter["genre"].asString());
else if (filter.isMember("year"))
videoUrl.AddOption("year", (int)filter["year"].asInteger());
else if (filter.isMember("actor"))
videoUrl.AddOption("actor", filter["actor"].asString());
else if (filter.isMember("studio"))
videoUrl.AddOption("studio", filter["studio"].asString());
else if (filter.isMember("tag"))
videoUrl.AddOption("tag", filter["tag"].asString());
else if (filter.isObject())
{
std::string xsp;
if (!GetXspFiltering("tvshows", filter, xsp))
return InvalidParams;
videoUrl.AddOption("xsp", xsp);
}
CFileItemList items;
CDatabase::Filter nofilter;
if (!videodatabase.GetTvShowsByWhere(videoUrl.ToString(), nofilter, items, sorting, RequiresAdditionalDetails(MediaTypeTvShow, parameterObject)))
return InvalidParams;
return HandleItems("tvshowid", "tvshows", items, parameterObject, result, false);
}
示例5: GetMusicVideos
JSONRPC_STATUS CVideoLibrary::GetMusicVideos(const std::string &method, ITransportLayer *transport, IClient *client, const CVariant ¶meterObject, CVariant &result)
{
CVideoDatabase videodatabase;
if (!videodatabase.Open())
return InternalError;
SortDescription sorting;
ParseLimits(parameterObject, sorting.limitStart, sorting.limitEnd);
if (!ParseSorting(parameterObject, sorting.sortBy, sorting.sortOrder, sorting.sortAttributes))
return InvalidParams;
CVideoDbUrl videoUrl;
videoUrl.FromString("videodb://musicvideos/titles/");
int genreID = -1, year = -1;
const CVariant &filter = parameterObject["filter"];
if (filter.isMember("artist"))
videoUrl.AddOption("artist", filter["artist"].asString());
else if (filter.isMember("genreid"))
genreID = (int)filter["genreid"].asInteger();
else if (filter.isMember("genre"))
videoUrl.AddOption("genre", filter["genre"].asString());
else if (filter.isMember("year"))
year = (int)filter["year"].asInteger();
else if (filter.isMember("director"))
videoUrl.AddOption("director", filter["director"].asString());
else if (filter.isMember("studio"))
videoUrl.AddOption("studio", filter["studio"].asString());
else if (filter.isMember("tag"))
videoUrl.AddOption("tag", filter["tag"].asString());
else if (filter.isObject())
{
std::string xsp;
if (!GetXspFiltering("musicvideos", filter, xsp))
return InvalidParams;
videoUrl.AddOption("xsp", xsp);
}
CFileItemList items;
if (!videodatabase.GetMusicVideosNav(videoUrl.ToString(), items, genreID, year, -1, -1, -1, -1, -1, sorting))
return InternalError;
return GetAdditionalMusicVideoDetails(parameterObject, items, result, videodatabase, false);
}
示例6: UpdateVideo
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)
//.........这里部分代码省略.........
示例7: GetTVShows
JSONRPC_STATUS CVideoLibrary::GetTVShows(const std::string &method, ITransportLayer *transport, IClient *client, const CVariant ¶meterObject, CVariant &result)
{
CVideoDatabase videodatabase;
if (!videodatabase.Open())
return InternalError;
SortDescription sorting;
ParseLimits(parameterObject, sorting.limitStart, sorting.limitEnd);
if (!ParseSorting(parameterObject, sorting.sortBy, sorting.sortOrder, sorting.sortAttributes))
return InvalidParams;
CVideoDbUrl videoUrl;
videoUrl.FromString("videodb://tvshows/titles/");
int genreID = -1, year = -1;
const CVariant &filter = parameterObject["filter"];
if (filter.isMember("genreid"))
genreID = (int)filter["genreid"].asInteger();
else if (filter.isMember("genre"))
videoUrl.AddOption("genre", filter["genre"].asString());
else if (filter.isMember("year"))
year = (int)filter["year"].asInteger();
else if (filter.isMember("actor"))
videoUrl.AddOption("actor", filter["actor"].asString());
else if (filter.isMember("studio"))
videoUrl.AddOption("studio", filter["studio"].asString());
else if (filter.isMember("tag"))
videoUrl.AddOption("tag", filter["tag"].asString());
else if (filter.isObject())
{
std::string xsp;
if (!GetXspFiltering("tvshows", filter, xsp))
return InvalidParams;
videoUrl.AddOption("xsp", xsp);
}
CFileItemList items;
if (!videodatabase.GetTvShowsNav(videoUrl.ToString(), items, genreID, year, -1, -1, -1, -1, sorting))
return InvalidParams;
bool additionalInfo = false;
for (CVariant::const_iterator_array itr = parameterObject["properties"].begin_array(); itr != parameterObject["properties"].end_array(); itr++)
{
std::string fieldValue = itr->asString();
if (fieldValue == "cast" || fieldValue == "tag")
additionalInfo = true;
}
if (additionalInfo)
{
for (int index = 0; index < items.Size(); index++)
videodatabase.GetTvShowInfo("", *(items[index]->GetVideoInfoTag()), items[index]->GetVideoInfoTag()->m_iDbId);
}
int size = items.Size();
if (items.HasProperty("total") && items.GetProperty("total").asInteger() > size)
size = (int)items.GetProperty("total").asInteger();
HandleFileItemList("tvshowid", true, "tvshows", items, parameterObject, result, size, false);
return OK;
}
示例8: GetDirectory
bool CSmartPlaylistDirectory::GetDirectory(const CSmartPlaylist &playlist, CFileItemList& items, const std::string &strBaseDir /* = "" */, bool filter /* = false */)
{
bool success = false, success2 = false;
std::vector<std::string> virtualFolders;
SortDescription sorting;
sorting.limitEnd = playlist.GetLimit();
sorting.sortBy = playlist.GetOrder();
sorting.sortOrder = playlist.GetOrderAscending() ? SortOrderAscending : SortOrderDescending;
sorting.sortAttributes = playlist.GetOrderAttributes();
if (CSettings::Get().GetBool("filelists.ignorethewhensorting"))
sorting.sortAttributes = (SortAttribute)(sorting.sortAttributes | SortAttributeIgnoreArticle);
items.SetSortIgnoreFolders((sorting.sortAttributes & SortAttributeIgnoreFolders) == SortAttributeIgnoreFolders);
std::string option = !filter ? "xsp" : "filter";
const std::string& group = playlist.GetGroup();
bool isGrouped = !group.empty() && !StringUtils::EqualsNoCase(group, "none") && !playlist.IsGroupMixed();
// get all virtual folders and add them to the item list
playlist.GetVirtualFolders(virtualFolders);
for (std::vector<std::string>::const_iterator virtualFolder = virtualFolders.begin(); virtualFolder != virtualFolders.end(); virtualFolder++)
{
CFileItemPtr pItem = CFileItemPtr(new CFileItem(*virtualFolder, true));
IFileDirectory *dir = CFileDirectoryFactory::Create(pItem->GetURL(), pItem.get());
if (dir != NULL)
{
pItem->SetSpecialSort(SortSpecialOnTop);
items.Add(pItem);
delete dir;
}
}
if (playlist.GetType() == "movies" ||
playlist.GetType() == "tvshows" ||
playlist.GetType() == "episodes")
{
CVideoDatabase db;
if (db.Open())
{
MediaType mediaType = MediaTypes::FromString(playlist.GetType());
std::string baseDir = strBaseDir;
if (strBaseDir.empty())
{
if (mediaType == MediaTypeTvShow || mediaType == MediaTypeEpisode)
baseDir = "videodb://tvshows/";
else if (mediaType == MediaTypeMovie)
baseDir = "videodb://movies/";
else
return false;
if (!isGrouped)
baseDir += "titles";
else
baseDir += group;
URIUtils::AddSlashAtEnd(baseDir);
if (mediaType == MediaTypeEpisode)
baseDir += "-1/-1/";
}
CVideoDbUrl videoUrl;
if (!videoUrl.FromString(baseDir))
return false;
// store the smartplaylist as JSON in the URL as well
std::string xsp;
if (!playlist.IsEmpty(filter))
{
if (!playlist.SaveAsJson(xsp, !filter))
return false;
}
if (!xsp.empty())
videoUrl.AddOption(option, xsp);
else
videoUrl.RemoveOption(option);
CDatabase::Filter dbfilter;
success = db.GetItems(videoUrl.ToString(), items, dbfilter, sorting);
db.Close();
// if we retrieve a list of episodes and we didn't receive
// a pre-defined base path, we need to fix it
if (strBaseDir.empty() && mediaType == MediaTypeEpisode && !isGrouped)
videoUrl.AppendPath("-1/-1/");
items.SetProperty(PROPERTY_PATH_DB, videoUrl.ToString());
}
}
else if (playlist.IsMusicType() || playlist.GetType().empty())
{
CMusicDatabase db;
if (db.Open())
{
CSmartPlaylist plist(playlist);
if (playlist.GetType() == "mixed" || playlist.GetType().empty())
plist.SetType("songs");
MediaType mediaType = MediaTypes::FromString(plist.GetType());
//.........这里部分代码省略.........
示例9: UpdateVideo
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);
//.........这里部分代码省略.........
示例10: GetDirectory
bool CSmartPlaylistDirectory::GetDirectory(const CSmartPlaylist &playlist, CFileItemList& items, const CStdString &strBaseDir /* = "" */, bool filter /* = false */)
{
bool success = false, success2 = false;
std::set<CStdString> playlists;
SortDescription sorting;
sorting.limitEnd = playlist.GetLimit();
sorting.sortBy = playlist.GetOrder();
sorting.sortOrder = playlist.GetOrderAscending() ? SortOrderAscending : SortOrderDescending;
if (g_guiSettings.GetBool("filelists.ignorethewhensorting"))
sorting.sortAttributes = SortAttributeIgnoreArticle;
std::string option = !filter ? "xsp" : "filter";
if (playlist.GetType().Equals("movies") ||
playlist.GetType().Equals("tvshows") ||
playlist.GetType().Equals("episodes"))
{
CVideoDatabase db;
if (db.Open())
{
MediaType mediaType = DatabaseUtils::MediaTypeFromString(playlist.GetType());
CStdString baseDir = strBaseDir;
if (strBaseDir.empty())
{
switch (mediaType)
{
case MediaTypeTvShow:
case MediaTypeEpisode:
baseDir = "videodb://2/2/";
break;
case MediaTypeMovie:
baseDir = "videodb://1/2/";
break;
default:
return false;
}
}
CVideoDbUrl videoUrl;
if (!videoUrl.FromString(baseDir))
return false;
// store the smartplaylist as JSON in the URL as well
CStdString xsp;
if (!playlist.IsEmpty(filter))
{
if (!playlist.SaveAsJson(xsp, !filter))
return false;
}
videoUrl.AddOption(option, xsp);
CDatabase::Filter dbfilter;
success = db.GetSortedVideos(mediaType, videoUrl.ToString(), sorting, items, dbfilter, true);
db.Close();
// if we retrieve a list of episodes and we didn't receive
// a pre-defined base path, we need to fix it
if (strBaseDir.empty() && mediaType == MediaTypeEpisode)
videoUrl.AppendPath("-1/-1/");
items.SetProperty(PROPERTY_PATH_DB, videoUrl.ToString());
}
}
else if (playlist.GetType().Equals("albums"))
{
CMusicDatabase db;
if (db.Open())
{
CMusicDbUrl musicUrl;
if (!musicUrl.FromString(!strBaseDir.empty() ? strBaseDir : "musicdb://3/"))
return false;
// store the smartplaylist as JSON in the URL as well
CStdString xsp;
if (!playlist.IsEmpty(filter))
{
if (!playlist.SaveAsJson(xsp, !filter))
return false;
}
musicUrl.AddOption(option, xsp);
CDatabase::Filter dbfilter;
success = db.GetAlbumsByWhere(musicUrl.ToString(), dbfilter, items, sorting);
db.Close();
items.SetContent("albums");
items.SetProperty(PROPERTY_PATH_DB, musicUrl.ToString());
}
}
else if (playlist.GetType().Equals("artists"))
{
CMusicDatabase db;
if (db.Open())
{
CMusicDbUrl musicUrl;
if (!musicUrl.FromString("musicdb://2/"))
return false;
//.........这里部分代码省略.........
示例11: GetDirectory
bool CSmartPlaylistDirectory::GetDirectory(const CSmartPlaylist &playlist, CFileItemList& items)
{
bool success = false, success2 = false;
std::set<CStdString> playlists;
SortDescription sorting;
sorting.limitEnd = playlist.GetLimit();
sorting.sortBy = playlist.GetOrder();
sorting.sortOrder = playlist.GetOrderAscending() ? SortOrderAscending : SortOrderDescending;
if (g_guiSettings.GetBool("filelists.ignorethewhensorting"))
sorting.sortAttributes = SortAttributeIgnoreArticle;
if (playlist.GetType().Equals("movies") ||
playlist.GetType().Equals("tvshows") ||
playlist.GetType().Equals("episodes"))
{
CVideoDatabase db;
if (db.Open())
{
MediaType mediaType = DatabaseUtils::MediaTypeFromString(playlist.GetType());
CStdString strBaseDir;
switch (mediaType)
{
case MediaTypeTvShow:
case MediaTypeEpisode:
strBaseDir = "videodb://2/2/";
break;
case MediaTypeMovie:
strBaseDir = "videodb://1/2/";
break;
default:
return false;
}
CVideoDbUrl videoUrl;
CStdString xsp;
if (!videoUrl.FromString(strBaseDir) || !playlist.SaveAsJson(xsp, false))
return false;
// store the smartplaylist as JSON in the URL as well
videoUrl.AddOption("xsp", xsp);
CDatabase::Filter filter;
success = db.GetSortedVideos(mediaType, videoUrl.ToString(), sorting, items, filter, true);
db.Close();
}
}
else if (playlist.GetType().Equals("albums"))
{
CMusicDatabase db;
if (db.Open())
{
CMusicDbUrl musicUrl;
CStdString xsp;
if (!musicUrl.FromString("musicdb://3/") || !playlist.SaveAsJson(xsp, false))
return false;
// store the smartplaylist as JSON in the URL as well
musicUrl.AddOption("xsp", xsp);
CDatabase::Filter filter;
success = db.GetAlbumsByWhere(musicUrl.ToString(), filter, items, sorting);
items.SetContent("albums");
db.Close();
}
}
if (playlist.GetType().Equals("songs") || playlist.GetType().Equals("mixed") || playlist.GetType().IsEmpty())
{
CMusicDatabase db;
if (db.Open())
{
CSmartPlaylist songPlaylist(playlist);
if (playlist.GetType().IsEmpty() || playlist.GetType().Equals("mixed"))
songPlaylist.SetType("songs");
CMusicDbUrl musicUrl;
CStdString xsp;
if (!musicUrl.FromString("musicdb://4/") || !songPlaylist.SaveAsJson(xsp, false))
return false;
// store the smartplaylist as JSON in the URL as well
musicUrl.AddOption("xsp", xsp);
CDatabase::Filter filter;
success = db.GetSongsByWhere(musicUrl.ToString(), filter, items, sorting);
items.SetContent("songs");
db.Close();
}
}
if (playlist.GetType().Equals("musicvideos") || playlist.GetType().Equals("mixed"))
{
CVideoDatabase db;
if (db.Open())
{
CSmartPlaylist mvidPlaylist(playlist);
if (playlist.GetType().Equals("mixed"))
mvidPlaylist.SetType("musicvideos");
//.........这里部分代码省略.........