xbmc
Repository.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/Addon.h"
12 #include "addons/AddonVersion.h"
13 #include "utils/Digest.h"
14 
15 #include <memory>
16 #include <string>
17 #include <vector>
18 
19 namespace ADDON
20 {
21 class CAddonExtensions;
22 
24 {
25  CAddonVersion minversion{""};
26  CAddonVersion maxversion{""};
27  std::string info;
28  std::string checksum;
29  KODI::UTILITY::CDigest::Type checksumType{KODI::UTILITY::CDigest::Type::INVALID};
30  std::string datadir;
31  std::string artdir;
32  KODI::UTILITY::CDigest::Type hashType{KODI::UTILITY::CDigest::Type::INVALID};
33 };
34 
35 typedef std::vector<RepositoryDirInfo> RepositoryDirList;
36 
37 class CRepository : public CAddon
38 {
39 public:
40  explicit CRepository(const AddonInfoPtr& addonInfo);
41 
42  enum FetchStatus
43  {
44  STATUS_OK,
45  STATUS_NOT_MODIFIED,
46  STATUS_ERROR
47  };
48 
49  FetchStatus FetchIfChanged(const std::string& oldChecksum,
50  std::string& checksum,
51  std::vector<AddonInfoPtr>& addons,
52  int& recheckAfter) const;
53 
55  {
56  std::string location;
58  };
59  ResolveResult ResolvePathAndHash(AddonPtr const& addon) const;
60 
61 private:
62  static bool FetchChecksum(const std::string& url,
63  std::string& checksum,
64  int& recheckAfter) noexcept;
65  static bool FetchIndex(const RepositoryDirInfo& repo,
66  std::string const& digest,
67  std::vector<AddonInfoPtr>& addons) noexcept;
68 
69  static RepositoryDirInfo ParseDirConfiguration(const CAddonExtensions& configuration);
70 
71  RepositoryDirList m_dirs;
72 };
73 
74 typedef std::shared_ptr<CRepository> RepositoryPtr;
75 }
76 
Definition: AddonExtensions.h:54
Definition: Repository.h:54
Definition: AddonVersion.h:27
Definition: Repository.h:37
Definition: Addon.cpp:39
Definition: Digest.h:104
Definition: Repository.h:23
Definition: Addon.h:34