本文整理汇总了C++中CFileItemList::GetObjectCount方法的典型用法代码示例。如果您正苦于以下问题:C++ CFileItemList::GetObjectCount方法的具体用法?C++ CFileItemList::GetObjectCount怎么用?C++ CFileItemList::GetObjectCount使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类CFileItemList
的用法示例。
在下文中一共展示了CFileItemList::GetObjectCount方法的11个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: GetFilteredItems
bool CGUIWindowPVRRecordings::GetFilteredItems(const std::string &filter, CFileItemList &items)
{
bool listchanged = CGUIWindowPVRBase::GetFilteredItems(filter, items);
int watchMode = CMediaSettings::GetInstance().GetWatchedMode("recordings");
CFileItemPtr item;
for (int i = 0; i < items.Size(); i++)
{
item = items.Get(i);
if (item->IsParentFolder()) // Don't delete the go to parent folder
continue;
if (!item->HasPVRRecordingInfoTag())
continue;
int iPlayCount = item->GetPVRRecordingInfoTag()->GetPlayCount();
if ((watchMode == WatchedModeWatched && iPlayCount == 0) ||
(watchMode == WatchedModeUnwatched && iPlayCount > 0))
{
items.Remove(i);
i--;
listchanged = true;
}
}
// Remove the parent folder item, if it's the only item in the folder.
if (items.GetObjectCount() == 0 && items.GetFileCount() > 0 && items.Get(0)->IsParentFolder())
items.Remove(0);
return listchanged;
}
示例2: AddQueuingFolder
// Add an "* All ..." folder to the CFileItemList
// depending on the child node
void CDirectoryNode::AddQueuingFolder(CFileItemList& items) const
{
CFileItemPtr pItem;
// always hide "all" items
if (g_advancedSettings.m_bVideoLibraryHideAllItems)
return;
// no need for "all" item when only one item
if (items.GetObjectCount() <= 1)
return;
// hack - as the season node might return episodes
auto_ptr<CDirectoryNode> pNode(ParseURL(items.GetPath()));
switch (pNode->GetChildType())
{
case NODE_TYPE_SEASONS:
{
CStdString strLabel = g_localizeStrings.Get(20366);
pItem.reset(new CFileItem(strLabel)); // "All Seasons"
pItem->SetPath(BuildPath() + "-1/");
// set the number of watched and unwatched items accordingly
int watched = 0;
int unwatched = 0;
for (int i = 0; i < items.Size(); i++)
{
CFileItemPtr item = items[i];
watched += (int)item->GetProperty("watchedepisodes").asInteger();
unwatched += (int)item->GetProperty("unwatchedepisodes").asInteger();
}
pItem->SetProperty("totalepisodes", watched + unwatched);
pItem->SetProperty("numepisodes", watched + unwatched); // will be changed later to reflect watchmode setting
pItem->SetProperty("watchedepisodes", watched);
pItem->SetProperty("unwatchedepisodes", unwatched);
if (items.Size() && items[0]->GetVideoInfoTag())
{
*pItem->GetVideoInfoTag() = *items[0]->GetVideoInfoTag();
pItem->GetVideoInfoTag()->m_iSeason = -1;
}
pItem->GetVideoInfoTag()->m_strTitle = strLabel;
pItem->GetVideoInfoTag()->m_iEpisode = watched + unwatched;
pItem->GetVideoInfoTag()->m_playCount = (unwatched == 0) ? 1 : 0;
if (XFILE::CFile::Exists(pItem->GetCachedSeasonThumb()))
pItem->SetThumbnailImage(pItem->GetCachedSeasonThumb());
}
break;
default:
break;
}
if (pItem)
{
pItem->m_bIsFolder = true;
pItem->SetSpecialSort(g_advancedSettings.m_bVideoLibraryAllItemsOnBottom ? SORT_ON_BOTTOM : SORT_ON_TOP);
pItem->SetCanQueue(false);
items.Add(pItem);
}
}
示例3: GetContent
bool CDirectoryNodeSeasons::GetContent(CFileItemList& items) const
{
CVideoDatabase videodatabase;
if (!videodatabase.Open())
return false;
CQueryParams params;
CollectQueryParams(params);
int iFlatten = CSettings::Get().GetInt("videolibrary.flattentvshows");
bool bSuccess=videodatabase.GetSeasonsNav(BuildPath(), items, params.GetActorId(), params.GetDirectorId(), params.GetGenreId(), params.GetYear(), params.GetTvShowId());
bool bFlatten = (items.GetObjectCount() == 1 && iFlatten == 1) || iFlatten == 2;
if (items.GetObjectCount() == 2 && iFlatten == 1)
if (items[0]->GetVideoInfoTag()->m_iSeason == 0 || items[1]->GetVideoInfoTag()->m_iSeason == 0)
bFlatten = true; // flatten if one season + specials
if (iFlatten > 0 && !bFlatten && CMediaSettings::Get().GetWatchedMode("tvshows") == WatchedModeUnwatched)
{
int count = 0;
for(int i = 0; i < items.Size(); i++)
{
if (items[i]->GetProperty("unwatchedepisodes").asInteger() != 0 && items[i]->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(BuildPath()))
return false;
videoUrl.AppendPath("-2/");
bSuccess=videodatabase.GetEpisodesNav(videoUrl.ToString(), items, params.GetGenreId(), params.GetYear(), params.GetActorId(), params.GetDirectorId(), params.GetTvShowId());
items.SetPath(videoUrl.ToString());
}
videodatabase.Close();
return bSuccess;
}
示例4: GetContent
bool CDirectoryNodeSeasons::GetContent(CFileItemList& items)
{
CVideoDatabase videodatabase;
if (!videodatabase.Open())
return false;
CQueryParams params;
CollectQueryParams(params);
int iFlatten = g_guiSettings.GetInt("videolibrary.flattentvshows");
bool bSuccess=videodatabase.GetSeasonsNav(BuildPath(), items, params.GetActorId(), params.GetDirectorId(), params.GetGenreId(), params.GetYear(), params.GetTvShowId());
bool bFlatten = (items.GetObjectCount() == 1 && iFlatten == 1) || iFlatten == 2;
if (items.GetObjectCount() == 2 && iFlatten == 1)
if (items[0]->GetVideoInfoTag()->m_iSeason == 0 || items[1]->GetVideoInfoTag()->m_iSeason == 0)
bFlatten = true; // flatten if one season + specials
if (!bFlatten && g_settings.GetWatchMode("tvshows") == VIDEO_SHOW_UNWATCHED)
{
int count = 0;
for(int i = 0; i < items.Size(); i++)
{
if (items[i]->GetPropertyInt("unwatchedepisodes") != 0 && items[i]->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();
bSuccess=videodatabase.GetEpisodesNav(BuildPath()+"-1/",items,params.GetGenreId(),params.GetYear(),params.GetActorId(),params.GetDirectorId(),params.GetTvShowId());
items.m_strPath = BuildPath()+"-1/";
}
videodatabase.Close();
return bSuccess;
}
示例5: GetFilteredItems
bool CGUIMediaWindow::GetFilteredItems(const CStdString &filter, CFileItemList &items)
{
CStdString trimmedFilter(filter);
trimmedFilter.TrimLeft().ToLower();
if (trimmedFilter.IsEmpty())
return true;
CFileItemList filteredItems;
bool numericMatch = StringUtils::IsNaturalNumber(trimmedFilter);
for (int i = 0; i < items.Size(); i++)
{
CFileItemPtr item = items.Get(i);
if (item->IsParentFolder())
{
filteredItems.Add(item);
continue;
}
// TODO: Need to update this to get all labels, ideally out of the displayed info (ie from m_layout and m_focusedLayout)
// though that isn't practical. Perhaps a better idea would be to just grab the info that we should filter on based on
// where we are in the library tree.
// Another idea is tying the filter string to the current level of the tree, so that going deeper disables the filter,
// but it's re-enabled on the way back out.
CStdString match;
/* if (item->GetFocusedLayout())
match = item->GetFocusedLayout()->GetAllText();
else if (item->GetLayout())
match = item->GetLayout()->GetAllText();
else*/
match = item->GetLabel(); // Filter label only for now
if (numericMatch)
StringUtils::WordToDigits(match);
size_t pos = StringUtils::FindWords(match.c_str(), trimmedFilter.c_str());
if (pos != CStdString::npos)
filteredItems.Add(item);
}
items.ClearItems();
items.Append(filteredItems);
return (items.GetObjectCount() > 0);
}
示例6: GetContent
bool CDirectoryNodeSeasons::GetContent(CFileItemList& items)
{
CVideoDatabase videodatabase;
if (!videodatabase.Open())
return false;
CQueryParams params;
CollectQueryParams(params);
int iFlatten = g_guiSettings.GetInt("videolibrary.flattentvshows");
bool bSuccess=videodatabase.GetSeasonsNav(BuildPath(), items, params.GetActorId(), params.GetDirectorId(), params.GetGenreId(), params.GetYear(), params.GetTvShowId());
if ((items.GetObjectCount() == 1 && iFlatten == 1) || iFlatten == 2)
{ // flatten if one season or flatten always
items.Clear();
bSuccess=videodatabase.GetEpisodesNav(BuildPath()+"-1/",items,params.GetGenreId(),params.GetYear(),params.GetActorId(),params.GetDirectorId(),params.GetTvShowId());
items.m_strPath = BuildPath()+"-1/";
}
videodatabase.Close();
return bSuccess;
}
示例7: OnFilterItems
void CGUIMediaWindow::OnFilterItems(const CStdString &filter)
{
CStdString currentItem;
int item = m_viewControl.GetSelectedItem();
if (item >= 0)
currentItem = m_vecItems->Get(item)->GetPath();
m_viewControl.Clear();
CFileItemList items;
GetFilteredItems(filter, items);
if (filter.IsEmpty() || items.GetObjectCount() > 0)
{
m_vecItems->ClearItems();
m_vecItems->Append(items);
SetProperty("filter", filter);
}
// and update our view control + buttons
m_viewControl.SetItems(*m_vecItems);
m_viewControl.SetSelectedItem(currentItem);
UpdateButtons();
}
示例8: 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;
//.........这里部分代码省略.........
示例9: 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;
}
示例10: AddQueuingFolder
// Add an "* All ..." folder to the CFileItemList
// depending on the child node
void CDirectoryNode::AddQueuingFolder(CFileItemList& items) const
{
CFileItemPtr pItem;
CMusicDbUrl musicUrl;
if (!musicUrl.FromString(BuildPath()))
return;
// always hide "all" items
if (g_advancedSettings.m_bMusicLibraryHideAllItems)
return;
// no need for "all" item when only one item
if (items.GetObjectCount() <= 1)
return;
switch (GetChildType())
{
// Have no queuing folder
case NODE_TYPE_ROOT:
case NODE_TYPE_OVERVIEW:
case NODE_TYPE_TOP100:
break;
/* no need for all genres
case NODE_TYPE_GENRE:
pItem.reset(new CFileItem(g_localizeStrings.Get(15105))); // "All Genres"
musicUrl.AppendPath("-1/");
pItem->SetPath(musicUrl.ToString());
break;
*/
case NODE_TYPE_ARTIST:
if (GetType() == NODE_TYPE_OVERVIEW) return;
pItem.reset(new CFileItem(g_localizeStrings.Get(15103))); // "All Artists"
musicUrl.AppendPath("-1/");
pItem->SetPath(musicUrl.ToString());
break;
// All album related nodes
case NODE_TYPE_ALBUM:
if (GetType() == NODE_TYPE_OVERVIEW) return;
case NODE_TYPE_ALBUM_RECENTLY_PLAYED:
case NODE_TYPE_ALBUM_RECENTLY_ADDED:
case NODE_TYPE_ALBUM_COMPILATIONS:
case NODE_TYPE_ALBUM_TOP100:
case NODE_TYPE_YEAR_ALBUM:
pItem.reset(new CFileItem(g_localizeStrings.Get(15102))); // "All Albums"
musicUrl.AppendPath("-1/");
pItem->SetPath(musicUrl.ToString());
break;
// All song related nodes
/* case NODE_TYPE_ALBUM_RECENTLY_PLAYED_SONGS:
case NODE_TYPE_ALBUM_RECENTLY_ADDED_SONGS:
case NODE_TYPE_ALBUM_COMPILATIONS_SONGS:
case NODE_TYPE_ALBUM_TOP100_SONGS:
case NODE_TYPE_SONG_TOP100:
case NODE_TYPE_SONG:
pItem = new CFileItem(g_localizeStrings.Get(15104)); // "All Songs"
musicUrl.AppendPath("-1/");
pItem->SetPath(musicUrl.ToString());
break;*/
default:
break;
}
if (pItem)
{
pItem->m_bIsFolder = true;
pItem->SetSpecialSort(g_advancedSettings.m_bMusicLibraryAllItemsOnBottom ? SortSpecialOnBottom : SortSpecialOnTop);
pItem->SetCanQueue(false);
pItem->SetLabelPreformated(true);
if (g_advancedSettings.m_bMusicLibraryAllItemsOnBottom)
items.Add(pItem);
else
items.AddFront(pItem, (items.Size() > 0 && items[0]->IsParentFolder()) ? 1 : 0);
}
}
示例11: AddQueuingFolder
// Add an "* All ..." folder to the CFileItemList
// depending on the child node
void CDirectoryNode::AddQueuingFolder(CFileItemList& items) const
{
CFileItemPtr pItem;
// always show "all" items by default
if (!CSettings::Get().GetBool(CSettings::SETTING_VIDEOLIBRARY_SHOWALLITEMS))
return;
// no need for "all" item when only one item
if (items.GetObjectCount() <= 1)
return;
CVideoDbUrl videoUrl;
if (!videoUrl.FromString(BuildPath()))
return;
// hack - as the season node might return episodes
unique_ptr<CDirectoryNode> pNode(ParseURL(items.GetPath()));
switch (pNode->GetChildType())
{
case NODE_TYPE_SEASONS:
{
std::string strLabel = g_localizeStrings.Get(20366);
pItem.reset(new CFileItem(strLabel)); // "All Seasons"
videoUrl.AppendPath("-1/");
pItem->SetPath(videoUrl.ToString());
// set the number of watched and unwatched items accordingly
int watched = 0;
int unwatched = 0;
for (int i = 0; i < items.Size(); i++)
{
CFileItemPtr item = items[i];
watched += (int)item->GetProperty("watchedepisodes").asInteger();
unwatched += (int)item->GetProperty("unwatchedepisodes").asInteger();
}
pItem->SetProperty("totalepisodes", watched + unwatched);
pItem->SetProperty("numepisodes", watched + unwatched); // will be changed later to reflect watchmode setting
pItem->SetProperty("watchedepisodes", watched);
pItem->SetProperty("unwatchedepisodes", unwatched);
if (items.Size() && items[0]->GetVideoInfoTag())
{
*pItem->GetVideoInfoTag() = *items[0]->GetVideoInfoTag();
pItem->GetVideoInfoTag()->m_iSeason = -1;
}
pItem->GetVideoInfoTag()->m_strTitle = strLabel;
pItem->GetVideoInfoTag()->m_iEpisode = watched + unwatched;
pItem->GetVideoInfoTag()->m_playCount = (unwatched == 0) ? 1 : 0;
CVideoDatabase db;
if (db.Open())
{
pItem->GetVideoInfoTag()->m_iDbId = db.GetSeasonId(pItem->GetVideoInfoTag()->m_iIdShow, -1);
db.Close();
}
pItem->GetVideoInfoTag()->m_type = MediaTypeSeason;
}
break;
case NODE_TYPE_MUSICVIDEOS_ALBUM:
pItem.reset(new CFileItem(g_localizeStrings.Get(15102))); // "All Albums"
videoUrl.AppendPath("-1/");
pItem->SetPath(videoUrl.ToString());
break;
default:
break;
}
if (pItem)
{
pItem->m_bIsFolder = true;
pItem->SetSpecialSort(g_advancedSettings.m_bVideoLibraryAllItemsOnBottom ? SortSpecialOnBottom : SortSpecialOnTop);
pItem->SetCanQueue(false);
items.Add(pItem);
}
}