95 lines
2.6 KiB
Diff
95 lines
2.6 KiB
Diff
--- a/xbmc/addons/Addon.cpp
|
|
+++ b/xbmc/addons/Addon.cpp
|
|
@@ -380,6 +380,37 @@ AddonVersion CAddon::GetDependencyVersio
|
|
return m_addonInfo->DependencyVersion(dependencyID);
|
|
}
|
|
|
|
+void LEAddonHook(const AddonPtr& addon, const LE_ADDON_CONTEXT context) {
|
|
+
|
|
+ if (addon->Type() == ADDON_SERVICE) {
|
|
+ std::string contextStr;
|
|
+ char cmd[255];
|
|
+
|
|
+ switch (context) {
|
|
+ case LE_ADDON_ENABLED:
|
|
+ contextStr = "enable";
|
|
+ break;
|
|
+ case LE_ADDON_DISABLED:
|
|
+ contextStr = "disable";
|
|
+ break;
|
|
+ case LE_ADDON_POST_INSTALL:
|
|
+ contextStr = "post-install";
|
|
+ break;
|
|
+ case LE_ADDON_PRE_UNINSTALL:
|
|
+ contextStr = "pre-uninstall";
|
|
+ break;
|
|
+ default:
|
|
+ contextStr = StringUtils::Format("unknown(%d)", context);
|
|
+ break;
|
|
+ }
|
|
+
|
|
+ snprintf(cmd, sizeof(cmd), "/usr/sbin/service-addon-wrapper %s %s %s",
|
|
+ contextStr.c_str(), addon->ID().c_str(), addon->Path().c_str());
|
|
+
|
|
+ system(cmd);
|
|
+ }
|
|
+}
|
|
+
|
|
void OnPreInstall(const AddonPtr& addon)
|
|
{
|
|
//Fallback to the pre-install callback in the addon.
|
|
@@ -409,6 +440,8 @@ void OnPostInstall(const AddonPtr& addon
|
|
}
|
|
closedir(addonsDir);
|
|
}
|
|
+
|
|
+ LEAddonHook(addon, LE_ADDON_POST_INSTALL);
|
|
// OE
|
|
|
|
addon->OnPostInstall(update, modal);
|
|
@@ -416,6 +449,8 @@ void OnPostInstall(const AddonPtr& addon
|
|
|
|
void OnPreUnInstall(const AddonPtr& addon)
|
|
{
|
|
+ LEAddonHook(addon, LE_ADDON_PRE_UNINSTALL);
|
|
+
|
|
addon->OnPreUnInstall();
|
|
}
|
|
|
|
--- a/xbmc/addons/Addon.h
|
|
+++ b/xbmc/addons/Addon.h
|
|
@@ -27,6 +27,15 @@ namespace ADDON
|
|
void OnPreUnInstall(const AddonPtr& addon);
|
|
void OnPostUnInstall(const AddonPtr& addon);
|
|
|
|
+typedef enum {
|
|
+ LE_ADDON_ENABLED,
|
|
+ LE_ADDON_DISABLED,
|
|
+ LE_ADDON_POST_INSTALL,
|
|
+ LE_ADDON_PRE_UNINSTALL,
|
|
+} LE_ADDON_CONTEXT;
|
|
+
|
|
+void LEAddonHook(const AddonPtr& addon, const LE_ADDON_CONTEXT context);
|
|
+
|
|
class CAddon : public IAddon
|
|
{
|
|
public:
|
|
--- a/xbmc/addons/AddonManager.cpp
|
|
+++ b/xbmc/addons/AddonManager.cpp
|
|
@@ -789,6 +789,7 @@ bool CAddonMgr::DisableAddon(const std::
|
|
AddonPtr addon;
|
|
if (GetAddon(id, addon, ADDON_UNKNOWN, OnlyEnabled::NO) && addon != NULL)
|
|
{
|
|
+ ADDON::LEAddonHook(addon, ADDON::LE_ADDON_DISABLED);
|
|
CServiceBroker::GetEventLog().Add(EventPtr(new CAddonManagementEvent(addon, 24141)));
|
|
}
|
|
|
|
@@ -834,6 +835,7 @@ bool CAddonMgr::EnableSingle(const std::
|
|
if (!m_database.EnableAddon(id))
|
|
return false;
|
|
m_disabled.erase(id);
|
|
+ ADDON::LEAddonHook(addon, ADDON::LE_ADDON_ENABLED);
|
|
|
|
// If enabling a repo add-on without an origin, set its origin to its own id
|
|
if (addon->HasType(ADDON_REPOSITORY) && addon->Origin().empty())
|