bool CAddonMgr::GetAddons(const TYPE &type, VECADDONS &addons, bool enabled /* = true */, bool bGetDisabledPVRAddons /* = true */) { CStdString xbmcPath = CSpecialProtocol::TranslatePath("special://xbmc/addons"); CSingleLock lock(m_critSection); addons.clear(); cp_status_t status; int num; CStdString ext_point(TranslateType(type)); cp_extension_t **exts = m_cpluff->get_extensions_info(m_cp_context, ext_point.c_str(), &status, &num); for(int i=0; i <num; i++) { const cp_extension_t *props = exts[i]; bool bIsPVRAddon(TranslateType(props->ext_point_id) == ADDON_PVRDLL); if (((bGetDisabledPVRAddons && bIsPVRAddon) || m_database.IsAddonDisabled(props->plugin->identifier) != enabled)) { if (bIsPVRAddon && g_PVRManager.IsStarted()) { AddonPtr pvrAddon; if (g_PVRClients->GetClient(props->plugin->identifier, pvrAddon)) { addons.push_back(pvrAddon); continue; } } AddonPtr addon(Factory(props)); if (addon) addons.push_back(addon); } } m_cpluff->release_info(m_cp_context, exts); return addons.size() > 0; }
bool CAddonMgr::GetAddons(const TYPE &type, VECADDONS &addons, bool enabled /* = true */) { CSingleLock lock(m_critSection); addons.clear(); cp_status_t status; int num; CStdString ext_point(TranslateType(type)); cp_extension_t **exts = m_cpluff->get_extensions_info(m_cp_context, ext_point.c_str(), &status, &num); for(int i=0; i <num; i++) { const cp_extension_t *props = exts[i]; if (m_database.IsAddonDisabled(props->plugin->identifier) != enabled) { // get a pointer to a running pvrclient if it's already started, or we won't be able to change settings if (TranslateType(props->ext_point_id) == ADDON_PVRDLL && enabled && g_PVRManager.IsStarted()) { AddonPtr pvrAddon; if (g_PVRClients->GetClient(props->plugin->identifier, pvrAddon)) { addons.push_back(pvrAddon); continue; } } AddonPtr addon(Factory(props)); if (addon) addons.push_back(addon); } } m_cpluff->release_info(m_cp_context, exts); return addons.size() > 0; }
bool CAddonMgr::GetAddons(const TYPE &type, VECADDONS &addons, bool enabled /* = true */) { CSingleLock lock(m_critSection); addons.clear(); if (!m_cp_context) return false; cp_status_t status; int num; std::string ext_point(TranslateType(type)); cp_extension_t **exts = m_cpluff->get_extensions_info(m_cp_context, ext_point.c_str(), &status, &num); for(int i=0; i <num; i++) { const cp_extension_t *props = exts[i]; if (IsAddonDisabled(props->plugin->identifier) != enabled) { AddonPtr addon(Factory(props)); if (addon) { if (enabled) { // if the addon has a running instance, grab that AddonPtr runningAddon = addon->GetRunningInstance(); if (runningAddon) addon = runningAddon; } addons.push_back(addon); } } } m_cpluff->release_info(m_cp_context, exts); return addons.size() > 0; }
std::set<std::string> CGameUtils::GetGameExtensions() { using namespace ADDON; std::set<std::string> extensions; VECADDONS gameClients; CBinaryAddonCache& addonCache = CServiceBroker::GetBinaryAddonCache(); addonCache.GetAddons(gameClients, ADDON_GAMEDLL); for (auto& gameClient : gameClients) { GameClientPtr gc(std::static_pointer_cast<CGameClient>(gameClient)); extensions.insert(gc->GetExtensions().begin(), gc->GetExtensions().end()); } // Check remote add-ons gameClients.clear(); if (CServiceBroker::GetAddonMgr().GetInstallableAddons(gameClients, ADDON_GAMEDLL)) { for (auto& gameClient : gameClients) { GameClientPtr gc(std::static_pointer_cast<CGameClient>(gameClient)); extensions.insert(gc->GetExtensions().begin(), gc->GetExtensions().end()); } } return extensions; }
bool CAddonMgr::GetAddons(const TYPE &type, VECADDONS &addons, bool enabled /* = true */) { CSingleLock lock(m_critSection); addons.clear(); cp_status_t status; int num; CStdString ext_point(TranslateType(type)); cp_extension_t **exts = m_cpluff->get_extensions_info(m_cp_context, ext_point.c_str(), &status, &num); for(int i=0; i <num; i++) { AddonPtr addon(Factory(exts[i])); if (addon && m_database.IsAddonDisabled(addon->ID()) != enabled) addons.push_back(addon); } m_cpluff->release_info(m_cp_context, exts); return addons.size() > 0; }
bool CGameUtils::HasGameExtension(const std::string &path) { using namespace ADDON; // Get filename from CURL so that top-level zip directories will become // normal paths: // // zip://%2Fpath_to_zip_file.zip/ -> /path_to_zip_file.zip // std::string filename = CURL(path).GetFileNameWithoutPath(); // Get the file extension std::string extension = URIUtils::GetExtension(filename); if (extension.empty()) return false; StringUtils::ToLower(extension); // Look for a game client that supports this extension VECADDONS gameClients; CBinaryAddonCache& addonCache = CServiceBroker::GetBinaryAddonCache(); addonCache.GetAddons(gameClients, ADDON_GAMEDLL); for (auto& gameClient : gameClients) { GameClientPtr gc(std::static_pointer_cast<CGameClient>(gameClient)); if (gc->IsExtensionValid(extension)) return true; } // Check remote add-ons gameClients.clear(); if (CServiceBroker::GetAddonMgr().GetInstallableAddons(gameClients, ADDON_GAMEDLL)) { for (auto& gameClient : gameClients) { GameClientPtr gc(std::static_pointer_cast<CGameClient>(gameClient)); if (gc->IsExtensionValid(extension)) return true; } } return false; }
bool CAddonsDirectory::GetScriptsAndPlugins(const CStdString &content, CFileItemList &items) { items.Clear(); CPluginSource::Content type = CPluginSource::Translate(content); if (type == CPluginSource::UNKNOWN) return false; VECADDONS addons; CAddonMgr::Get().GetAddons(ADDON_PLUGIN, addons); for (unsigned i=0; i<addons.size(); i++) { PluginPtr plugin = boost::dynamic_pointer_cast<CPluginSource>(addons[i]); if (!plugin || !plugin->Provides(type)) continue; items.Add(FileItemFromAddon(addons[i], "plugin://", true)); } addons.clear(); CAddonMgr::Get().GetAddons(ADDON_SCRIPT, addons); for (unsigned i=0; i<addons.size(); i++) { PluginPtr plugin = boost::dynamic_pointer_cast<CPluginSource>(addons[i]); if (!plugin || !plugin->Provides(type)) continue; items.Add(FileItemFromAddon(addons[i], "script://", false)); } CFileItemPtr item(new CFileItem("addons://more/"+content,false)); item->SetLabelPreformated(true); item->SetLabel(g_localizeStrings.Get(21452)); item->SetIconImage("DefaultAddon.png"); item->SetSpecialSort(SORT_ON_BOTTOM); items.Add(item); items.SetContent("addons"); return items.Size() > 0; }
bool CAddonMgr::GetAddons(const TYPE &type, VECADDONS &addons, bool enabled /* = true */) { CStdString xbmcPath = _P("special://xbmc/addons"); CSingleLock lock(m_critSection); addons.clear(); cp_status_t status; int num; CStdString ext_point(TranslateType(type)); cp_extension_t **exts = m_cpluff->get_extensions_info(m_cp_context, ext_point.c_str(), &status, &num); for(int i=0; i <num; i++) { AddonPtr addon(Factory(exts[i])); if (addon && addon->Type() == ADDON_PVRDLL && addon->Path().Left(xbmcPath.size()).Equals(xbmcPath)) { if (m_database.IsSystemPVRAddonEnabled(addon->ID()) != enabled) addon->Disable(); } if (addon && m_database.IsAddonDisabled(addon->ID()) != enabled) addons.push_back(addon); } m_cpluff->release_info(m_cp_context, exts); return addons.size() > 0; }
bool CAddonsDirectory::GetScriptsAndPlugins(const CStdString &content, VECADDONS &addons) { CPluginSource::Content type = CPluginSource::Translate(content); if (type == CPluginSource::UNKNOWN) return false; VECADDONS tempAddons; CAddonMgr::Get().GetAddons(ADDON_PLUGIN, tempAddons); for (unsigned i=0; i<tempAddons.size(); i++) { PluginPtr plugin = boost::dynamic_pointer_cast<CPluginSource>(tempAddons[i]); if (plugin && plugin->Provides(type)) addons.push_back(tempAddons[i]); } tempAddons.clear(); CAddonMgr::Get().GetAddons(ADDON_SCRIPT, tempAddons); for (unsigned i=0; i<tempAddons.size(); i++) { PluginPtr plugin = boost::dynamic_pointer_cast<CPluginSource>(tempAddons[i]); if (plugin && plugin->Provides(type)) addons.push_back(tempAddons[i]); } return true; }