xbmc
AddonInstanceHandler.h
1 /*
2  * Copyright (C) 2005-2018 Team Kodi
3  * This file is part of Kodi - https://kodi.tv
4  *
5  * SPDX-License-Identifier: GPL-2.0-or-later
6  * See LICENSES/README.md for more information.
7  */
8 
9 #pragma once
10 
11 #include "addons/IAddon.h"
12 #include "addons/kodi-dev-kit/include/kodi/c-api/addon_base.h"
13 #include "addons/kodi-dev-kit/include/kodi/versions.h"
14 #include "threads/CriticalSection.h"
15 
16 #include <memory>
17 #include <string>
18 
19 class CSetting;
20 
21 namespace ADDON
22 {
23 
24 class CAddonDll;
25 using AddonDllPtr = std::shared_ptr<CAddonDll>;
26 
27 class CAddonInfo;
28 using AddonInfoPtr = std::shared_ptr<CAddonInfo>;
29 
30 class CBinaryAddonBase;
31 using BinaryAddonBasePtr = std::shared_ptr<CBinaryAddonBase>;
32 
34 {
35 public:
62  const AddonInfoPtr& addonInfo,
63  AddonInstanceId instanceId = ADDON_INSTANCE_ID_UNUSED,
64  KODI_HANDLE parentInstance = nullptr,
65  const std::string& uniqueWorkID = "");
66  virtual ~IAddonInstanceHandler();
67 
68  ADDON_TYPE UsedType() const { return m_type; }
69  AddonInstanceId InstanceId() const { return m_instanceId; }
70  const std::string& UniqueWorkID() { return m_uniqueWorkID; }
71 
72  std::string ID() const;
73  std::string Name() const;
74  std::string Author() const;
75  std::string Icon() const;
76  std::string Path() const;
77  std::string Profile() const;
78  CAddonVersion Version() const;
79 
80  ADDON_STATUS CreateInstance();
81  void DestroyInstance();
82  const AddonDllPtr& Addon() const { return m_addon; }
83  AddonInfoPtr GetAddonInfo() const { return m_addonInfo; }
84 
85  virtual void OnPreInstall() {}
86  virtual void OnPostInstall(bool update, bool modal) {}
87  virtual void OnPreUnInstall() {}
88  virtual void OnPostUnInstall() {}
89 
90 protected:
91  KODI_ADDON_INSTANCE_INFO m_info{};
93 
94 private:
95  std::shared_ptr<CSetting> GetSetting(const std::string& setting);
96 
97  static char* get_instance_user_path(const KODI_ADDON_INSTANCE_BACKEND_HDL hdl);
98  static bool is_instance_setting_using_default(const KODI_ADDON_INSTANCE_BACKEND_HDL hdl,
99  const char* id);
100  static bool get_instance_setting_bool(const KODI_ADDON_INSTANCE_BACKEND_HDL hdl,
101  const char* id,
102  bool* value);
103  static bool get_instance_setting_int(const KODI_ADDON_INSTANCE_BACKEND_HDL hdl,
104  const char* id,
105  int* value);
106  static bool get_instance_setting_float(const KODI_ADDON_INSTANCE_BACKEND_HDL hdl,
107  const char* id,
108  float* value);
109  static bool get_instance_setting_string(const KODI_ADDON_INSTANCE_BACKEND_HDL hdl,
110  const char* id,
111  char** value);
112  static bool set_instance_setting_bool(const KODI_ADDON_INSTANCE_BACKEND_HDL hdl,
113  const char* id,
114  bool value);
115  static bool set_instance_setting_int(const KODI_ADDON_INSTANCE_BACKEND_HDL hdl,
116  const char* id,
117  int value);
118  static bool set_instance_setting_float(const KODI_ADDON_INSTANCE_BACKEND_HDL hdl,
119  const char* id,
120  float value);
121  static bool set_instance_setting_string(const KODI_ADDON_INSTANCE_BACKEND_HDL hdl,
122  const char* id,
123  const char* value);
124 
125  const ADDON_TYPE m_type;
126  const AddonInstanceId m_instanceId;
127  std::string m_uniqueWorkID;
128  KODI_HANDLE m_parentInstance;
129  AddonInfoPtr m_addonInfo;
130  BinaryAddonBasePtr m_addonBase;
131  AddonDllPtr m_addon;
132  static CCriticalSection m_cdSec;
133 };
134 
135 } /* namespace ADDON */
Definition: AddonVersion.h:27
Setting base class containing all the properties which are common to all settings independent of the ...
Definition: Setting.h:46
ADDON_TYPE
Definition: versions.h:201
IAddonInstanceHandler(ADDON_TYPE type, const AddonInfoPtr &addonInfo, AddonInstanceId instanceId=ADDON_INSTANCE_ID_UNUSED, KODI_HANDLE parentInstance=nullptr, const std::string &uniqueWorkID="")
Class constructor for handling add-on instance processes, allowing an add-on to handle multiple work ...
Definition: AddonInstanceHandler.cpp:31
Definition: AddonInstanceHandler.h:33
Definition: addon_base.h:267
ADDON_STATUS
Definition: addon_base.h:137
Definition: addon_base.h:254
Definition: Addon.cpp:39