summaryrefslogtreecommitdiffstats
path: root/xbmc/addons/Repository.h
diff options
context:
space:
mode:
Diffstat (limited to 'xbmc/addons/Repository.h')
-rw-r--r--xbmc/addons/Repository.h76
1 files changed, 76 insertions, 0 deletions
diff --git a/xbmc/addons/Repository.h b/xbmc/addons/Repository.h
new file mode 100644
index 0000000..4c2ac32
--- /dev/null
+++ b/xbmc/addons/Repository.h
@@ -0,0 +1,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;
+}
+