kodi-100.09-use-a-wrapper-to-setup-systemd-services.patch 3.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. From 74ed25108f5a5c4771e001aa9921f175872c076e Mon Sep 17 00:00:00 2001
  2. From: Stefan Saraev <stefan@saraev.ca>
  3. Date: Fri, 24 Apr 2015 19:45:20 +0300
  4. Subject: [PATCH 09/13] use a wrapper to setup systemd services
  5. ---
  6. xbmc/addons/Addon.cpp | 30 ++++++++++++++++++++++++++++++
  7. xbmc/addons/Addon.h | 2 ++
  8. 2 files changed, 32 insertions(+)
  9. diff --git a/xbmc/addons/Addon.cpp b/xbmc/addons/Addon.cpp
  10. index 377a49c..2fda194 100644
  11. --- a/xbmc/addons/Addon.cpp
  12. +++ b/xbmc/addons/Addon.cpp
  13. @@ -638,6 +638,13 @@ AddonVersion CAddon::GetDependencyVersion(const std::string &dependencyID) const
  14. return AddonVersion("0.0.0");
  15. }
  16. +void CallOEWrapper(const std::string& ID, bool disable)
  17. +{
  18. + char cmd[255];
  19. + snprintf(cmd, sizeof(cmd), "/usr/lib/libreelec/systemd-addon-wrapper %s %d %d", ID.c_str(), disable);
  20. + system(cmd);
  21. +}
  22. +
  23. void OnEnabled(const std::string& id)
  24. {
  25. // If the addon is a special, call enabled handler
  26. @@ -646,6 +653,11 @@ void OnEnabled(const std::string& id)
  27. CAddonMgr::GetInstance().GetAddon(id, addon, ADDON_ADSPDLL))
  28. return addon->OnEnabled();
  29. + // OE: systemctl enable & start on addon enable
  30. + if (CAddonMgr::GetInstance().GetAddon(id, addon, ADDON_SERVICE))
  31. + CallOEWrapper(addon->ID(), false);
  32. + // OE
  33. +
  34. if (CAddonMgr::GetInstance().GetAddon(id, addon, ADDON_SERVICE))
  35. std::static_pointer_cast<CService>(addon)->Start();
  36. @@ -663,6 +675,11 @@ void OnDisabled(const std::string& id)
  37. if (CAddonMgr::GetInstance().GetAddon(id, addon, ADDON_SERVICE, false))
  38. std::static_pointer_cast<CService>(addon)->Stop();
  39. + // OE: systemctl stop & disable on addon disable
  40. + if (CAddonMgr::GetInstance().GetAddon(id, addon, ADDON_SERVICE, false))
  41. + CallOEWrapper(addon->ID(), true);
  42. + // OE
  43. +
  44. if (CAddonMgr::GetInstance().GetAddon(id, addon, ADDON_CONTEXT_ITEM, false))
  45. CContextMenuManager::GetInstance().Unregister(std::static_pointer_cast<CContextMenuAddon>(addon));
  46. }
  47. @@ -686,6 +703,14 @@ void OnPreInstall(const AddonPtr& addon)
  48. void OnPostInstall(const AddonPtr& addon, bool update, bool modal)
  49. {
  50. AddonPtr localAddon;
  51. + // OE: systemctl stop & disable / enable & start on addon upgrade
  52. + if (CAddonMgr::GetInstance().GetAddon(addon->ID(), localAddon, ADDON_SERVICE))
  53. + {
  54. + CallOEWrapper(addon->ID(), true);
  55. + CallOEWrapper(addon->ID(), false);
  56. + }
  57. + // OE
  58. +
  59. if (CAddonMgr::GetInstance().GetAddon(addon->ID(), localAddon, ADDON_SERVICE))
  60. std::static_pointer_cast<CService>(localAddon)->Start();
  61. @@ -720,6 +745,11 @@ void OnPostInstall(const AddonPtr& addon, bool update, bool modal)
  62. void OnPreUnInstall(const AddonPtr& addon)
  63. {
  64. AddonPtr localAddon;
  65. + // OE: systemctl stop & disable on addon ininstall
  66. + if (CAddonMgr::GetInstance().GetAddon(addon->ID(), localAddon, ADDON_SERVICE))
  67. + CallOEWrapper(addon->ID(), true);
  68. + // OE
  69. +
  70. if (CAddonMgr::GetInstance().GetAddon(addon->ID(), localAddon, ADDON_SERVICE))
  71. std::static_pointer_cast<CService>(localAddon)->Stop();
  72. diff --git a/xbmc/addons/Addon.h b/xbmc/addons/Addon.h
  73. index d0a40d3..0742374 100644
  74. --- a/xbmc/addons/Addon.h
  75. +++ b/xbmc/addons/Addon.h
  76. @@ -173,6 +173,8 @@ public:
  77. const InfoMap &ExtraInfo() const { return m_props.extrainfo; }
  78. const ADDONDEPS &GetDeps() const { return m_props.dependencies; }
  79. + void CallOEWrapper(const std::string& ID, bool disable);
  80. +
  81. /*! \brief get the required version of a dependency.
  82. \param dependencyID the addon ID of the dependency.
  83. \return the version this addon requires.
  84. --
  85. 2.5.0