void CAddonsDirectory::GenerateListing(CURL &path, VECADDONS& addons, CFileItemList &items, bool reposAsFolders) { items.ClearItems(); for (unsigned i=0; i < addons.size(); i++) { AddonPtr addon = addons[i]; CFileItemPtr pItem; if (reposAsFolders && addon->Type() == ADDON_REPOSITORY) pItem = FileItemFromAddon(addon, "addons://", true); else pItem = FileItemFromAddon(addon, path.Get(), false); AddonPtr addon2; if (CAddonMgr::Get().GetAddon(addon->ID(),addon2)) pItem->SetProperty("Addon.Status",g_localizeStrings.Get(305)); else if (CAddonMgr::Get().IsAddonDisabled(addon->ID())) pItem->SetProperty("Addon.Status",g_localizeStrings.Get(24023)); if (addon->Props().broken == "DEPSNOTMET") pItem->SetProperty("Addon.Status",g_localizeStrings.Get(24049)); else if (!addon->Props().broken.empty()) pItem->SetProperty("Addon.Status",g_localizeStrings.Get(24098)); if (addon2 && addon2->Version() < addon->Version()) { pItem->SetProperty("Addon.Status",g_localizeStrings.Get(24068)); pItem->SetProperty("Addon.UpdateAvail", true); } CAddonDatabase::SetPropertiesFromAddon(addon,pItem); items.Add(pItem); } }
void CAddonsDirectory::GenerateListing(CURL &path, VECADDONS& addons, CFileItemList &items, bool reposAsFolders) { CStdString xbmcPath = CSpecialProtocol::TranslatePath("special://xbmc/addons"); items.ClearItems(); CAddonDatabase db; db.Open(); for (unsigned i=0; i < addons.size(); i++) { AddonPtr addon = addons[i]; CFileItemPtr pItem; if (reposAsFolders && addon->Type() == ADDON_REPOSITORY) pItem = FileItemFromAddon(addon, "addons://", true); else pItem = FileItemFromAddon(addon, path.Get(), false); AddonPtr addon2; if (CAddonMgr::Get().GetAddon(addon->ID(),addon2)) pItem->SetProperty("Addon.Status",g_localizeStrings.Get(305)); else if (db.IsOpen() && db.IsAddonDisabled(addon->ID())) pItem->SetProperty("Addon.Status",g_localizeStrings.Get(24023)); if (!addon->Props().broken.IsEmpty()) pItem->SetProperty("Addon.Status",g_localizeStrings.Get(24098)); if (addon2 && addon2->Version() < addon->Version()) { pItem->SetProperty("Addon.Status",g_localizeStrings.Get(24068)); pItem->SetProperty("Addon.UpdateAvail", true); } CAddonDatabase::SetPropertiesFromAddon(addon,pItem); items.Add(pItem); } db.Close(); }
void CAddonsDirectory::GenerateListing(CURL &path, VECADDONS& addons, CFileItemList &items, bool reposAsFolders) { CStdString xbmcPath = _P("special://xbmc/addons"); items.ClearItems(); for (unsigned i=0; i < addons.size(); i++) { AddonPtr addon = addons[i]; CFileItemPtr pItem; if (reposAsFolders && addon->Type() == ADDON_REPOSITORY) pItem = FileItemFromAddon(addon, "addons://", true); else pItem = FileItemFromAddon(addon, path.Get(), false); AddonPtr addon2; if (CAddonMgr::Get().GetAddon(addon->ID(),addon2)) pItem->SetProperty("Addon.Status",g_localizeStrings.Get(305)); else if ((addon->Type() == ADDON_PVRDLL) && (CStdString(pItem->GetProperty("Addon.Path").asString()).Left(xbmcPath.size()).Equals(xbmcPath))) pItem->SetProperty("Addon.Status",g_localizeStrings.Get(24023)); if (!addon->Props().broken.IsEmpty()) pItem->SetProperty("Addon.Status",g_localizeStrings.Get(24098)); if (addon2 && addon2->Version() < addon->Version()) { pItem->SetProperty("Addon.Status",g_localizeStrings.Get(24068)); pItem->SetProperty("Addon.UpdateAvail", true); } CAddonDatabase::SetPropertiesFromAddon(addon,pItem); items.Add(pItem); } }
bool CGUIWindowEventLog::GetDirectory(const std::string &strDirectory, CFileItemList &items) { bool result = CGUIMediaWindow::GetDirectory(strDirectory, items); EventLevel currentLevel = CViewStateSettings::GetInstance().GetEventLevel(); bool showHigherLevels = CViewStateSettings::GetInstance().ShowHigherEventLevels(); CFileItemList filteredItems(items.GetPath()); for (int i = 0; i < items.Size(); i++) { CFileItemPtr item = items.Get(i); if (item->IsParentFolder()) { filteredItems.Add(item); continue; } if (!item->HasProperty(PROPERTY_EVENT_LEVEL)) continue; EventLevel level = CEventLog::GetInstance().EventLevelFromString(item->GetProperty(PROPERTY_EVENT_LEVEL).asString()); if (level == currentLevel || (level > currentLevel && showHigherLevels)) filteredItems.Add(item); } items.ClearItems(); items.Append(filteredItems); return result; }
// \brief This function will be called by Update() after the // labels of the fileitems are formatted. Override this function // to modify the fileitems. Eg. to modify the item label void CGUIMediaWindow::OnFinalizeFileItems(CFileItemList &items) { m_unfilteredItems->Append(items); CStdString filter(GetProperty("filter").asString()); if (!filter.IsEmpty()) { items.ClearItems(); GetFilteredItems(filter, items); } }
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); }
void CGUIDialogPVRGuideSearch::UpdateGroupsSpin(void) { CFileItemList groups; CGUISpinControlEx *pSpin = (CGUISpinControlEx *)GetControl(CONTROL_SPIN_GROUPS); if (!pSpin) return; /* tv groups */ g_PVRChannelGroups->GetTV()->GetGroupList(&groups); for (int iGroupPtr = 0; iGroupPtr < groups.Size(); iGroupPtr++) pSpin->AddLabel(groups[iGroupPtr]->GetLabel(), atoi(groups[iGroupPtr]->GetPath())); /* radio groups */ groups.ClearItems(); g_PVRChannelGroups->GetRadio()->GetGroupList(&groups); for (int iGroupPtr = 0; iGroupPtr < groups.Size(); iGroupPtr++) pSpin->AddLabel(groups[iGroupPtr]->GetLabel(), atoi(groups[iGroupPtr]->GetPath())); pSpin->SetValue(m_searchFilter->m_iChannelGroup); }
void CGUIWindowMusicNav::FilterItems(CFileItemList &items) { if (m_vecItems->IsVirtualDirectoryRoot()) return; items.ClearItems(); CStdString filter(m_filter); filter.TrimLeft().ToLower(); bool numericMatch = StringUtils::IsNaturalNumber(filter); for (int i = 0; i < m_unfilteredItems->Size(); i++) { CFileItemPtr item = m_unfilteredItems->Get(i); if (item->IsParentFolder() || filter.IsEmpty() || CMusicDatabaseDirectory::IsAllItem(item->m_strPath)) { items.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(); if (numericMatch) StringUtils::WordToDigits(match); size_t pos = StringUtils::FindWords(match.c_str(), filter.c_str()); if (pos != CStdString::npos) items.Add(item); } }
// \brief This function will be called by Update() after the // labels of the fileitems are formatted. Override this function // to modify the fileitems. Eg. to modify the item label void CGUIMediaWindow::OnFinalizeFileItems(CFileItemList &items) { m_unfilteredItems->Append(items); CStdString filter(GetProperty("filter")); if (!filter.IsEmpty()) { items.ClearItems(); GetFilteredItems(filter, items); } // The idea here is to ensure we have something to focus if our file list // is empty. As such, this check MUST be last and ignore the hide parent // fileitems settings. if (items.IsEmpty()) { CFileItemPtr pItem(new CFileItem("..")); pItem->m_strPath=m_history.GetParentPath(); pItem->m_bIsFolder = true; pItem->m_bIsShareOrDrive = false; items.AddFront(pItem, 0); } }