diff options
author | Thomas Amland <thomas.amland@gmail.com> | 2015-12-29 17:15:41 +0100 |
---|---|---|
committer | Thomas Amland <thomas.amland@gmail.com> | 2016-01-04 20:02:16 +0100 |
commit | cb43b99f455f22649f1979da7b6ac95f1cf2f5df (patch) | |
tree | 0a06d6ab1f495bf207dc91ab072309e5c8d96217 | |
parent | 7e84c1d3bf5fecc7b425f2ec0f4fd7a0a8179a86 (diff) |
[addons] show repository version instead of local one in 'available updates'
-rw-r--r-- | xbmc/addons/AddonInstaller.cpp | 32 | ||||
-rw-r--r-- | xbmc/addons/AddonInstaller.h | 2 | ||||
-rw-r--r-- | xbmc/addons/AddonManager.cpp | 19 | ||||
-rw-r--r-- | xbmc/addons/AddonManager.h | 7 | ||||
-rw-r--r-- | xbmc/addons/GUIViewStateAddonBrowser.cpp | 3 | ||||
-rw-r--r-- | xbmc/addons/RepositoryUpdater.cpp | 10 | ||||
-rw-r--r-- | xbmc/filesystem/AddonsDirectory.cpp | 4 |
7 files changed, 38 insertions, 39 deletions
diff --git a/xbmc/addons/AddonInstaller.cpp b/xbmc/addons/AddonInstaller.cpp index a282ecae5e..8cb106dea6 100644 --- a/xbmc/addons/AddonInstaller.cpp +++ b/xbmc/addons/AddonInstaller.cpp @@ -426,11 +426,7 @@ void CAddonInstaller::PrunePackageCache() void CAddonInstaller::InstallUpdates(bool includeBlacklisted /* = false */) { - VECADDONS addons = CAddonMgr::GetInstance().GetOutdated(); - if (addons.empty()) - return; - - for (const auto& addon : addons) + for (const auto& addon : GetAvailableUpdates()) { if (includeBlacklisted || !CAddonMgr::GetInstance().IsBlacklisted(addon->ID())) CAddonInstaller::GetInstance().InstallOrUpdate(addon->ID()); @@ -476,6 +472,32 @@ int64_t CAddonInstaller::EnumeratePackageFolder(std::map<std::string,CFileItemLi return size; } + +VECADDONS CAddonInstaller::GetAvailableUpdates() const +{ + CAddonDatabase database; + database.Open(); + + VECADDONS addons; + database.GetAddons(addons); + + auto isUpdated = [&](const AddonPtr& repoAddon) + { + AddonPtr localAddon; + if (!CAddonMgr::GetInstance().GetAddon(repoAddon->ID(), localAddon)) + return true; + return localAddon->Version() >= repoAddon->Version(); + }; + + addons.erase(std::remove_if(addons.begin(), addons.end(), isUpdated), addons.end()); + return addons; +} + +bool CAddonInstaller::HasAvailableUpdates() const +{ + return !GetAvailableUpdates().empty(); +} + CAddonInstallJob::CAddonInstallJob(const AddonPtr &addon, const AddonPtr &repo, const std::string &hash /* = "" */) : m_addon(addon), m_repo(repo), diff --git a/xbmc/addons/AddonInstaller.h b/xbmc/addons/AddonInstaller.h index abf58f78c8..3d94d373c9 100644 --- a/xbmc/addons/AddonInstaller.h +++ b/xbmc/addons/AddonInstaller.h @@ -36,6 +36,8 @@ public: bool IsDownloading() const; void GetInstallList(ADDON::VECADDONS &addons) const; + bool HasAvailableUpdates() const; + ADDON::VECADDONS GetAvailableUpdates() const; bool GetProgress(const std::string &addonID, unsigned int &percent) const; bool Cancel(const std::string &addonID); diff --git a/xbmc/addons/AddonManager.cpp b/xbmc/addons/AddonManager.cpp index ec60036099..c0f753f64e 100644 --- a/xbmc/addons/AddonManager.cpp +++ b/xbmc/addons/AddonManager.cpp @@ -456,25 +456,6 @@ bool CAddonMgr::ReloadSettings(const std::string &id) return false; } -VECADDONS CAddonMgr::GetOutdated() -{ - CSingleLock lock(m_critSection); - auto isUpdated = [&](const AddonPtr& addon) - { - return addon->Version() >= m_database.GetAddonVersion(addon->ID()).first; - }; - - VECADDONS addons; - GetAllAddons(addons, true); - addons.erase(std::remove_if(addons.begin(), addons.end(), isUpdated), addons.end()); - return addons; -} - -bool CAddonMgr::HasOutdatedAddons() -{ - return !GetOutdated().empty(); -} - bool CAddonMgr::GetAddons(const TYPE &type, VECADDONS &addons, bool enabled /* = true */) { CSingleLock lock(m_critSection); diff --git a/xbmc/addons/AddonManager.h b/xbmc/addons/AddonManager.h index 472a51ebea..536dbd6f53 100644 --- a/xbmc/addons/AddonManager.h +++ b/xbmc/addons/AddonManager.h @@ -98,13 +98,6 @@ namespace ADDON void RemoveFromUpdateableAddons(AddonPtr &pAddon); bool ReloadSettings(const std::string &id); - /*! \brief Get addons with available updates */ - VECADDONS GetOutdated(); - - /*! \brief Checks if there is any addon with available updates - \return True if there are outdated addons otherwise false - */ - bool HasOutdatedAddons(); std::string GetString(const std::string &id, const int number); std::string GetTranslatedString(const cp_cfg_element_t *root, const char *tag); diff --git a/xbmc/addons/GUIViewStateAddonBrowser.cpp b/xbmc/addons/GUIViewStateAddonBrowser.cpp index 7aa8ea9da5..f1adaa5dfb 100644 --- a/xbmc/addons/GUIViewStateAddonBrowser.cpp +++ b/xbmc/addons/GUIViewStateAddonBrowser.cpp @@ -25,6 +25,7 @@ #include "guilib/WindowIDs.h" #include "view/ViewState.h" #include "addons/Addon.h" +#include "addons/AddonInstaller.h" #include "addons/AddonManager.h" using namespace XFILE; @@ -68,7 +69,7 @@ VECSOURCES& CGUIViewStateAddonBrowser::GetSources() share.strName = g_localizeStrings.Get(24998); m_sources.push_back(share); } - if (CAddonMgr::GetInstance().HasOutdatedAddons()) + if (CAddonInstaller::GetInstance().HasAvailableUpdates()) { CMediaSource share; share.strPath = "addons://outdated/"; diff --git a/xbmc/addons/RepositoryUpdater.cpp b/xbmc/addons/RepositoryUpdater.cpp index 37ddf5f7cb..3270bdcd1c 100644 --- a/xbmc/addons/RepositoryUpdater.cpp +++ b/xbmc/addons/RepositoryUpdater.cpp @@ -66,19 +66,19 @@ void CRepositoryUpdater::OnJobComplete(unsigned int jobID, bool success, CJob* j if (CSettings::GetInstance().GetInt(CSettings::SETTING_ADDONS_AUTOUPDATES) == AUTO_UPDATES_NOTIFY) { - VECADDONS hasUpdate = CAddonMgr::GetInstance().GetOutdated(); - if (!hasUpdate.empty()) + VECADDONS updates = CAddonInstaller::GetInstance().GetAvailableUpdates(); + if (!updates.empty()) { - if (hasUpdate.size() == 1) + if (updates.size() == 1) CGUIDialogKaiToast::QueueNotification( - hasUpdate[0]->Icon(), hasUpdate[0]->Name(), g_localizeStrings.Get(24068), + updates[0]->Icon(), updates[0]->Name(), g_localizeStrings.Get(24068), TOAST_DISPLAY_TIME, false, TOAST_DISPLAY_TIME); else CGUIDialogKaiToast::QueueNotification( "", g_localizeStrings.Get(24001), g_localizeStrings.Get(24061), TOAST_DISPLAY_TIME, false, TOAST_DISPLAY_TIME); - for (const auto &addon : hasUpdate) + for (const auto &addon : updates) CEventLog::GetInstance().Add(EventPtr(new CAddonManagementEvent(addon, 24068))); } } diff --git a/xbmc/filesystem/AddonsDirectory.cpp b/xbmc/filesystem/AddonsDirectory.cpp index 00ccfd86f9..94a80c55c8 100644 --- a/xbmc/filesystem/AddonsDirectory.cpp +++ b/xbmc/filesystem/AddonsDirectory.cpp @@ -297,7 +297,7 @@ static void DependencyAddons(const CURL& path, CFileItemList &items) static void OutdatedAddons(const CURL& path, CFileItemList &items) { - VECADDONS addons = CAddonMgr::GetInstance().GetOutdated(); + VECADDONS addons = CAddonInstaller::GetInstance().GetAvailableUpdates(); CAddonsDirectory::GenerateAddonListing(path, addons, items, g_localizeStrings.Get(24043)); if (items.Size() > 1) @@ -477,7 +477,7 @@ void CAddonsDirectory::GenerateAddonListing(const CURL &path, const VECADDONS& addons, CFileItemList &items, const std::string label) { std::set<std::string> outdated; - for (const auto& addon : CAddonMgr::GetInstance().GetOutdated()) + for (const auto& addon : CAddonInstaller::GetInstance().GetAvailableUpdates()) outdated.insert(addon->ID()); items.ClearItems(); |