void OnDisabled(const std::string& id) { AddonPtr addon; if (CAddonMgr::GetInstance().GetAddon(id, addon, ADDON_PVRDLL, false) || CAddonMgr::GetInstance().GetAddon(id, addon, ADDON_ADSPDLL, false)) return addon->OnDisabled(); if (CAddonMgr::GetInstance().GetAddon(id, addon, ADDON_SERVICE, false)) std::static_pointer_cast<CService>(addon)->Stop(); if (CAddonMgr::GetInstance().GetAddon(id, addon, ADDON_CONTEXT_ITEM, false)) CContextMenuManager::GetInstance().Unregister(std::static_pointer_cast<CContextMenuAddon>(addon)); }
bool CAddonDatabase::DisableAddon(const std::string &addonID, bool disable /* = true */) { try { if (NULL == m_pDB.get()) return false; if (NULL == m_pDS.get()) return false; if (disable) { if (!IsAddonDisabled(addonID)) // Enabled { std::string sql = PrepareSQL("insert into disabled(id, addonID) values(NULL, '%s')", addonID.c_str()); m_pDS->exec(sql); // If the addon is a special, call the disabled handler AddonPtr addon; if ((CAddonMgr::Get().GetAddon(addonID, addon, ADDON_SERVICE, false) || CAddonMgr::Get().GetAddon(addonID, addon, ADDON_PVRDLL, false) || CAddonMgr::Get().GetAddon(addonID, addon, ADDON_CONTEXT_ITEM, false)) && addon) addon->OnDisabled(); return true; } return false; // already disabled or failed query } else { bool disabled = IsAddonDisabled(addonID); //we need to know if service addon is running std::string sql = PrepareSQL("delete from disabled where addonID='%s'", addonID.c_str()); m_pDS->exec(sql); if (disabled) { // If the addon is a special, call the enabled handler AddonPtr addon; if ((CAddonMgr::Get().GetAddon(addonID, addon, ADDON_SERVICE, false) || CAddonMgr::Get().GetAddon(addonID, addon, ADDON_PVRDLL, false) || CAddonMgr::Get().GetAddon(addonID, addon, ADDON_CONTEXT_ITEM, false)) && addon) addon->OnEnabled(); } } return true; } catch (...) { CLog::Log(LOGERROR, "%s failed on addon '%s'", __FUNCTION__, addonID.c_str()); } return false; }