11 #include "threads/CriticalSection.h" 12 #include "utils/EventStream.h" 23 enum class AddonDisabledReason;
24 enum class AddonOriginType;
26 enum class AddonUpdateRule;
27 enum class AllowCheckForUpdates : bool;
30 class CAddonUpdateRules;
32 class IAddonMgrCallback;
35 using AddonInfoPtr = std::shared_ptr<CAddonInfo>;
36 using ADDON_INFO_LIST = std::map<std::string, AddonInfoPtr>;
39 using AddonPtr = std::shared_ptr<IAddon>;
40 using VECADDONS = std::vector<AddonPtr>;
43 struct AddonWithUpdate;
44 struct DependencyInfo;
45 struct RepositoryDirInfo;
47 using AddonInstanceId = uint32_t;
49 enum class AddonCheckType : bool
55 enum class OnlyEnabled : bool
61 enum class OnlyEnabledRootAddon : bool
67 enum class CheckIncompatible : bool
99 void UnregisterAddonMgrCallback(AddonType type);
108 bool GetAddon(
const std::string&
id,
111 OnlyEnabled onlyEnabled)
const;
119 bool GetAddon(
const std::string&
id, AddonPtr& addon, OnlyEnabled onlyEnabled)
const;
121 bool HasType(
const std::string&
id, AddonType type);
123 bool HasAddons(AddonType type);
125 bool HasInstalledAddons(AddonType type);
128 bool GetAddonsForUpdate(VECADDONS& addons)
const;
131 bool GetAddons(VECADDONS& addons)
const;
134 bool GetAddons(VECADDONS& addons, AddonType type);
137 bool GetInstalledAddons(VECADDONS& addons);
140 bool GetInstalledAddons(VECADDONS& addons, AddonType type);
142 bool GetDisabledAddons(VECADDONS& addons);
144 bool GetDisabledAddons(VECADDONS& addons, AddonType type);
147 bool GetInstallableAddons(VECADDONS& addons);
149 bool GetInstallableAddons(VECADDONS& addons, AddonType type);
163 bool FindInstallableById(
const std::string& addonId, AddonPtr& addon);
165 void AddToUpdateableAddons(AddonPtr& pAddon);
166 void RemoveFromUpdateableAddons(AddonPtr& pAddon);
167 bool ReloadSettings(
const std::string& addonId, AddonInstanceId instanceId);
170 std::vector<std::shared_ptr<IAddon>> GetAvailableUpdates()
const;
173 std::vector<std::shared_ptr<IAddon>> GetOutdatedAddons()
const;
176 bool HasAvailableUpdates();
184 bool IsOrphaned(
const std::shared_ptr<IAddon>& addon,
185 const std::vector<std::shared_ptr<IAddon>>& allAddons)
const;
198 bool FindAddon(
const std::string& addonId,
199 const std::string& origin,
209 bool GetIncompatibleEnabledAddonInfos(std::vector<AddonInfoPtr>& incompatible)
const;
217 std::vector<AddonInfoPtr> MigrateAddons();
225 std::vector<AddonInfoPtr> DisableIncompatibleAddons(
226 const std::vector<AddonInfoPtr>& incompatible);
232 void CheckAndInstallAddonUpdates(
bool wait)
const;
239 bool UnloadAddon(
const std::string& addonId);
246 bool LoadAddon(
const std::string& addonId,
247 const std::string& origin,
254 void OnPostUnInstall(
const std::string&
id);
257 bool DisableAddon(
const std::string& ID, AddonDisabledReason disabledReason);
260 bool UpdateDisabledReason(
const std::string&
id, AddonDisabledReason newDisabledReason);
263 bool EnableAddon(
const std::string& ID);
270 bool IsAddonDisabled(
const std::string& ID)
const;
281 bool IsAddonDisabledExcept(
const std::string& ID, AddonDisabledReason disabledReason)
const;
287 bool CanAddonBeDisabled(
const std::string& ID);
289 bool CanAddonBeEnabled(
const std::string&
id);
294 bool IsAddonInstalled(
const std::string& ID);
303 bool IsAddonInstalled(
const std::string& ID,
const std::string& origin)
const;
313 bool IsAddonInstalled(
const std::string& ID,
314 const std::string& origin,
320 bool CanAddonBeInstalled(
const AddonPtr& addon);
322 bool CanUninstall(
const AddonPtr& addon);
330 bool IsBundledAddon(
const std::string&
id);
338 bool IsSystemAddon(
const std::string&
id);
346 bool IsRequiredSystemAddon(
const std::string&
id);
354 bool IsOptionalSystemAddon(
const std::string&
id);
370 bool AddUpdateRuleToList(
const std::string&
id, AddonUpdateRule updateRule);
375 bool RemoveAllUpdateRulesFromList(
const std::string&
id);
380 bool RemoveUpdateRuleFromList(
const std::string&
id, AddonUpdateRule updateRule);
387 bool IsAutoUpdateable(
const std::string&
id)
const;
395 void PublishEventAutoUpdateStateChanged(
const std::string&
id);
396 void UpdateLastUsed(
const std::string&
id);
406 void PublishInstanceAdded(
const std::string& addonId, AddonInstanceId instanceId);
416 void PublishInstanceRemoved(
const std::string& addonId, AddonInstanceId instanceId);
424 bool LoadAddonDescription(
const std::string& path, AddonPtr& addon);
426 bool ServicesHasStarted()
const;
434 bool IsCompatible(
const std::shared_ptr<const IAddon>& addon)
const;
442 bool IsCompatible(
const AddonInfoPtr& addonInfo)
const;
448 std::vector<DependencyInfo> GetDepsRecursive(
const std::string&
id,
449 OnlyEnabledRootAddon onlyEnabledRootAddon);
464 bool GetAddonInfos(std::vector<AddonInfoPtr>& addonInfos,
bool onlyEnabled, AddonType type)
const;
477 std::vector<AddonInfoPtr> GetAddonInfos(
bool onlyEnabled,
478 const std::vector<AddonType>& types)
const;
491 bool GetDisabledAddonInfos(std::vector<AddonInfoPtr>& addonInfos, AddonType type)
const;
509 bool GetDisabledAddonInfos(std::vector<AddonInfoPtr>& addonInfos,
511 AddonDisabledReason disabledReason)
const;
513 const AddonInfoPtr GetAddonInfo(
const std::string&
id, AddonType type)
const;
524 AddonOriginType GetAddonOriginType(
const AddonPtr& addon)
const;
532 bool IsAddonDisabledWithReason(
const std::string& ID, AddonDisabledReason disabledReason)
const;
562 bool SetAddonOrigin(
const std::string& addonId,
const std::string& repoAddonId,
bool isUpdate);
578 const std::string& xml,
579 std::vector<AddonInfoPtr>& addons);
588 std::map<std::string, AddonWithUpdate> GetAddonsWithAvailableUpdate()
const;
595 std::vector<std::shared_ptr<IAddon>> GetCompatibleVersions(
const std::string& addonId)
const;
603 const std::string& GetLastAvailableUpdatesCountAsString()
const;
609 std::vector<std::shared_ptr<IAddon>> GetOrphanedDependencies()
const;
614 VECADDONS m_updateableAddons;
623 std::vector<std::shared_ptr<IAddon>> GetAvailableUpdatesOrOutdatedAddons(
624 AddonCheckType addonCheckType)
const;
626 bool GetAddonsInternal(AddonType type,
628 OnlyEnabled onlyEnabled,
629 CheckIncompatible checkIncompatible)
const;
631 bool EnableSingle(
const std::string&
id);
633 void FindAddons(ADDON_INFO_LIST& addonmap,
const std::string& path);
643 bool GetIncompatibleAddonInfos(std::vector<AddonInfoPtr>& incompatible,
644 bool includeDisabled)
const;
651 bool GetAddonUpdateCandidates(VECADDONS& updates)
const;
657 void SortByDependencies(VECADDONS& updates)
const;
666 void InstallAddonUpdates(VECADDONS& updates,
668 AllowCheckForUpdates allowCheckForUpdates)
const;
675 mutable std::mutex m_installAddonsMutex;
677 std::map<std::string, AddonDisabledReason> m_disabled;
678 static std::map<AddonType, IAddonMgrCallback*> m_managers;
679 mutable CCriticalSection m_critSection;
680 std::unique_ptr<CAddonDatabase> m_database;
681 std::unique_ptr<CAddonUpdateRules> m_updateRules;
684 std::set<std::string> m_systemAddons;
685 std::set<std::string> m_optionalSystemAddons;
686 ADDON_INFO_LIST m_installedAddons;
689 const std::string m_tempAddonBasePath =
"special://temp/addons";
694 mutable std::string m_lastAvailableUpdatesCountAsString;
695 mutable std::mutex m_lastAvailableUpdatesCountMutex;
Class - CAddonMgr Holds references to all addons, enabled or otherwise.
Definition: AddonManager.h:79
const std::string & GetTempAddonBasePath()
Get the path where temporary add-on files are stored.
Definition: AddonManager.h:522
Definition: AddonVersion.h:27
Definition: EventStream.h:65
Class - IAddonMgrCallback This callback should be inherited by any class which manages specific addon...
Definition: IAddonManagerCallback.h:23
Definition: EventStream.h:88
Definition: Repository.h:23
Definition: EventStream.h:22