Skip to content

Commit

Permalink
add blocking unload/load callbacks to addon manager
Browse files Browse the repository at this point in the history
  • Loading branch information
tamland authored and AlwinEsch committed Sep 20, 2017
1 parent 4c5eb8b commit be263f1
Show file tree
Hide file tree
Showing 3 changed files with 23 additions and 0 deletions.
12 changes: 12 additions & 0 deletions xbmc/addons/AddonEvents.h
Expand Up @@ -71,5 +71,17 @@ namespace ADDON
* @deprecated Use Enabled, ReInstalled and UnInstalled instead.
*/
struct InstalledChanged : AddonEvent {};

struct Load : AddonEvent
{
std::string id;
explicit Load(std::string id) : id(std::move(id)) {}
};

struct Unload : AddonEvent
{
std::string id;
explicit Unload(std::string id) : id(std::move(id)) {}
};
};
};
9 changes: 9 additions & 0 deletions xbmc/addons/AddonManager.cpp
Expand Up @@ -706,6 +706,10 @@ bool CAddonMgr::UnloadAddon(const AddonPtr& addon)
if (m_cpluff->uninstall_plugin(m_cp_context, addon->ID().c_str()) == CP_OK)
{
CLog::Log(LOGDEBUG, "CAddonMgr: %s unloaded", addon->ID().c_str());

lock.Leave();
AddonEvents::Unload event(addon->ID());
m_unloadEvents.HandleEvent(event);
return true;
}
}
Expand Down Expand Up @@ -737,6 +741,11 @@ bool CAddonMgr::LoadAddon(const std::string& addonId)
return false;
}

lock.Leave();

AddonEvents::Load event(addon->ID());
m_unloadEvents.HandleEvent(event);

if (IsAddonDisabled(addon->ID()))
{
EnableAddon(addon->ID());
Expand Down
2 changes: 2 additions & 0 deletions xbmc/addons/AddonManager.h
Expand Up @@ -82,6 +82,7 @@ namespace ADDON
virtual ~CAddonMgr();

CEventStream<AddonEvent>& Events() { return m_events; }
CEventStream<AddonEvent>& UnloadEvents() { return m_unloadEvents; }

IAddonMgrCallback* GetCallbackForType(TYPE type);
bool RegisterAddonMgrCallback(TYPE type, IAddonMgrCallback* cb);
Expand Down Expand Up @@ -312,6 +313,7 @@ namespace ADDON
CCriticalSection m_critSection;
CAddonDatabase m_database;
CEventSource<AddonEvent> m_events;
CBlockingEventSource<AddonEvent> m_unloadEvents;
std::set<std::string> m_systemAddons;
std::set<std::string> m_optionalAddons;
};
Expand Down

0 comments on commit be263f1

Please sign in to comment.