diff options
-rw-r--r-- | xbmc/addons/Repository.cpp | 33 | ||||
-rw-r--r-- | xbmc/addons/Repository.h | 4 |
2 files changed, 21 insertions, 16 deletions
diff --git a/xbmc/addons/Repository.cpp b/xbmc/addons/Repository.cpp index 5ba0039957..7e5a6005f8 100644 --- a/xbmc/addons/Repository.cpp +++ b/xbmc/addons/Repository.cpp @@ -112,6 +112,18 @@ CRepository::ResolveResult CRepository::ResolvePathAndHash(const AddonPtr& addon return {location, hash}; } +CRepository::DirInfo CRepository::ParseDirConfiguration(cp_cfg_element_t* configuration) +{ + auto const& mgr = CServiceBroker::GetAddonMgr(); + DirInfo dir; + dir.checksum = mgr.GetExtValue(configuration, "checksum"); + dir.info = mgr.GetExtValue(configuration, "info"); + dir.datadir = mgr.GetExtValue(configuration, "datadir"); + dir.hashes = mgr.GetExtValue(configuration, "hashes") == "true"; + dir.version = AddonVersion{mgr.GetExtValue(configuration, "@minversion")}; + return dir; +} + std::unique_ptr<CRepository> CRepository::FromExtension(CAddonInfo addonInfo, const cp_extension_t* ext) { DirList dirs; @@ -121,30 +133,19 @@ std::unique_ptr<CRepository> CRepository::FromExtension(CAddonInfo addonInfo, co version = addonver->Version(); for (size_t i = 0; i < ext->configuration->num_children; ++i) { - if(ext->configuration->children[i].name && - strcmp(ext->configuration->children[i].name, "dir") == 0) + cp_cfg_element_t* element = &ext->configuration->children[i]; + if(element->name && strcmp(element->name, "dir") == 0) { - AddonVersion min_version(CServiceBroker::GetAddonMgr().GetExtValue(&ext->configuration->children[i], "@minversion")); - if (min_version <= version) + DirInfo dir = ParseDirConfiguration(element); + if (dir.version <= version) { - DirInfo dir; - dir.version = min_version; - dir.checksum = CServiceBroker::GetAddonMgr().GetExtValue(&ext->configuration->children[i], "checksum"); - dir.info = CServiceBroker::GetAddonMgr().GetExtValue(&ext->configuration->children[i], "info"); - dir.datadir = CServiceBroker::GetAddonMgr().GetExtValue(&ext->configuration->children[i], "datadir"); - dir.hashes = CServiceBroker::GetAddonMgr().GetExtValue(&ext->configuration->children[i], "hashes") == "true"; dirs.push_back(std::move(dir)); } } } if (!CServiceBroker::GetAddonMgr().GetExtValue(ext->configuration, "info").empty()) { - DirInfo info; - info.checksum = CServiceBroker::GetAddonMgr().GetExtValue(ext->configuration, "checksum"); - info.info = CServiceBroker::GetAddonMgr().GetExtValue(ext->configuration, "info"); - info.datadir = CServiceBroker::GetAddonMgr().GetExtValue(ext->configuration, "datadir"); - info.hashes = CServiceBroker::GetAddonMgr().GetExtValue(ext->configuration, "hashes") == "true"; - dirs.push_back(std::move(info)); + dirs.push_back(ParseDirConfiguration(ext->configuration)); } return std::unique_ptr<CRepository>(new CRepository(std::move(addonInfo), std::move(dirs))); } diff --git a/xbmc/addons/Repository.h b/xbmc/addons/Repository.h index ac7ae9b4d2..e082c8d46a 100644 --- a/xbmc/addons/Repository.h +++ b/xbmc/addons/Repository.h @@ -27,6 +27,8 @@ #include "utils/Job.h" #include "utils/ProgressJob.h" +struct cp_cfg_element_t; + namespace ADDON { class CRepository : public CAddon @@ -74,6 +76,8 @@ namespace ADDON static bool FetchChecksum(const std::string& url, std::string& checksum) noexcept; static bool FetchIndex(const DirInfo& repo, VECADDONS& addons) noexcept; + static DirInfo ParseDirConfiguration(cp_cfg_element_t* configuration); + DirList m_dirs; }; |