diff options
author | tamland <thomas.amland@gmail.com> | 2015-11-12 21:45:19 +0100 |
---|---|---|
committer | tamland <thomas.amland@gmail.com> | 2015-11-12 21:45:19 +0100 |
commit | d5859d9be6b38b79a56947160705fa5a75e227cf (patch) | |
tree | 9001b29977fb182add439436639e4b87c9758ec7 | |
parent | a3298f3ef235a2662a686cd888b4caab61f102b8 (diff) | |
parent | 5bc424eadfde0a4e84c741a55b6322dd0fc65ba5 (diff) |
Merge pull request #8372 from tamland/fix_blacklist_clearing
[addons] fix clearing of blacklist state on uninstall
-rw-r--r-- | xbmc/addons/Addon.cpp | 7 | ||||
-rw-r--r-- | xbmc/addons/AddonDatabase.cpp | 7 | ||||
-rw-r--r-- | xbmc/addons/AddonDatabase.h | 3 | ||||
-rw-r--r-- | xbmc/addons/AddonInstaller.cpp | 9 | ||||
-rw-r--r-- | xbmc/addons/AddonManager.cpp | 9 | ||||
-rw-r--r-- | xbmc/addons/AddonManager.h | 3 |
6 files changed, 26 insertions, 12 deletions
diff --git a/xbmc/addons/Addon.cpp b/xbmc/addons/Addon.cpp index 248db56edf..d325d6bee6 100644 --- a/xbmc/addons/Addon.cpp +++ b/xbmc/addons/Addon.cpp @@ -726,13 +726,6 @@ void OnPreUnInstall(const AddonPtr& addon) if (CAddonMgr::GetInstance().GetAddon(addon->ID(), localAddon, ADDON_CONTEXT_ITEM)) CContextMenuManager::GetInstance().Unregister(std::static_pointer_cast<CContextMenuAddon>(localAddon)); - if (CAddonMgr::GetInstance().GetAddon(addon->ID(), localAddon, ADDON_REPOSITORY)) - { - CAddonDatabase database; - database.Open(); - database.DeleteRepository(addon->ID()); - } - addon->OnPreUnInstall(); } diff --git a/xbmc/addons/AddonDatabase.cpp b/xbmc/addons/AddonDatabase.cpp index f2a0083707..e33c7dae23 100644 --- a/xbmc/addons/AddonDatabase.cpp +++ b/xbmc/addons/AddonDatabase.cpp @@ -917,3 +917,10 @@ bool CAddonDatabase::IsSystemAddonRegistered(const std::string &addonID) } return false; } + +void CAddonDatabase::OnPostUnInstall(const std::string& addonId) +{ + DisableAddon(addonId, false); + RemoveAddonFromBlacklist(addonId); + DeleteRepository(addonId); +} diff --git a/xbmc/addons/AddonDatabase.h b/xbmc/addons/AddonDatabase.h index 021fb497dc..581bc751f4 100644 --- a/xbmc/addons/AddonDatabase.h +++ b/xbmc/addons/AddonDatabase.h @@ -157,6 +157,9 @@ public: */ bool IsSystemAddonRegistered(const std::string &addonID); + /*! Clear internal fields that shouldn't be kept around indefinitely */ + void OnPostUnInstall(const std::string& addonId); + protected: virtual void CreateTables(); virtual void CreateAnalytics(); diff --git a/xbmc/addons/AddonInstaller.cpp b/xbmc/addons/AddonInstaller.cpp index 65f0815735..c289febc73 100644 --- a/xbmc/addons/AddonInstaller.cpp +++ b/xbmc/addons/AddonInstaller.cpp @@ -625,10 +625,8 @@ bool CAddonInstallJob::DoWork() ADDON::OnPostInstall(m_addon, m_update, IsModal()); - //Clear addon from the disabled table - CAddonDatabase database; - database.Open(); - database.DisableAddon(m_addon->ID(), false); + //Enable it if it was previously disabled + CAddonMgr::GetInstance().EnableAddon(m_addon->ID()); // and we're done! MarkFinished(); @@ -896,6 +894,9 @@ bool CAddonUnInstallJob::DoWork() addon = m_addon; CEventLog::GetInstance().Add(EventPtr(new CAddonManagementEvent(addon, 24144))); + CAddonMgr::GetInstance().OnPostUnInstall(m_addon->ID()); + database.OnPostUnInstall(m_addon->ID()); + ADDON::OnPostUnInstall(m_addon); return true; } diff --git a/xbmc/addons/AddonManager.cpp b/xbmc/addons/AddonManager.cpp index e00db87f0f..682b93f9d0 100644 --- a/xbmc/addons/AddonManager.cpp +++ b/xbmc/addons/AddonManager.cpp @@ -268,6 +268,7 @@ void CAddonMgr::UnregisterAddonMgrCallback(TYPE type) bool CAddonMgr::Init() { + CSingleLock lock(m_critSection); m_cpluff = new DllLibCPluff; m_cpluff->Load(); @@ -646,7 +647,6 @@ void CAddonMgr::FindAddons() void CAddonMgr::UnregisterAddon(const std::string& ID) { CSingleLock lock(m_critSection); - m_disabled.erase(ID); if (m_cpluff && m_cp_context) { m_cpluff->uninstall_plugin(m_cp_context, ID.c_str()); @@ -656,6 +656,13 @@ void CAddonMgr::UnregisterAddon(const std::string& ID) } } +void CAddonMgr::OnPostUnInstall(const std::string& id) +{ + CSingleLock lock(m_critSection); + m_disabled.erase(id); + m_updateBlacklist.erase(id); +} + bool CAddonMgr::RemoveFromUpdateBlacklist(const std::string& id) { CSingleLock lock(m_critSection); diff --git a/xbmc/addons/AddonManager.h b/xbmc/addons/AddonManager.h index 1a0465251b..472a51ebea 100644 --- a/xbmc/addons/AddonManager.h +++ b/xbmc/addons/AddonManager.h @@ -112,6 +112,9 @@ namespace ADDON void FindAddons(); void UnregisterAddon(const std::string& ID); + /*! Hook for clearing internal state after uninstall. */ + void OnPostUnInstall(const std::string& id); + /*! \brief Disable an addon. Returns true on success, false on failure. */ bool DisableAddon(const std::string& ID); |