aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authortamland <thomas.amland@gmail.com>2016-01-04 22:02:20 +0100
committertamland <thomas.amland@gmail.com>2016-01-04 22:02:20 +0100
commitafed08a9f2f986bd5aaf65b39f80a54ed9696d5d (patch)
tree0b9c94106ed69f224ee2f570e8b96e46dcd98018
parentc5540d71f6d48fc01cc90b7b02080eada4809b39 (diff)
parentcb43b99f455f22649f1979da7b6ac95f1cf2f5df (diff)
Merge pull request #8705 from tamland/addon_available_updates
[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();