1
0
This repository has been archived on 2024-11-10. You can view files and clone it, but cannot push or open issues or pull requests.
Lakka-rk322x/packages/mediacenter/kodi/patches/kodi-100.09-use-a-wrapper-to-setup-service-addons.patch
2021-04-09 17:21:03 +02:00

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())