xbmc
Addon.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 
13 #include <memory>
14 #include <string>
15 #include <unordered_map>
16 #include <vector>
17 
18 class CXBMCTinyXML;
19 
20 namespace ADDON
21 {
22 
23 enum class AddonType;
24 class CAddonType;
25 
26 class CAddonInfo;
27 using AddonInfoPtr = std::shared_ptr<CAddonInfo>;
28 
29 void OnPreInstall(const AddonPtr& addon);
30 void OnPostInstall(const AddonPtr& addon, bool update, bool modal);
31 void OnPreUnInstall(const AddonPtr& addon);
32 void OnPostUnInstall(const AddonPtr& addon);
33 
34 class CAddon : public IAddon
35 {
36 public:
37  explicit CAddon(const AddonInfoPtr& addonInfo, AddonType addonType);
38  ~CAddon() override = default;
39 
48  AddonType MainType() const override;
49 
55  AddonType Type() const override { return m_type; }
56 
66  bool HasType(AddonType type) const override;
67 
76  bool HasMainType(AddonType type) const override;
77 
96  const CAddonType* Type(AddonType type) const;
97 
98  std::string ID() const override;
99  std::string Name() const override;
100  bool IsInUse() const override { return false; }
101  bool IsBinary() const override;
102  CAddonVersion Version() const override;
103  CAddonVersion MinVersion() const override;
104  std::string Summary() const override;
105  std::string Description() const override;
106  std::string Path() const override;
107  std::string Profile() const override;
108  std::string LibPath() const override;
109  std::string Author() const override;
110  std::string ChangeLog() const override;
111  std::string Icon() const override;
112  ArtMap Art() const override;
113  std::vector<std::string> Screenshots() const override;
114  std::string Disclaimer() const override;
115  AddonLifecycleState LifecycleState() const override;
116  std::string LifecycleStateDescription() const override;
117  CDateTime InstallDate() const override;
118  CDateTime LastUpdated() const override;
119  CDateTime LastUsed() const override;
120  std::string Origin() const override;
121  std::string OriginName() const override;
122  uint64_t PackageSize() const override;
123  const InfoMap& ExtraInfo() const override;
124  const std::vector<DependencyInfo>& GetDependencies() const override;
125  std::string FanArt() const override;
126 
132  bool SupportsMultipleInstances() const override;
133 
139  AddonInstanceSupport InstanceUseType() const override;
140 
150  std::vector<AddonInstanceId> GetKnownInstanceIds() const override;
151 
160  bool SupportsInstanceSettings() const override;
161 
170  bool DeleteInstanceSettings(AddonInstanceId instance) override;
171 
177  bool CanHaveAddonOrInstanceSettings() override;
178 
188  bool HasSettings(AddonInstanceId id = ADDON_SETTINGS_ID) override;
189 
199  bool HasUserSettings(AddonInstanceId id = ADDON_SETTINGS_ID) override;
200 
209  void SaveSettings(AddonInstanceId id = ADDON_SETTINGS_ID) override;
210 
221  void UpdateSetting(const std::string& key,
222  const std::string& value,
223  AddonInstanceId id = ADDON_SETTINGS_ID) override;
224 
235  bool UpdateSettingBool(const std::string& key,
236  bool value,
237  AddonInstanceId id = ADDON_SETTINGS_ID) override;
238 
249  bool UpdateSettingInt(const std::string& key,
250  int value,
251  AddonInstanceId id = ADDON_SETTINGS_ID) override;
252 
263  bool UpdateSettingNumber(const std::string& key,
264  double value,
265  AddonInstanceId id = ADDON_SETTINGS_ID) override;
266 
277  bool UpdateSettingString(const std::string& key,
278  const std::string& value,
279  AddonInstanceId id = ADDON_SETTINGS_ID) override;
280 
293  std::string GetSetting(const std::string& key, AddonInstanceId id = ADDON_SETTINGS_ID) override;
294 
308  bool GetSettingBool(const std::string& key,
309  bool& value,
310  AddonInstanceId id = ADDON_SETTINGS_ID) override;
311 
325  bool GetSettingInt(const std::string& key,
326  int& value,
327  AddonInstanceId id = ADDON_SETTINGS_ID) override;
328 
342  bool GetSettingNumber(const std::string& key,
343  double& value,
344  AddonInstanceId id = ADDON_SETTINGS_ID) override;
345 
359  bool GetSettingString(const std::string& key,
360  std::string& value,
361  AddonInstanceId id = ADDON_SETTINGS_ID) override;
362 
363  std::shared_ptr<CAddonSettings> GetSettings(AddonInstanceId id = ADDON_SETTINGS_ID) override;
364 
369  CAddonVersion GetDependencyVersion(const std::string& dependencyID) const override;
370 
375  bool MeetsVersion(const CAddonVersion& versionMin, const CAddonVersion& version) const override;
376 
377  bool ReloadSettings(AddonInstanceId id = ADDON_SETTINGS_ID) override;
378 
379  void ResetSettings(AddonInstanceId id = ADDON_SETTINGS_ID) override;
380 
383  AddonPtr GetRunningInstance() const override { return AddonPtr(); }
384 
385  void OnPreInstall() override{};
386  void OnPostInstall(bool update, bool modal) override{};
387  void OnPreUnInstall() override{};
388  void OnPostUnInstall() override{};
389 
390 protected:
398  virtual bool SettingsInitialized(AddonInstanceId id = ADDON_SETTINGS_ID) const;
399 
407  virtual bool SettingsLoaded(AddonInstanceId id = ADDON_SETTINGS_ID) const;
408 
420  bool LoadSettings(bool bForce, bool loadUserSettings, AddonInstanceId id = ADDON_SETTINGS_ID);
421 
431  virtual bool LoadUserSettings(AddonInstanceId id = ADDON_SETTINGS_ID);
432 
442  virtual bool HasSettingsToSave(AddonInstanceId id = ADDON_SETTINGS_ID) const;
443 
455  virtual bool SettingsFromXML(const CXBMCTinyXML& doc,
456  bool loadDefaults,
457  AddonInstanceId id = ADDON_SETTINGS_ID);
458 
469  virtual bool SettingsToXML(CXBMCTinyXML& doc, AddonInstanceId id = ADDON_SETTINGS_ID) const;
470 
471  const AddonInfoPtr m_addonInfo;
472 
473 private:
474  struct CSettingsData
475  {
476  bool m_loadSettingsFailed{false};
477  bool m_hasUserSettings{false};
478  std::string m_addonSettingsPath;
479  std::string m_userSettingsPath;
480  std::shared_ptr<CAddonSettings> m_addonSettings;
481  };
482 
483  bool InitSettings(AddonInstanceId id);
484  std::shared_ptr<CAddonSettings> FindInstanceSettings(AddonInstanceId id) const;
485 
486  mutable std::unordered_map<AddonInstanceId, CSettingsData> m_settings;
487  const AddonType m_type;
488 };
489 
490 }; // namespace ADDON
Definition: AddonType.h:77
bool GetSettingInt(const std::string &key, int &value, AddonInstanceId id=ADDON_SETTINGS_ID) override
Retrieve a particular settings value as integer.
Definition: Addon.cpp:442
bool HasType(AddonType type) const override
To check complete addon (not only this) contains a type.
Definition: Addon.cpp:53
virtual bool LoadUserSettings(AddonInstanceId id=ADDON_SETTINGS_ID)
Load the user settings.
Definition: Addon.cpp:342
bool HasMainType(AddonType type) const override
To check complete addon (not only this) has a specific type defined in its first extension point incl...
Definition: Addon.cpp:58
void UpdateSetting(const std::string &key, const std::string &value, AddonInstanceId id=ADDON_SETTINGS_ID) override
Update a user-configured setting with a new value.
Definition: Addon.cpp:463
CAddonVersion GetDependencyVersion(const std::string &dependencyID) const override
get the required version of a dependency.
Definition: Addon.cpp:652
bool UpdateSettingNumber(const std::string &key, double value, AddonInstanceId id=ADDON_SETTINGS_ID) override
Update a user-configured setting with a new number value.
Definition: Addon.cpp:530
bool GetSettingNumber(const std::string &key, double &value, AddonInstanceId id=ADDON_SETTINGS_ID) override
Retrieve a particular settings value as number.
Definition: Addon.cpp:449
AddonType MainType() const override
To get the main type of this addon.
Definition: Addon.cpp:48
virtual bool SettingsInitialized(AddonInstanceId id=ADDON_SETTINGS_ID) const
Whether or not the settings have been initialized.
Definition: Addon.cpp:255
Definition: AddonVersion.h:27
void SaveSettings(AddonInstanceId id=ADDON_SETTINGS_ID) override
Save any user configured settings.
Definition: Addon.cpp:375
virtual bool SettingsFromXML(const CXBMCTinyXML &doc, bool loadDefaults, AddonInstanceId id=ADDON_SETTINGS_ID)
Parse settings from an XML document.
Definition: Addon.cpp:544
AddonType Type() const override
To get the on this CAddon class processed addon type.
Definition: Addon.h:55
Definition: XBMCTinyXML.h:33
bool UpdateSettingBool(const std::string &key, bool value, AddonInstanceId id=ADDON_SETTINGS_ID) override
Update a user-configured setting with a new boolean value.
Definition: Addon.cpp:516
bool MeetsVersion(const CAddonVersion &versionMin, const CAddonVersion &version) const override
return whether or not this addon satisfies the given version requirements
Definition: Addon.cpp:199
bool CanHaveAddonOrInstanceSettings() override
Check whether this add-on can be configured by the user.
Definition: Addon.cpp:245
virtual bool SettingsToXML(CXBMCTinyXML &doc, AddonInstanceId id=ADDON_SETTINGS_ID) const
Write settings into an XML document.
Definition: Addon.cpp:577
virtual bool HasSettingsToSave(AddonInstanceId id=ADDON_SETTINGS_ID) const
Whether there are settings to be saved.
Definition: Addon.cpp:370
bool LoadSettings(bool bForce, bool loadUserSettings, AddonInstanceId id=ADDON_SETTINGS_ID)
Load the default settings and override these with any previously configured user settings.
Definition: Addon.cpp:267
AddonInstanceSupport InstanceUseType() const override
Return the used instance path type of the add-on type.
Definition: Addon.cpp:218
Definition: IAddon.h:72
Definition: addon_base.h:267
bool SupportsInstanceSettings() const override
Check whether the add-on supports individual settings per add-on instance.
Definition: Addon.cpp:223
std::string GetSetting(const std::string &key, AddonInstanceId id=ADDON_SETTINGS_ID) override
Retrieve a particular settings value.
Definition: Addon.cpp:406
bool HasSettings(AddonInstanceId id=ADDON_SETTINGS_ID) override
Check whether this add-on can be configured by the user.
Definition: Addon.cpp:250
virtual bool SettingsLoaded(AddonInstanceId id=ADDON_SETTINGS_ID) const
Whether or not the settings have been loaded.
Definition: Addon.cpp:261
DateTime class, which uses FileTime as it&#39;s base.
Definition: XBDateTime.h:63
bool HasUserSettings(AddonInstanceId id=ADDON_SETTINGS_ID) override
Check whether the user has configured this add-on or not.
Definition: Addon.cpp:324
bool UpdateSettingInt(const std::string &key, int value, AddonInstanceId id=ADDON_SETTINGS_ID) override
Update a user-configured setting with a new integer value.
Definition: Addon.cpp:523
bool DeleteInstanceSettings(AddonInstanceId instance) override
Delete selected instance settings from storage.
Definition: Addon.cpp:228
bool GetSettingBool(const std::string &key, bool &value, AddonInstanceId id=ADDON_SETTINGS_ID) override
Retrieve a particular settings value as boolean.
Definition: Addon.cpp:435
bool UpdateSettingString(const std::string &key, const std::string &value, AddonInstanceId id=ADDON_SETTINGS_ID) override
Update a user-configured setting with a new string value.
Definition: Addon.cpp:537
Definition: Addon.cpp:39
AddonPtr GetRunningInstance() const override
retrieve the running instance of an add-on if it persists while running.
Definition: Addon.h:383
bool SupportsMultipleInstances() const override
Check add-on for support from independent work instances.
Definition: Addon.cpp:213
Definition: Addon.h:34
std::vector< AddonInstanceId > GetKnownInstanceIds() const override
Gives active, independently working instance identifiers for this add-on.
Definition: Addon.cpp:208
bool GetSettingString(const std::string &key, std::string &value, AddonInstanceId id=ADDON_SETTINGS_ID) override
Retrieve a particular settings value as string.
Definition: Addon.cpp:456