aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Amland <thomas.amland@gmail.com>2015-12-29 17:15:41 +0100
committerThomas Amland <thomas.amland@gmail.com>2016-01-04 20:02:16 +0100
commitcb43b99f455f22649f1979da7b6ac95f1cf2f5df (patch)
tree0a06d6ab1f495bf207dc91ab072309e5c8d96217
parent7e84c1d3bf5fecc7b425f2ec0f4fd7a0a8179a86 (diff)
[addons] show repository version instead of local one in 'available updates'
-rw-r--r--xbmc/addons/AddonInstaller.cpp32
-rw-r--r--xbmc/addons/AddonInstaller.h2
-rw-r--r--xbmc/addons/AddonManager.cpp19
-rw-r--r--xbmc/addons/AddonManager.h7
-rw-r--r--xbmc/addons/GUIViewStateAddonBrowser.cpp3
-rw-r--r--xbmc/addons/RepositoryUpdater.cpp10
-rw-r--r--xbmc/filesystem/AddonsDirectory.cpp4
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();