| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 
 | /*
 *  Copyright (C) 2005-2018 Team Kodi
 *  This file is part of Kodi - https://kodi.tv
 *
 *  SPDX-License-Identifier: GPL-2.0-or-later
 *  See LICENSES/README.md for more information.
 */
#pragma once
#include "addons/Addon.h"
#include "addons/AddonVersion.h"
#include "utils/Digest.h"
#include <memory>
#include <string>
#include <vector>
namespace ADDON
{
class CAddonExtensions;
struct RepositoryDirInfo
{
  CAddonVersion minversion{""};
  CAddonVersion maxversion{""};
  std::string info;
  std::string checksum;
  KODI::UTILITY::CDigest::Type checksumType{KODI::UTILITY::CDigest::Type::INVALID};
  std::string datadir;
  std::string artdir;
  KODI::UTILITY::CDigest::Type hashType{KODI::UTILITY::CDigest::Type::INVALID};
};
typedef std::vector<RepositoryDirInfo> RepositoryDirList;
class CRepository : public CAddon
{
public:
  explicit CRepository(const AddonInfoPtr& addonInfo);
  enum FetchStatus
  {
    STATUS_OK,
    STATUS_NOT_MODIFIED,
    STATUS_ERROR
  };
  FetchStatus FetchIfChanged(const std::string& oldChecksum,
                             std::string& checksum,
                             std::vector<AddonInfoPtr>& addons,
                             int& recheckAfter) const;
  struct ResolveResult
  {
    std::string location;
    KODI::UTILITY::TypedDigest digest;
  };
  ResolveResult ResolvePathAndHash(AddonPtr const& addon) const;
  // Implementation of CAddon
  void OnPostInstall(bool update, bool modal) override;
private:
  static bool FetchChecksum(const std::string& url,
                            std::string& checksum,
                            int& recheckAfter) noexcept;
  static bool FetchIndex(const RepositoryDirInfo& repo,
                         std::string const& digest,
                         std::vector<AddonInfoPtr>& addons) noexcept;
  static RepositoryDirInfo ParseDirConfiguration(const CAddonExtensions& configuration);
  RepositoryDirList m_dirs;
};
typedef std::shared_ptr<CRepository> RepositoryPtr;
}
 |