1 2 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
|
/*
* 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;
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;
}
|