本文整理汇总了C++中CFileItemList::IsVideoDb方法的典型用法代码示例。如果您正苦于以下问题:C++ CFileItemList::IsVideoDb方法的具体用法?C++ CFileItemList::IsVideoDb怎么用?C++ CFileItemList::IsVideoDb使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类CFileItemList
的用法示例。
在下文中一共展示了CFileItemList::IsVideoDb方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: CanModify
bool CVideoFileItemListModifier::CanModify(const CFileItemList &items) const
{
if (items.IsVideoDb())
return true;
return false;
}
示例2: CGUIViewStateWindowMusic
CGUIViewStateWindowMusicNav::CGUIViewStateWindowMusicNav(const CFileItemList& items) : CGUIViewStateWindowMusic(items)
{
if (items.IsVirtualDirectoryRoot())
{
AddSortMethod(SORT_METHOD_NONE, 551, LABEL_MASKS("%F", "%I", "%L", "")); // Filename, Size | Foldername, empty
SetSortMethod(SORT_METHOD_NONE);
SetViewAsControl(DEFAULT_VIEW_LIST);
SetSortOrder(SortOrderNone);
}
else
{
if (items.IsVideoDb() && items.Size() > (g_guiSettings.GetBool("filelists.showparentdiritems")?1:0))
{
XFILE::VIDEODATABASEDIRECTORY::CQueryParams params;
XFILE::CVideoDatabaseDirectory::GetQueryParams(items[g_guiSettings.GetBool("filelists.showparentdiritems")?1:0]->GetPath(),params);
if (params.GetMVideoId() != -1)
{
if (g_guiSettings.GetBool("filelists.ignorethewhensorting"))
AddSortMethod(SORT_METHOD_LABEL_IGNORE_THE, 556, LABEL_MASKS("%T", "%Y")); // Filename, Duration | Foldername, empty
else
AddSortMethod(SORT_METHOD_LABEL, 551, LABEL_MASKS("%T", "%Y")); // Filename, Duration | Foldername, empty
AddSortMethod(SORT_METHOD_YEAR,562, LABEL_MASKS("%T", "%Y"));
if (g_guiSettings.GetBool("filelists.ignorethewhensorting"))
{
AddSortMethod(SORT_METHOD_ARTIST_IGNORE_THE,557, LABEL_MASKS("%A - %T", "%Y"));
AddSortMethod(SORT_METHOD_ALBUM_IGNORE_THE,558, LABEL_MASKS("%B - %T", "%Y"));
}
else
{
AddSortMethod(SORT_METHOD_ARTIST,557, LABEL_MASKS("%A - %T", "%Y"));
AddSortMethod(SORT_METHOD_ALBUM,558, LABEL_MASKS("%B - %T", "%Y"));
}
CStdString strTrackLeft=g_guiSettings.GetString("musicfiles.trackformat");
CStdString strTrackRight=g_guiSettings.GetString("musicfiles.trackformatright");
AddSortMethod(SORT_METHOD_TRACKNUM, 554, LABEL_MASKS(strTrackLeft, strTrackRight)); // Userdefined, Userdefined| empty, empty
}
else
{
AddSortMethod(SORT_METHOD_LABEL, 551, LABEL_MASKS("%F", "%D", "%L", "")); // Filename, Duration | Foldername, empty
SetSortMethod(SORT_METHOD_LABEL);
}
}
else
{
AddSortMethod(SORT_METHOD_LABEL, 551, LABEL_MASKS("%F", "%D", "%L", "")); // Filename, Duration | Foldername, empty
SetSortMethod(SORT_METHOD_LABEL);
}
SetViewAsControl(DEFAULT_VIEW_LIST);
SetSortOrder(SortOrderAscending);
}
LoadViewState(items.GetPath(), WINDOW_MUSIC_NAV);
}
示例3: OnPrepareFileItems
void CGUIWindowVideoNav::OnPrepareFileItems(CFileItemList &items)
{
CGUIWindowVideoBase::OnPrepareFileItems(items);
// set fanart
CQueryParams params;
CVideoDatabaseDirectory dir;
dir.GetQueryParams(items.m_strPath,params);
if (params.GetContentType() == VIDEODB_CONTENT_MUSICVIDEOS)
CGUIWindowMusicNav::SetupFanart(items);
NODE_TYPE node = dir.GetDirectoryChildType(items.m_strPath);
// now filter as necessary
bool filterWatched=false;
if (node == NODE_TYPE_EPISODES
|| node == NODE_TYPE_SEASONS
|| node == NODE_TYPE_TITLE_MOVIES
|| node == NODE_TYPE_TITLE_TVSHOWS
|| node == NODE_TYPE_TITLE_MUSICVIDEOS
|| node == NODE_TYPE_RECENTLY_ADDED_EPISODES
|| node == NODE_TYPE_RECENTLY_ADDED_MOVIES
|| node == NODE_TYPE_RECENTLY_ADDED_MUSICVIDEOS)
filterWatched = true;
if (!items.IsVideoDb())
filterWatched = true;
if (items.IsSmartPlayList() && items.GetContent() == "tvshows")
node = NODE_TYPE_TITLE_TVSHOWS; // so that the check below works
int watchMode = g_settings.GetWatchMode(m_vecItems->GetContent());
for (int i = 0; i < items.Size(); i++)
{
CFileItemPtr item = items.Get(i);
if(item->HasVideoInfoTag() && (node == NODE_TYPE_TITLE_TVSHOWS || node == NODE_TYPE_SEASONS))
{
if (watchMode == VIDEO_SHOW_UNWATCHED)
item->GetVideoInfoTag()->m_iEpisode = item->GetPropertyInt("unwatchedepisodes");
if (watchMode == VIDEO_SHOW_WATCHED)
item->GetVideoInfoTag()->m_iEpisode = item->GetPropertyInt("watchedepisodes");
item->SetProperty("numepisodes", item->GetVideoInfoTag()->m_iEpisode);
}
if(filterWatched)
{
if((watchMode==VIDEO_SHOW_WATCHED && item->GetVideoInfoTag()->m_playCount== 0)
|| (watchMode==VIDEO_SHOW_UNWATCHED && item->GetVideoInfoTag()->m_playCount > 0))
{
items.Remove(i);
i--;
}
}
}
}
示例4: CGUIViewStateWindowMusic
CGUIViewStateWindowMusicNav::CGUIViewStateWindowMusicNav(const CFileItemList& items) : CGUIViewStateWindowMusic(items)
{
SortAttribute sortAttribute = SortAttributeNone;
if (CSettings::GetInstance().GetBool(CSettings::SETTING_FILELISTS_IGNORETHEWHENSORTING))
sortAttribute = SortAttributeIgnoreArticle;
if (items.IsVirtualDirectoryRoot())
{
AddSortMethod(SortByNone, 551, LABEL_MASKS("%F", "%I", "%L", "")); // Filename, Size | Foldername, empty
SetSortMethod(SortByNone);
SetViewAsControl(DEFAULT_VIEW_LIST);
SetSortOrder(SortOrderNone);
}
else
{
if (items.IsVideoDb() && items.Size() > (CSettings::GetInstance().GetBool(CSettings::SETTING_FILELISTS_SHOWPARENTDIRITEMS)?1:0))
{
XFILE::VIDEODATABASEDIRECTORY::CQueryParams params;
XFILE::CVideoDatabaseDirectory::GetQueryParams(items[CSettings::GetInstance().GetBool(CSettings::SETTING_FILELISTS_SHOWPARENTDIRITEMS)?1:0]->GetPath(),params);
if (params.GetMVideoId() != -1)
{
AddSortMethod(SortByLabel, sortAttribute, 551, LABEL_MASKS("%T", "%Y")); // Filename, Duration | Foldername, empty
AddSortMethod(SortByYear, 562, LABEL_MASKS("%T", "%Y"));
AddSortMethod(SortByArtist, sortAttribute, 557, LABEL_MASKS("%A - %T", "%Y"));
AddSortMethod(SortByArtistThenYear, sortAttribute, 578, LABEL_MASKS("%A - %T", "%Y"));
AddSortMethod(SortByAlbum, sortAttribute, 558, LABEL_MASKS("%B - %T", "%Y"));
std::string strTrackLeft=CSettings::GetInstance().GetString(CSettings::SETTING_MUSICFILES_TRACKFORMAT);
std::string strTrackRight=CSettings::GetInstance().GetString(CSettings::SETTING_MUSICFILES_TRACKFORMATRIGHT);
AddSortMethod(SortByTrackNumber, 554, LABEL_MASKS(strTrackLeft, strTrackRight)); // Userdefined, Userdefined| empty, empty
}
else
{
AddSortMethod(SortByLabel, 551, LABEL_MASKS("%F", "%D", "%L", "")); // Filename, Duration | Foldername, empty
SetSortMethod(SortByLabel);
}
}
else
{
AddSortMethod(SortByLabel, 551, LABEL_MASKS("%F", "%D", "%L", "")); // Filename, Duration | Foldername, empty
AddSortMethod(SortBySize, 553, LABEL_MASKS("%F", "%I", "%L", "%I")); // Filename, Size | Foldername, Size
AddSortMethod(SortByDate, 552, LABEL_MASKS("%F", "%J", "%L", "%J")); // Filename, Date | Foldername, Date
AddSortMethod(SortByFile, 561, LABEL_MASKS("%F", "%I", "%L", "")); // Filename, Size | Label, empty
SetSortMethod(SortByLabel);
}
SetViewAsControl(DEFAULT_VIEW_LIST);
SetSortOrder(SortOrderAscending);
}
LoadViewState(items.GetPath(), WINDOW_MUSIC_NAV);
}
示例5: CGUIViewStateWindowMusic
CGUIViewStateWindowMusicNav::CGUIViewStateWindowMusicNav(const CFileItemList& items) : CGUIViewStateWindowMusic(items)
{
SortAttribute sortAttribute = SortAttributeNone;
if (CSettings::Get().GetBool("filelists.ignorethewhensorting"))
sortAttribute = SortAttributeIgnoreArticle;
if (items.IsVirtualDirectoryRoot())
{
AddSortMethod(SortByNone, 551, LABEL_MASKS("%F", "%I", "%L", "")); // Filename, Size | Foldername, empty
SetSortMethod(SortByNone);
SetViewAsControl(DEFAULT_VIEW_LIST);
SetSortOrder(SortOrderNone);
}
else
{
if (items.IsVideoDb() && items.Size() > (CSettings::Get().GetBool("filelists.showparentdiritems")?1:0))
{
XFILE::VIDEODATABASEDIRECTORY::CQueryParams params;
XFILE::CVideoDatabaseDirectory::GetQueryParams(items[CSettings::Get().GetBool("filelists.showparentdiritems")?1:0]->GetPath(),params);
if (params.GetMVideoId() != -1)
{
AddSortMethod(SortByLabel, sortAttribute, 551, LABEL_MASKS("%T", "%Y")); // Filename, Duration | Foldername, empty
AddSortMethod(SortByYear, 562, LABEL_MASKS("%T", "%Y"));
AddSortMethod(SortByArtist, sortAttribute, 557, LABEL_MASKS("%A - %T", "%Y"));
AddSortMethod(SortByAlbum, sortAttribute, 558, LABEL_MASKS("%B - %T", "%Y"));
CStdString strTrackLeft=CSettings::Get().GetString("musicfiles.trackformat");
CStdString strTrackRight=CSettings::Get().GetString("musicfiles.trackformatright");
AddSortMethod(SortByTrackNumber, 554, LABEL_MASKS(strTrackLeft, strTrackRight)); // Userdefined, Userdefined| empty, empty
}
else
{
AddSortMethod(SortByLabel, 551, LABEL_MASKS("%F", "%D", "%L", "")); // Filename, Duration | Foldername, empty
SetSortMethod(SortByLabel);
}
}
else
{
AddSortMethod(SortByLabel, 551, LABEL_MASKS("%F", "%D", "%L", "")); // Filename, Duration | Foldername, empty
SetSortMethod(SortByLabel);
}
SetViewAsControl(DEFAULT_VIEW_LIST);
SetSortOrder(SortOrderAscending);
}
LoadViewState(items.GetPath(), WINDOW_MUSIC_NAV);
}
示例6: GetDirectory
bool CGUIWindowVideoNav::GetDirectory(const std::string &strDirectory, CFileItemList &items)
{
if (m_thumbLoader.IsLoading())
m_thumbLoader.StopThread();
items.ClearArt();
items.ClearProperties();
bool bResult = CGUIWindowVideoBase::GetDirectory(strDirectory, items);
if (bResult)
{
if (items.IsVideoDb())
{
XFILE::CVideoDatabaseDirectory dir;
CQueryParams params;
dir.GetQueryParams(items.GetPath(),params);
VIDEODATABASEDIRECTORY::NODE_TYPE node = dir.GetDirectoryChildType(items.GetPath());
int iFlatten = CServiceBroker::GetSettings().GetInt(CSettings::SETTING_VIDEOLIBRARY_FLATTENTVSHOWS);
int itemsSize = items.GetObjectCount();
int firstIndex = items.Size() - itemsSize;
// perform the flattening logic for tvshows with a single (unwatched) season (+ optional special season)
if (node == NODE_TYPE_SEASONS && !items.IsEmpty())
{
// check if the last item is the "All seasons" item which should be ignored for flattening
if (!items[items.Size() - 1]->HasVideoInfoTag() || items[items.Size() - 1]->GetVideoInfoTag()->m_iSeason < 0)
itemsSize -= 1;
bool bFlatten = (itemsSize == 1 && iFlatten == 1) || iFlatten == 2 || // flatten if one one season or if always flatten is enabled
(itemsSize == 2 && iFlatten == 1 && // flatten if one season + specials
(items[firstIndex]->GetVideoInfoTag()->m_iSeason == 0 || items[firstIndex + 1]->GetVideoInfoTag()->m_iSeason == 0));
if (iFlatten > 0 && !bFlatten && (WatchedMode)CMediaSettings::GetInstance().GetWatchedMode("tvshows") == WatchedModeUnwatched)
{
int count = 0;
for(int i = 0; i < items.Size(); i++)
{
const CFileItemPtr item = items.Get(i);
if (item->GetProperty("unwatchedepisodes").asInteger() != 0 && item->GetVideoInfoTag()->m_iSeason > 0)
count++;
}
bFlatten = (count < 2); // flatten if there is only 1 unwatched season (not counting specials)
}
if (bFlatten)
{ // flatten if one season or flatten always
items.Clear();
CVideoDbUrl videoUrl;
if (!videoUrl.FromString(items.GetPath()))
return false;
videoUrl.AppendPath("-2/");
return GetDirectory(videoUrl.ToString(), items);
}
}
if (node == VIDEODATABASEDIRECTORY::NODE_TYPE_EPISODES ||
node == NODE_TYPE_SEASONS ||
node == NODE_TYPE_RECENTLY_ADDED_EPISODES)
{
CLog::Log(LOGDEBUG, "WindowVideoNav::GetDirectory");
// grab the show thumb
CVideoInfoTag details;
m_database.GetTvShowInfo("", details, params.GetTvShowId());
std::map<std::string, std::string> art;
if (m_database.GetArtForItem(details.m_iDbId, details.m_type, art))
{
items.AppendArt(art, details.m_type);
items.SetArtFallback("fanart", "tvshow.fanart");
if (node == NODE_TYPE_SEASONS)
{ // set an art fallback for "thumb"
if (items.HasArt("tvshow.poster"))
items.SetArtFallback("thumb", "tvshow.poster");
else if (items.HasArt("tvshow.banner"))
items.SetArtFallback("thumb", "tvshow.banner");
}
}
// Grab fanart data
items.SetProperty("fanart_color1", details.m_fanart.GetColor(0));
items.SetProperty("fanart_color2", details.m_fanart.GetColor(1));
items.SetProperty("fanart_color3", details.m_fanart.GetColor(2));
// save the show description (showplot)
items.SetProperty("showplot", details.m_strPlot);
items.SetProperty("showtitle", details.m_strShowTitle);
// the container folder thumb is the parent (i.e. season or show)
if (itemsSize && (node == NODE_TYPE_EPISODES || node == NODE_TYPE_RECENTLY_ADDED_EPISODES))
{
items.SetContent("episodes");
int seasonID = -1;
int seasonParam = params.GetSeason();
// grab all season art when flatten always
if (seasonParam == -2 && iFlatten == 2)
seasonParam = -1;
//.........这里部分代码省略.........
示例7: ApplyWatchedFilter
bool CGUIWindowVideoNav::ApplyWatchedFilter(CFileItemList &items)
{
bool listchanged = false;
CVideoDatabaseDirectory dir;
NODE_TYPE node = dir.GetDirectoryChildType(items.GetPath());
// now filter watched items as necessary
bool filterWatched=false;
if (node == NODE_TYPE_EPISODES
|| node == NODE_TYPE_SEASONS
|| node == NODE_TYPE_SETS
|| node == NODE_TYPE_TAGS
|| node == NODE_TYPE_TITLE_MOVIES
|| node == NODE_TYPE_TITLE_TVSHOWS
|| node == NODE_TYPE_TITLE_MUSICVIDEOS
|| node == NODE_TYPE_RECENTLY_ADDED_EPISODES
|| node == NODE_TYPE_RECENTLY_ADDED_MOVIES
|| node == NODE_TYPE_RECENTLY_ADDED_MUSICVIDEOS)
filterWatched = true;
if (!items.IsVideoDb())
filterWatched = true;
if (items.GetContent() == "tvshows" &&
(items.IsSmartPlayList() || items.IsLibraryFolder()))
node = NODE_TYPE_TITLE_TVSHOWS; // so that the check below works
int watchMode = CMediaSettings::GetInstance().GetWatchedMode(m_vecItems->GetContent());
for (int i = 0; i < items.Size(); i++)
{
CFileItemPtr item = items.Get(i);
if(item->HasVideoInfoTag() && (node == NODE_TYPE_TITLE_TVSHOWS || node == NODE_TYPE_SEASONS))
{
if (watchMode == WatchedModeUnwatched)
item->GetVideoInfoTag()->m_iEpisode = (int)item->GetProperty("unwatchedepisodes").asInteger();
if (watchMode == WatchedModeWatched)
item->GetVideoInfoTag()->m_iEpisode = (int)item->GetProperty("watchedepisodes").asInteger();
if (watchMode == WatchedModeAll)
item->GetVideoInfoTag()->m_iEpisode = (int)item->GetProperty("totalepisodes").asInteger();
item->SetProperty("numepisodes", item->GetVideoInfoTag()->m_iEpisode);
listchanged = true;
}
if (filterWatched)
{
if(!item->IsParentFolder() && // Don't delete the go to parent folder
((watchMode == WatchedModeWatched && item->GetVideoInfoTag()->GetPlayCount() == 0) ||
(watchMode == WatchedModeUnwatched && item->GetVideoInfoTag()->GetPlayCount() > 0)))
{
items.Remove(i);
i--;
listchanged = true;
}
}
}
// Remove the parent folder icon, if it's the only thing in the folder. This is needed for hiding seasons.
if (items.GetObjectCount() == 0 && items.GetFileCount() > 0 && items.Get(0)->IsParentFolder())
items.Remove(0);
if(node == NODE_TYPE_TITLE_TVSHOWS || node == NODE_TYPE_SEASONS)
{
// the watched filter may change the "numepisodes" property which is reflected in the TV_SHOWS and SEASONS nodes
// therefore, the items labels have to be refreshed, and possibly the list needs resorting as well.
items.ClearSortState(); // this is needed to force resorting even if sort method did not change
FormatAndSort(items);
}
return listchanged;
}
示例8: GetDirectory
//.........这里部分代码省略.........
while(!get.Wait(10))
{
CSingleLock lock(g_graphicsContext);
// update progress
float progress = pDirectory->GetProgress();
if (progress > 0)
dialog->SetProgress(progress);
if (dialog->IsCanceled())
{
cancel = true;
pDirectory->CancelDirectory();
break;
}
lock.Leave(); // prevent an occasional deadlock on exit
g_windowManager.ProcessRenderLoop(false);
}
dialog->Close();
}
}
result = get.GetDirectory(items);
}
else
{
items.SetURL(url);
result = pDirectory->GetDirectory(realURL, items);
}
if (!result)
{
if (!cancel && g_application.IsCurrentThread() && pDirectory->ProcessRequirements())
continue;
CLog::Log(LOGERROR, "%s - Error getting %s", __FUNCTION__, url.GetRedacted().c_str());
return false;
}
}
// cache the directory, if necessary
if (!(hints.flags & DIR_FLAG_BYPASS_CACHE))
g_directoryCache.SetDirectory(realURL.Get(), items, pDirectory->GetCacheType(url));
}
// now filter for allowed files
if (!pDirectory->AllowAll())
{
pDirectory->SetMask(hints.mask);
for (int i = 0; i < items.Size(); ++i)
{
CFileItemPtr item = items[i];
if (!item->m_bIsFolder && !pDirectory->IsAllowed(item->GetURL()))
{
items.Remove(i);
i--; // don't confuse loop
}
}
}
// filter hidden files
// TODO: we shouldn't be checking the gui setting here, callers should use getHidden instead
if (!CSettings::Get().GetBool("filelists.showhidden") && !(hints.flags & DIR_FLAG_GET_HIDDEN))
{
for (int i = 0; i < items.Size(); ++i)
{
if (items[i]->GetProperty("file:hidden").asBoolean())
{
items.Remove(i);
i--; // don't confuse loop
}
}
}
// Should any of the files we read be treated as a directory?
// Disable for database folders, as they already contain the extracted items
if (!(hints.flags & DIR_FLAG_NO_FILE_DIRS) && !items.IsMusicDb() && !items.IsVideoDb() && !items.IsSmartPlayList())
FilterFileDirectories(items, hints.mask);
// Correct items for path substitution
const std::string pathToUrl(url.Get());
const std::string pathToUrl2(realURL.Get());
if (pathToUrl != pathToUrl2)
{
for (int i = 0; i < items.Size(); ++i)
{
CFileItemPtr item = items[i];
item->SetPath(URIUtils::SubstitutePath(item->GetPath(), true));
}
}
return true;
}
XBMCCOMMONS_HANDLE_UNCHECKED
catch (...)
{
CLog::Log(LOGERROR, "%s - Unhandled exception", __FUNCTION__);
}
CLog::Log(LOGERROR, "%s - Error getting %s", __FUNCTION__, url.GetRedacted().c_str());
return false;
}
示例9: if
CGUIViewStateWindowVideoNav::CGUIViewStateWindowVideoNav(const CFileItemList& items) : CGUIViewStateWindowVideo(items)
{
SortAttribute sortAttributes = SortAttributeNone;
if (CSettings::GetInstance().GetBool(CSettings::SETTING_FILELISTS_IGNORETHEWHENSORTING))
sortAttributes = SortAttributeIgnoreArticle;
if (items.IsVirtualDirectoryRoot())
{
AddSortMethod(SortByNone, 551, LABEL_MASKS("%F", "%I", "%L", "")); // Filename, Size | Label, empty
SetSortMethod(SortByNone);
SetViewAsControl(DEFAULT_VIEW_LIST);
SetSortOrder(SortOrderNone);
}
else if (items.IsVideoDb())
{
NODE_TYPE NodeType=CVideoDatabaseDirectory::GetDirectoryChildType(items.GetPath());
CQueryParams params;
CVideoDatabaseDirectory::GetQueryParams(items.GetPath(),params);
switch (NodeType)
{
case NODE_TYPE_MOVIES_OVERVIEW:
case NODE_TYPE_TVSHOWS_OVERVIEW:
case NODE_TYPE_MUSICVIDEOS_OVERVIEW:
case NODE_TYPE_OVERVIEW:
{
AddSortMethod(SortByNone, 551, LABEL_MASKS("%F", "%I", "%L", "")); // Filename, Size | Label, empty
SetSortMethod(SortByNone);
SetViewAsControl(DEFAULT_VIEW_LIST);
SetSortOrder(SortOrderNone);
}
break;
case NODE_TYPE_DIRECTOR:
case NODE_TYPE_ACTOR:
{
AddSortMethod(SortByLabel, 551, LABEL_MASKS("%T", "%R", "%L", "")); // Title, Rating | Label, empty
SetSortMethod(SortByLabel);
const CViewState *viewState = CViewStateSettings::GetInstance().Get("videonavactors");
SetViewAsControl(viewState->m_viewMode);
SetSortOrder(viewState->m_sortDescription.sortOrder);
}
break;
case NODE_TYPE_YEAR:
{
AddSortMethod(SortByLabel, 562, LABEL_MASKS("%T", "%R", "%L", "")); // Title, Rating | Label, empty
SetSortMethod(SortByLabel);
const CViewState *viewState = CViewStateSettings::GetInstance().Get("videonavyears");
SetViewAsControl(viewState->m_viewMode);
SetSortOrder(viewState->m_sortDescription.sortOrder);
}
break;
case NODE_TYPE_SEASONS:
{
AddSortMethod(SortBySortTitle, 556, LABEL_MASKS("%L", "","%L","")); // Label, empty | Label, empty
SetSortMethod(SortBySortTitle);
const CViewState *viewState = CViewStateSettings::GetInstance().Get("videonavseasons");
SetViewAsControl(viewState->m_viewMode);
SetSortOrder(viewState->m_sortDescription.sortOrder);
}
break;
case NODE_TYPE_TITLE_TVSHOWS:
{
AddSortMethod(SortBySortTitle, sortAttributes, 556, LABEL_MASKS("%T", "%M", "%T", "%M")); // Title, #Episodes | Title, #Episodes
AddSortMethod(SortByNumberOfEpisodes, 20360, LABEL_MASKS("%L", "%M", "%L", "%M")); // Label, #Episodes | Label, #Episodes
AddSortMethod(SortByLastPlayed, 568, LABEL_MASKS("%T", "%p", "%T", "%p")); // Title, #Last played | Title, #Last played
AddSortMethod(SortByDateAdded, 570, LABEL_MASKS("%T", "%a", "%T", "%a")); // Title, DateAdded | Title, DateAdded
AddSortMethod(SortByYear, 562, LABEL_MASKS("%L","%Y","%L","%Y")); // Label, Year | Label, Year
AddSortMethod(SortByUserRating, 38018, LABEL_MASKS("%T", "%r", "%T", "%r")); // Title, Userrating | Title, Userrating
SetSortMethod(SortByLabel);
const CViewState *viewState = CViewStateSettings::GetInstance().Get("videonavtvshows");
SetViewAsControl(viewState->m_viewMode);
SetSortOrder(viewState->m_sortDescription.sortOrder);
}
break;
case NODE_TYPE_MUSICVIDEOS_ALBUM:
case NODE_TYPE_GENRE:
case NODE_TYPE_COUNTRY:
case NODE_TYPE_STUDIO:
{
AddSortMethod(SortByLabel, 551, LABEL_MASKS("%T", "%R", "%L", "")); // Title, Rating | Label, empty
SetSortMethod(SortByLabel);
const CViewState *viewState = CViewStateSettings::GetInstance().Get("videonavgenres");
SetViewAsControl(viewState->m_viewMode);
SetSortOrder(viewState->m_sortDescription.sortOrder);
}
break;
case NODE_TYPE_SETS:
{
AddSortMethod(SortByLabel, sortAttributes, 551, LABEL_MASKS("%T","%R", "%T","%R")); // Title, Rating | Title, Rating
//.........这里部分代码省略.........
示例10: GetDirectory
bool CGUIWindowMusicNav::GetDirectory(const std::string &strDirectory, CFileItemList &items)
{
if (m_bDisplayEmptyDatabaseMessage)
return true;
if (strDirectory.empty())
AddSearchFolder();
bool bResult = CGUIWindowMusicBase::GetDirectory(strDirectory, items);
if (bResult)
{
if (items.IsPlayList())
OnRetrieveMusicInfo(items);
}
// update our content in the info manager
if (StringUtils::StartsWithNoCase(strDirectory, "videodb://") || items.IsVideoDb())
{
CVideoDatabaseDirectory dir;
VIDEODATABASEDIRECTORY::NODE_TYPE node = dir.GetDirectoryChildType(strDirectory);
if (node == VIDEODATABASEDIRECTORY::NODE_TYPE_TITLE_MUSICVIDEOS ||
node == VIDEODATABASEDIRECTORY::NODE_TYPE_RECENTLY_ADDED_MUSICVIDEOS)
items.SetContent("musicvideos");
else if (node == VIDEODATABASEDIRECTORY::NODE_TYPE_GENRE)
items.SetContent("genres");
else if (node == VIDEODATABASEDIRECTORY::NODE_TYPE_COUNTRY)
items.SetContent("countries");
else if (node == VIDEODATABASEDIRECTORY::NODE_TYPE_ACTOR)
items.SetContent("artists");
else if (node == VIDEODATABASEDIRECTORY::NODE_TYPE_DIRECTOR)
items.SetContent("directors");
else if (node == VIDEODATABASEDIRECTORY::NODE_TYPE_STUDIO)
items.SetContent("studios");
else if (node == VIDEODATABASEDIRECTORY::NODE_TYPE_YEAR)
items.SetContent("years");
else if (node == VIDEODATABASEDIRECTORY::NODE_TYPE_MUSICVIDEOS_ALBUM)
items.SetContent("albums");
else if (node == VIDEODATABASEDIRECTORY::NODE_TYPE_TAGS)
items.SetContent("tags");
}
else if (StringUtils::StartsWithNoCase(strDirectory, "musicdb://") || items.IsMusicDb())
{
CMusicDatabaseDirectory dir;
NODE_TYPE node = dir.GetDirectoryChildType(strDirectory);
if (node == NODE_TYPE_ALBUM ||
node == NODE_TYPE_ALBUM_RECENTLY_ADDED ||
node == NODE_TYPE_ALBUM_RECENTLY_PLAYED ||
node == NODE_TYPE_ALBUM_TOP100 ||
node == NODE_TYPE_ALBUM_COMPILATIONS ||
node == NODE_TYPE_YEAR_ALBUM)
items.SetContent("albums");
else if (node == NODE_TYPE_ARTIST)
items.SetContent("artists");
else if (node == NODE_TYPE_SONG ||
node == NODE_TYPE_SONG_TOP100 ||
node == NODE_TYPE_SINGLES ||
node == NODE_TYPE_ALBUM_RECENTLY_ADDED_SONGS ||
node == NODE_TYPE_ALBUM_RECENTLY_PLAYED_SONGS ||
node == NODE_TYPE_ALBUM_COMPILATIONS_SONGS ||
node == NODE_TYPE_ALBUM_TOP100_SONGS ||
node == NODE_TYPE_YEAR_SONG)
items.SetContent("songs");
else if (node == NODE_TYPE_GENRE)
items.SetContent("genres");
else if (node == NODE_TYPE_YEAR)
items.SetContent("years");
}
else if (URIUtils::PathEquals(strDirectory, "special://musicplaylists/"))
items.SetContent("playlists");
else if (URIUtils::PathEquals(strDirectory, "plugin://music/"))
items.SetContent("plugins");
else if (items.IsPlayList())
items.SetContent("songs");
return bResult;
}
示例11: CGUIViewStateWindowMusic
CGUIViewStateWindowMusicNav::CGUIViewStateWindowMusicNav(const CFileItemList& items) : CGUIViewStateWindowMusic(items)
{
SortAttribute sortAttribute = SortAttributeNone;
if (CSettings::GetInstance().GetBool(CSettings::SETTING_FILELISTS_IGNORETHEWHENSORTING))
sortAttribute = SortAttributeIgnoreArticle;
if (items.IsVirtualDirectoryRoot())
{
AddSortMethod(SortByNone, 551, LABEL_MASKS("%F", "%I", "%L", "")); // Filename, Size | Foldername, empty
SetSortMethod(SortByNone);
SetViewAsControl(DEFAULT_VIEW_LIST);
SetSortOrder(SortOrderNone);
}
else
{
if (items.IsVideoDb() && items.Size() > (CSettings::GetInstance().GetBool(CSettings::SETTING_FILELISTS_SHOWPARENTDIRITEMS)?1:0))
{
XFILE::VIDEODATABASEDIRECTORY::CQueryParams params;
XFILE::CVideoDatabaseDirectory::GetQueryParams(items[CSettings::GetInstance().GetBool(CSettings::SETTING_FILELISTS_SHOWPARENTDIRITEMS)?1:0]->GetPath(),params);
if (params.GetMVideoId() != -1)
{
AddSortMethod(SortByLabel, sortAttribute, 551, LABEL_MASKS("%T", "%Y")); // Filename, Duration | Foldername, empty
AddSortMethod(SortByYear, 562, LABEL_MASKS("%T", "%Y"));
AddSortMethod(SortByArtist, sortAttribute, 557, LABEL_MASKS("%A - %T", "%Y"));
AddSortMethod(SortByArtistThenYear, sortAttribute, 578, LABEL_MASKS("%A - %T", "%Y"));
AddSortMethod(SortByAlbum, sortAttribute, 558, LABEL_MASKS("%B - %T", "%Y"));
std::string strTrack=CSettings::GetInstance().GetString(CSettings::SETTING_MUSICFILES_TRACKFORMAT);
AddSortMethod(SortByTrackNumber, 554, LABEL_MASKS(strTrack, "%D")); // Userdefined, Duration| empty, empty
}
else
{
AddSortMethod(SortByLabel, 551, LABEL_MASKS("%F", "%D", "%L", "")); // Filename, Duration | Foldername, empty
SetSortMethod(SortByLabel);
}
}
else
{
//In navigation of music files tag data is scanned whenever present and can be used as sort criteria
//hence sort methods available are similar to song node (not the same as only tag data)
//Unfortunately anything here appears at all levels of file navigation even if no song files there.
std::string strTrack = CSettings::GetInstance().GetString(CSettings::SETTING_MUSICFILES_LIBRARYTRACKFORMAT);
if (strTrack.empty())
strTrack = CSettings::GetInstance().GetString(CSettings::SETTING_MUSICFILES_TRACKFORMAT);
AddSortMethod(SortByLabel, 551, LABEL_MASKS(strTrack, "%D", "%L", ""), // Userdefined, Duration | FolderName, empty
CSettings::GetInstance().GetBool(CSettings::SETTING_FILELISTS_IGNORETHEWHENSORTING) ? SortAttributeIgnoreArticle : SortAttributeNone);
AddSortMethod(SortBySize, 553, LABEL_MASKS("%F", "%I", "%L", "%I")); // Filename, Size | Foldername, Size
AddSortMethod(SortByDate, 552, LABEL_MASKS("%F", "%J", "%L", "%J")); // Filename, Date | Foldername, Date
AddSortMethod(SortByFile, 561, LABEL_MASKS("%F", "%I", "%L", "")); // Filename, Size | Label, empty
AddSortMethod(SortByTrackNumber, 554, LABEL_MASKS(strTrack, "%D")); // Userdefined, Duration| empty, empty
AddSortMethod(SortByTitle, sortAttribute, 556, LABEL_MASKS("%T - %A", "%D")); // Title, Artist, Duration| empty, empty
AddSortMethod(SortByAlbum, sortAttribute, 558, LABEL_MASKS("%B - %T - %A", "%D")); // Album, Title, Artist, Duration| empty, empty
AddSortMethod(SortByArtist, sortAttribute, 557, LABEL_MASKS("%A - %T", "%D")); // Artist, Title, Duration| empty, empty
AddSortMethod(SortByArtistThenYear, sortAttribute, 578, LABEL_MASKS("%A - %T", "%Y")); // Artist(year), Title, Year| empty, empty
AddSortMethod(SortByTime, 180, LABEL_MASKS("%T - %A", "%D")); // Titel, Artist, Duration| empty, empty
AddSortMethod(SortByYear, 562, LABEL_MASKS("%T - %A", "%Y")); // Title, Artist, Year
SetSortMethod(SortByLabel);
}
const CViewState *viewState = CViewStateSettings::GetInstance().Get("musicnavsongs");
SetViewAsControl(viewState->m_viewMode);
SetSortOrder(viewState->m_sortDescription.sortOrder);
SetSortOrder(SortOrderAscending);
}
LoadViewState(items.GetPath(), WINDOW_MUSIC_NAV);
}
示例12: if
CGUIViewStateWindowVideoNav::CGUIViewStateWindowVideoNav(const CFileItemList& items) : CGUIViewStateWindowVideo(items)
{
if (items.IsVirtualDirectoryRoot())
{
AddSortMethod(SORT_METHOD_NONE, 551, LABEL_MASKS("%F", "%I", "%L", "")); // Filename, Size | Foldername, empty
SetSortMethod(SORT_METHOD_NONE);
SetViewAsControl(DEFAULT_VIEW_LIST);
SetSortOrder(SORT_ORDER_NONE);
}
else if (items.IsVideoDb())
{
NODE_TYPE NodeType=CVideoDatabaseDirectory::GetDirectoryChildType(items.m_strPath);
CQueryParams params;
CVideoDatabaseDirectory::GetQueryParams(items.m_strPath,params);
switch (NodeType)
{
case NODE_TYPE_MOVIES_OVERVIEW:
case NODE_TYPE_TVSHOWS_OVERVIEW:
case NODE_TYPE_MUSICVIDEOS_OVERVIEW:
case NODE_TYPE_OVERVIEW:
{
AddSortMethod(SORT_METHOD_NONE, 551, LABEL_MASKS("%F", "%I", "%L", "")); // Filename, Size | Foldername, empty
SetSortMethod(SORT_METHOD_NONE);
SetViewAsControl(DEFAULT_VIEW_LIST);
SetSortOrder(SORT_ORDER_NONE);
}
break;
case NODE_TYPE_DIRECTOR:
case NODE_TYPE_ACTOR:
{
AddSortMethod(SORT_METHOD_LABEL, 551, LABEL_MASKS("%T", "%R", "%L", "")); // Filename, Duration | Foldername, empty
SetSortMethod(SORT_METHOD_LABEL);
SetViewAsControl(g_settings.m_viewStateVideoNavActors.m_viewMode);
SetSortOrder(g_settings.m_viewStateVideoNavActors.m_sortOrder);
}
break;
case NODE_TYPE_YEAR:
{
AddSortMethod(SORT_METHOD_LABEL, 562, LABEL_MASKS("%T", "%R", "%L", "")); // Filename, Duration | Foldername, empty
SetSortMethod(SORT_METHOD_LABEL);
SetViewAsControl(g_settings.m_viewStateVideoNavYears.m_viewMode);
SetSortOrder(g_settings.m_viewStateVideoNavYears.m_sortOrder);
}
break;
case NODE_TYPE_SEASONS:
{
AddSortMethod(SORT_METHOD_VIDEO_TITLE, 551, LABEL_MASKS("%L", "","%L","")); // Filename, Duration | Foldername, empty
SetSortMethod(SORT_METHOD_VIDEO_TITLE);
SetViewAsControl(g_settings.m_viewStateVideoNavSeasons.m_viewMode);
SetSortOrder(g_settings.m_viewStateVideoNavSeasons.m_sortOrder);
}
break;
case NODE_TYPE_TITLE_TVSHOWS:
{
if (g_guiSettings.GetBool("filelists.ignorethewhensorting"))
AddSortMethod(SORT_METHOD_VIDEO_SORT_TITLE_IGNORE_THE, 551, LABEL_MASKS("%T", "%M", "%T", "%M")); // Filename, Duration | Foldername, empty
else
AddSortMethod(SORT_METHOD_VIDEO_SORT_TITLE, 551, LABEL_MASKS("%T", "%M", "%T", "%M"));
AddSortMethod(SORT_METHOD_EPISODE, 20360, LABEL_MASKS("%L", "%M", "%L", "%M")); // Filename, Duration | Foldername, empty
AddSortMethod(SORT_METHOD_YEAR,562,LABEL_MASKS("%L","%Y","%L","%Y"));
SetSortMethod(SORT_METHOD_LABEL);
SetViewAsControl(g_settings.m_viewStateVideoNavTvShows.m_viewMode);
SetSortOrder(g_settings.m_viewStateVideoNavTvShows.m_sortOrder);
}
break;
case NODE_TYPE_MUSICVIDEOS_ALBUM:
case NODE_TYPE_GENRE:
case NODE_TYPE_COUNTRY:
case NODE_TYPE_STUDIO:
{
AddSortMethod(SORT_METHOD_LABEL, 551, LABEL_MASKS("%T", "%R", "%L", "")); // Filename, Duration | Foldername, empty
SetSortMethod(SORT_METHOD_LABEL);
SetViewAsControl(g_settings.m_viewStateVideoNavGenres.m_viewMode);
SetSortOrder(g_settings.m_viewStateVideoNavGenres.m_sortOrder);
}
break;
case NODE_TYPE_SETS:
{
if (g_guiSettings.GetBool("filelists.ignorethewhensorting"))
AddSortMethod(SORT_METHOD_LABEL_IGNORE_THE, 551, LABEL_MASKS("%T","%R")); // Filename, Duration | Foldername, empty
else
AddSortMethod(SORT_METHOD_LABEL, 551, LABEL_MASKS("%T", "%R")); // Filename, Duration | Foldername, empty
SetSortMethod(SORT_METHOD_LABEL_IGNORE_THE);
//.........这里部分代码省略.........
示例13: GetDirectory
bool CDirectory::GetDirectory(const CStdString& strPath, CFileItemList &items, CStdString strMask /*=""*/, bool bUseFileDirectories /* = true */, bool allowPrompting /* = false */, DIR_CACHE_TYPE cacheDirectory /* = DIR_CACHE_NEVER */, bool extFileInfo /* = true */)
{
try
{
auto_ptr<IDirectory> pDirectory(CFactoryDirectory::Create(strPath));
if (!pDirectory.get())
return false;
// check our cache for this path
if (g_directoryCache.GetDirectory(strPath, items, cacheDirectory == DIR_CACHE_ALWAYS))
items.m_strPath = strPath;
else
{
// need to clear the cache (in case the directory fetch fails)
// and (re)fetch the folder
if (cacheDirectory != DIR_CACHE_NEVER)
g_directoryCache.ClearDirectory(strPath);
pDirectory->SetAllowPrompting(allowPrompting);
pDirectory->SetCacheDirectory(cacheDirectory);
pDirectory->SetUseFileDirectories(bUseFileDirectories);
pDirectory->SetExtFileInfo(extFileInfo);
items.m_strPath = strPath;
if (!pDirectory->GetDirectory(strPath, items))
{
CLog::Log(LOGERROR, "%s - Error getting %s", __FUNCTION__, strPath.c_str());
return false;
}
// cache the directory, if necessary
if (cacheDirectory != DIR_CACHE_NEVER)
g_directoryCache.SetDirectory(strPath, items, pDirectory->GetCacheType(strPath));
}
// now filter for allowed files
pDirectory->SetMask(strMask);
for (int i = 0; i < items.Size(); ++i)
{
CFileItemPtr item = items[i];
if ((!item->m_bIsFolder && !pDirectory->IsAllowed(item->m_strPath)) ||
(item->GetPropertyBOOL("file:hidden") && !g_guiSettings.GetBool("filelists.showhidden")))
{
items.Remove(i);
i--; // don't confuse loop
}
}
// Should any of the files we read be treated as a directory?
// Disable for database folders, as they already contain the extracted items
if (bUseFileDirectories && !items.IsMusicDb() && !items.IsVideoDb() && !items.IsSmartPlayList())
{
for (int i=0; i< items.Size(); ++i)
{
CFileItemPtr pItem=items[i];
if ((!pItem->m_bIsFolder) && (!pItem->IsInternetStream()))
{
auto_ptr<IFileDirectory> pDirectory(CFactoryFileDirectory::Create(pItem->m_strPath,pItem.get(),strMask));
if (pDirectory.get())
pItem->m_bIsFolder = true;
else
if (pItem->m_bIsFolder)
{
items.Remove(i);
i--; // don't confuse loop
}
}
}
}
return true;
}
#ifndef _LINUX
catch (const win32_exception &e)
{
e.writelog(__FUNCTION__);
}
#endif
catch (...)
{
CLog::Log(LOGERROR, "%s - Unhandled exception", __FUNCTION__);
}
CLog::Log(LOGERROR, "%s - Error getting %s", __FUNCTION__, strPath.c_str());
return false;
}
示例14: GetDirectory
bool CGUIWindowVideoNav::GetDirectory(const CStdString &strDirectory, CFileItemList &items)
{
if (m_bDisplayEmptyDatabaseMessage)
return true;
CFileItem directory(strDirectory, true);
if (m_thumbLoader.IsLoading())
m_thumbLoader.StopThread();
m_rootDir.SetCacheDirectory(DIR_CACHE_NEVER);
items.ClearProperties();
bool bResult = CGUIWindowVideoBase::GetDirectory(strDirectory, items);
if (bResult)
{
if (items.IsVideoDb())
{
XFILE::CVideoDatabaseDirectory dir;
CQueryParams params;
dir.GetQueryParams(items.m_strPath,params);
VIDEODATABASEDIRECTORY::NODE_TYPE node = dir.GetDirectoryChildType(items.m_strPath);
items.SetThumbnailImage("");
if (node == VIDEODATABASEDIRECTORY::NODE_TYPE_EPISODES ||
node == NODE_TYPE_SEASONS ||
node == NODE_TYPE_RECENTLY_ADDED_EPISODES)
{
CLog::Log(LOGDEBUG, "WindowVideoNav::GetDirectory");
// grab the show thumb
CFileItem showItem;
m_database.GetFilePathById(params.GetTvShowId(),showItem.m_strPath,VIDEODB_CONTENT_TVSHOWS);
showItem.SetVideoThumb();
items.SetProperty("tvshowthumb", showItem.GetThumbnailImage());
// Grab fanart data
CVideoInfoTag details;
m_database.GetTvShowInfo(showItem.m_strPath, details, params.GetTvShowId());
items.SetProperty("fanart_color1", details.m_fanart.GetColor(0));
items.SetProperty("fanart_color2", details.m_fanart.GetColor(1));
items.SetProperty("fanart_color3", details.m_fanart.GetColor(2));
if (showItem.CacheLocalFanart())
items.SetProperty("fanart_image", showItem.GetCachedFanart());
// save the show description (showplot)
items.SetProperty("showplot", details.m_strPlot);
// set the season thumb
CStdString strLabel;
if (params.GetSeason() == 0)
strLabel = g_localizeStrings.Get(20381);
else
strLabel.Format(g_localizeStrings.Get(20358), params.GetSeason());
CFileItem item(strLabel);
CUtil::GetParentPath(items.m_strPath,item.m_strPath);
item.m_bIsFolder = true;
item.SetCachedSeasonThumb();
if (item.HasThumbnail())
items.SetProperty("seasonthumb",item.GetThumbnailImage());
// the container folder thumb is the parent (i.e. season or show)
if (node == NODE_TYPE_EPISODES || node == NODE_TYPE_RECENTLY_ADDED_EPISODES)
{
items.SetContent("episodes");
// grab the season thumb as the folder thumb
CStdString strLabel;
CStdString strPath;
if (params.GetSeason() == -1 && items.Size() > 0)
{
CQueryParams params2;
dir.GetQueryParams(items[0]->m_strPath,params2);
strLabel.Format(g_localizeStrings.Get(20358), params2.GetSeason());
CUtil::GetParentPath(items.m_strPath,strPath);
}
else
{
if (params.GetSeason() == 0)
strLabel = g_localizeStrings.Get(20381);
else
strLabel.Format(g_localizeStrings.Get(20358), params.GetSeason());
strPath = items.m_strPath;
}
CFileItem item(strLabel);
item.m_strPath = strPath;
item.m_bIsFolder = true;
item.GetVideoInfoTag()->m_strPath = showItem.m_strPath;
item.SetCachedSeasonThumb();
items.SetThumbnailImage(item.GetThumbnailImage());
items.SetProperty("seasonthumb",item.GetThumbnailImage());
}
else
{
items.SetContent("seasons");
items.SetThumbnailImage(showItem.GetThumbnailImage());
}
}
else if (node == NODE_TYPE_TITLE_MOVIES ||
node == NODE_TYPE_RECENTLY_ADDED_MOVIES)
//.........这里部分代码省略.........
示例15: GetDirectory
bool CDirectory::GetDirectory(const CStdString& strPath, CFileItemList &items, CStdString strMask /*=""*/, bool bUseFileDirectories /* = true */, bool allowPrompting /* = false */, DIR_CACHE_TYPE cacheDirectory /* = DIR_CACHE_ONCE */, bool extFileInfo /* = true */, bool allowThreads /* = false */, bool getHidden /* = false */)
{
try
{
CStdString realPath = URIUtils::SubstitutePath(strPath);
boost::shared_ptr<IDirectory> pDirectory(CFactoryDirectory::Create(realPath));
if (!pDirectory.get())
return false;
// check our cache for this path
if (g_directoryCache.GetDirectory(strPath, items, cacheDirectory == DIR_CACHE_ALWAYS))
items.SetPath(strPath);
else
{
// need to clear the cache (in case the directory fetch fails)
// and (re)fetch the folder
if (cacheDirectory != DIR_CACHE_NEVER)
g_directoryCache.ClearDirectory(strPath);
pDirectory->SetAllowPrompting(allowPrompting);
pDirectory->SetCacheDirectory(cacheDirectory);
pDirectory->SetUseFileDirectories(bUseFileDirectories);
pDirectory->SetExtFileInfo(extFileInfo);
bool result = false, cancel = false;
while (!result && !cancel)
{
if (g_application.IsCurrentThread() && allowThreads && !URIUtils::IsSpecial(strPath))
{
CSingleExit ex(g_graphicsContext);
CGetDirectory get(pDirectory, realPath);
if(!get.Wait(TIME_TO_BUSY_DIALOG))
{
CGUIDialogBusy* dialog = (CGUIDialogBusy*)g_windowManager.GetWindow(WINDOW_DIALOG_BUSY);
dialog->Show();
while(!get.Wait(10))
{
CSingleLock lock(g_graphicsContext);
if(dialog->IsCanceled())
{
cancel = true;
break;
}
g_windowManager.ProcessRenderLoop(false);
}
if(dialog)
dialog->Close();
}
result = get.GetDirectory(items);
}
else
{
items.SetPath(strPath);
result = pDirectory->GetDirectory(realPath, items);
}
if (!result)
{
if (!cancel && g_application.IsCurrentThread() && pDirectory->ProcessRequirements())
continue;
CLog::Log(LOGERROR, "%s - Error getting %s", __FUNCTION__, strPath.c_str());
return false;
}
}
// cache the directory, if necessary
if (cacheDirectory != DIR_CACHE_NEVER)
g_directoryCache.SetDirectory(strPath, items, pDirectory->GetCacheType(strPath));
}
// now filter for allowed files
pDirectory->SetMask(strMask);
for (int i = 0; i < items.Size(); ++i)
{
CFileItemPtr item = items[i];
// TODO: we shouldn't be checking the gui setting here;
// callers should use getHidden instead
if ((!item->m_bIsFolder && !pDirectory->IsAllowed(item->GetPath())) ||
(item->GetPropertyBOOL("file:hidden") && !getHidden && !g_guiSettings.GetBool("filelists.showhidden")))
{
items.Remove(i);
i--; // don't confuse loop
}
}
// Should any of the files we read be treated as a directory?
// Disable for database folders, as they already contain the extracted items
if (bUseFileDirectories && !items.IsMusicDb() && !items.IsVideoDb() && !items.IsSmartPlayList())
FilterFileDirectories(items, strMask);
return true;
}
#ifndef _LINUX
catch (const win32_exception &e)
{
e.writelog(__FUNCTION__);
}
//.........这里部分代码省略.........