xbmc
AddonDatabase.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 "XBDateTime.h"
12 #include "addons/AddonVersion.h"
13 #include "dbwrappers/Database.h"
14 
15 #include <map>
16 #include <memory>
17 #include <set>
18 #include <string>
19 #include <vector>
20 
21 class CVariant;
22 
23 namespace ADDON
24 {
25 
26 enum class AddonDisabledReason;
27 enum class AddonUpdateRule;
28 
29 class CAddonExtensions;
30 class CAddonInfoBuilderFromDB;
31 
32 class CAddonInfo;
33 using AddonInfoPtr = std::shared_ptr<CAddonInfo>;
34 
35 class IAddon;
36 using AddonPtr = std::shared_ptr<IAddon>;
37 using VECADDONS = std::vector<AddonPtr>;
38 
49 {
50  CAddonDatabaseSerializer() = delete;
51 
52 public:
53  static std::string SerializeMetadata(const CAddonInfo& addon);
54  static void DeserializeMetadata(const std::string& document, CAddonInfoBuilderFromDB& builder);
55 
56 private:
57  static CVariant SerializeExtensions(const CAddonExtensions& addonType);
58  static void DeserializeExtensions(const CVariant& document, CAddonExtensions& addonType);
59 };
60 
61 class CAddonDatabase : public CDatabase
62 {
63 public:
65  ~CAddonDatabase() override;
66  bool Open() override;
67 
69  bool GetAddon(const std::string& addonID,
70  const ADDON::CAddonVersion& version,
71  const std::string& repoId,
72  ADDON::AddonPtr& addon);
73 
75  bool GetDisabled(std::map<std::string, ADDON::AddonDisabledReason>& addons);
76 
78  bool FindByAddonId(const std::string& addonId, ADDON::VECADDONS& addons) const;
79 
80  bool UpdateRepositoryContent(const std::string& repositoryId,
81  const ADDON::CAddonVersion& version,
82  const std::string& checksum,
83  const std::vector<AddonInfoPtr>& addons);
84 
85  int GetRepoChecksum(const std::string& id, std::string& checksum);
86 
92  bool GetRepositoryContent(const std::string& id, ADDON::VECADDONS& addons) const;
93 
95  bool GetRepositoryContent(ADDON::VECADDONS& addons) const;
96 
98  {
102  ADDON::CAddonVersion lastCheckedVersion{""};
105 
106  RepoUpdateData() = default;
107 
108  RepoUpdateData(const CDateTime& lastCheckedAt,
109  const ADDON::CAddonVersion& lastCheckedVersion,
110  const CDateTime& nextCheckAt)
111  : lastCheckedAt{lastCheckedAt},
112  lastCheckedVersion{lastCheckedVersion},
113  nextCheckAt{nextCheckAt}
114  {
115  }
116  };
117 
124  int SetRepoUpdateData(const std::string& id, const RepoUpdateData& updateData);
125 
131  RepoUpdateData GetRepoUpdateData(const std::string& id);
132 
133  bool Search(const std::string& search, ADDON::VECADDONS& items);
134 
144  bool DisableAddon(const std::string& addonID, ADDON::AddonDisabledReason disabledReason);
145 
152  bool EnableAddon(const std::string& addonID);
153 
160  bool AddUpdateRuleForAddon(const std::string& addonID, ADDON::AddonUpdateRule updateRule);
161 
167  bool RemoveAllUpdateRulesForAddon(const std::string& addonID);
168 
177  bool RemoveUpdateRuleForAddon(const std::string& addonID, AddonUpdateRule updateRule);
178 
184  bool GetAddonUpdateRules(std::map<std::string, std::vector<AddonUpdateRule>>& rulesMap) const;
185 
193  bool AddPackage(const std::string& addonID,
194  const std::string& packageFileName,
195  const std::string& hash);
203  bool GetPackageHash(const std::string& addonID,
204  const std::string& packageFileName,
205  std::string& hash);
211  bool RemovePackage(const std::string& packageFileName);
212 
214  void OnPostUnInstall(const std::string& addonId);
215 
216  void SyncInstalled(const std::set<std::string>& ids,
217  const std::set<std::string>& system,
218  const std::set<std::string>& optional);
219 
220  bool SetLastUpdated(const std::string& addonId, const CDateTime& dateTime);
221  bool SetOrigin(const std::string& addonId, const std::string& origin);
222  bool SetLastUsed(const std::string& addonId, const CDateTime& dateTime);
223 
224  void GetInstallData(const ADDON::AddonInfoPtr& addon);
225 
231  bool AddInstalledAddon(const std::shared_ptr<CAddonInfo>& addon, const std::string& origin);
232 
233 protected:
234  void CreateTables() override;
235  void CreateAnalytics() override;
236  void UpdateTables(int version) override;
237  int GetMinSchemaVersion() const override;
238  int GetSchemaVersion() const override;
239  const char *GetBaseDBName() const override { return "Addons"; }
240 
241  bool GetAddon(int id, ADDON::AddonPtr& addon);
242  void DeleteRepository(const std::string& id);
243  void DeleteRepositoryContents(const std::string& id);
244  int GetRepositoryId(const std::string& addonId);
245 };
246 
247 }; // namespace ADDON
Definition: AddonExtensions.h:54
Definition: AddonDatabase.h:61
Definition: AddonVersion.h:27
Definition: AddonInfoBuilder.h:70
Addon content serializer/deserializer.
Definition: AddonDatabase.h:48
Definition: AddonInfo.h:141
Definition: Variant.h:29
CDateTime lastCheckedAt
last time the repo was checked, or invalid CDateTime if never checked
Definition: AddonDatabase.h:100
CDateTime nextCheckAt
next time the repo should be checked, or invalid CDateTime if unknown
Definition: AddonDatabase.h:104
Definition: Database.h:26
DateTime class, which uses FileTime as it&#39;s base.
Definition: XBDateTime.h:63
Definition: AddonDatabase.h:97
Definition: Addon.cpp:39