bool CBinaryAddonManager::AddAddonBaseEntry(BINARY_ADDON_LIST_ENTRY& entry) { BinaryAddonBasePtr base = std::make_shared<CBinaryAddonBase>(entry.second); if (!base->Create()) { CLog::Log(LOGERROR, "CBinaryAddonManager::%s: Failed to create base for '%s' and addon not usable", __FUNCTION__, base->ID().c_str()); return false; } m_installedAddons[base->ID()] = base; if (entry.first) m_enabledAddons[base->ID()] = base; return true; }
bool CActiveAEDSP::IsReadyAudioDSPAddon(const BinaryAddonBasePtr &addon) { CSingleLock lock(m_critSection); for (AE_DSP_ADDONMAP_CITR citr = m_addonMap.begin(); citr != m_addonMap.end(); ++citr) { if (citr->second->ID() == addon->ID()) return citr->second->ReadyToUse(); } return false; }
void CBinaryAddonManager::DisableEvent(const std::string& addonId) { CSingleLock lock(m_critSection); BinaryAddonBasePtr base; auto addon = m_installedAddons.find(addonId); if (addon != m_installedAddons.end()) base = addon->second; else return; CLog::Log(LOGDEBUG, "CBinaryAddonManager::%s: Disable addon '%s' on binary addon manager", __FUNCTION__, base->ID().c_str()); m_enabledAddons.erase(base->ID()); }
CInputStreamAddon::CInputStreamAddon(BinaryAddonBasePtr& addonBase, IVideoPlayer* player, const CFileItem& fileitem) : IAddonInstanceHandler(ADDON_INSTANCE_INPUTSTREAM, addonBase), CDVDInputStream(DVDSTREAM_TYPE_ADDON, fileitem), m_player(player) { std::string listitemprops = addonBase->Type(ADDON_INPUTSTREAM)->GetValue("@listitemprops").asString(); std::string name(addonBase->ID()); m_fileItemProps = StringUtils::Tokenize(listitemprops, "|"); for (auto &key : m_fileItemProps) { StringUtils::Trim(key); key = name + "." + key; } m_struct = {{ 0 }}; m_caps.m_mask = 0; }
bool CInputStreamAddon::Supports(BinaryAddonBasePtr& addonBase, const CFileItem &fileitem) { // check if a specific inputstream addon is requested CVariant addon = fileitem.GetProperty("inputstreamaddon"); if (!addon.isNull()) return (addon.asString() == addonBase->ID()); // check protocols std::string protocol = fileitem.GetURL().GetProtocol(); if (!protocol.empty()) { std::string protocols = addonBase->Type(ADDON_INPUTSTREAM)->GetValue("@protocols").asString(); if (!protocols.empty()) { std::vector<std::string> protocolsList = StringUtils::Tokenize(protocols, "|"); for (auto& value : protocolsList) { StringUtils::Trim(value); if (value == protocol) return true; } } } std::string filetype = fileitem.GetURL().GetFileType(); if (!filetype.empty()) { std::string extensions = addonBase->Type(ADDON_INPUTSTREAM)->GetValue("@extension").asString(); if (!extensions.empty()) { std::vector<std::string> extensionsList = StringUtils::Tokenize(extensions, "|"); for (auto& value : extensionsList) { StringUtils::Trim(value); if (value == filetype) return true; } } } return false; }
void CBinaryAddonManager::DisableEvent(const std::string& addonId) { CSingleLock lock(m_critSection); BinaryAddonBasePtr base; auto addon = m_installedAddons.find(addonId); if (addon != m_installedAddons.end()) base = addon->second; else return; CLog::Log(LOGDEBUG, "CBinaryAddonManager::%s: Disable addon '%s' on binary addon manager", __FUNCTION__, base->ID().c_str()); m_enabledAddons.erase(base->ID()); /** * @todo add way to inform type addon manager (e.g. for PVR) and parts about changed addons * * Currently only Screensaver and Visualization use the new way and not need informed. */ }