aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKai Sommerfeld <kai.sommerfeld@gmx.com>2020-10-29 11:16:29 +0100
committerGitHub <noreply@github.com>2020-10-29 11:16:29 +0100
commit7c3cef3e0389c93d2537262011441a67d039d19f (patch)
tree3b9352953c6de3736247523503ea2e49c6f154cb
parent25e85a2d920f64880ce7aea19dbadbbe7bffdf2b (diff)
parentfc4c1094a3bc89c3cb7a7138e5286aa60a4f82c3 (diff)
Merge pull request #18663 from ksooo/guiinfo-listitem-addon-origin
[addons][guiinfo] Speedup LISTITEM_ADDON_ORIGIN guiinfo label calculation
-rw-r--r--xbmc/addons/Addon.h1
-rw-r--r--xbmc/addons/IAddon.h1
-rw-r--r--xbmc/addons/addoninfo/AddonInfo.cpp16
-rw-r--r--xbmc/addons/addoninfo/AddonInfo.h3
-rw-r--r--xbmc/guilib/guiinfo/AddonsGUIInfo.cpp5
5 files changed, 23 insertions, 3 deletions
diff --git a/xbmc/addons/Addon.h b/xbmc/addons/Addon.h
index 6b72ca62c2..06ba3d3e46 100644
--- a/xbmc/addons/Addon.h
+++ b/xbmc/addons/Addon.h
@@ -107,6 +107,7 @@ public:
CDateTime LastUpdated() const override { return m_addonInfo->LastUpdated(); }
CDateTime LastUsed() const override { return m_addonInfo->LastUsed(); }
std::string Origin() const override { return m_addonInfo->Origin(); }
+ std::string OriginName() const override { return m_addonInfo->OriginName(); }
uint64_t PackageSize() const override { return m_addonInfo->PackageSize(); }
const InfoMap& ExtraInfo() const override { return m_addonInfo->ExtraInfo(); }
const std::vector<DependencyInfo>& GetDependencies() const override { return m_addonInfo->GetDependencies(); }
diff --git a/xbmc/addons/IAddon.h b/xbmc/addons/IAddon.h
index 743ba9393f..ae69e67902 100644
--- a/xbmc/addons/IAddon.h
+++ b/xbmc/addons/IAddon.h
@@ -60,6 +60,7 @@ namespace ADDON
virtual CDateTime LastUpdated() const =0;
virtual CDateTime LastUsed() const =0;
virtual std::string Origin() const =0;
+ virtual std::string OriginName() const = 0;
virtual uint64_t PackageSize() const =0;
virtual const InfoMap &ExtraInfo() const =0;
virtual bool HasSettings() =0;
diff --git a/xbmc/addons/addoninfo/AddonInfo.cpp b/xbmc/addons/addoninfo/AddonInfo.cpp
index 33ff2198ef..c32bbc9fc3 100644
--- a/xbmc/addons/addoninfo/AddonInfo.cpp
+++ b/xbmc/addons/addoninfo/AddonInfo.cpp
@@ -9,6 +9,9 @@
#include "AddonInfo.h"
#include "LangInfo.h"
+#include "ServiceBroker.h"
+#include "addons/AddonManager.h"
+#include "addons/IAddon.h"
#include "guilib/LocalizeStrings.h"
#include <algorithm>
@@ -70,6 +73,19 @@ static const TypeMapping types[] =
};
// clang-format on
+const std::string& CAddonInfo::OriginName() const
+{
+ if (!m_originName)
+ {
+ ADDON::AddonPtr origin;
+ if (CServiceBroker::GetAddonMgr().GetAddon(m_origin, origin, ADDON::ADDON_UNKNOWN, false))
+ m_originName = std::make_unique<std::string>(origin->Name());
+ else
+ m_originName = std::make_unique<std::string>(); // remember we tried to fetch the name
+ }
+ return *m_originName;
+}
+
/**
* static public helper functions
*
diff --git a/xbmc/addons/addoninfo/AddonInfo.h b/xbmc/addons/addoninfo/AddonInfo.h
index 56fa86d0d9..d2aa892074 100644
--- a/xbmc/addons/addoninfo/AddonInfo.h
+++ b/xbmc/addons/addoninfo/AddonInfo.h
@@ -196,6 +196,8 @@ public:
return GetTranslatedText(m_lifecycleStateDescription);
}
const std::string& Origin() const { return m_origin; }
+ const std::string& OriginName() const;
+
const InfoMap& ExtraInfo() const { return m_extrainfo; }
bool MeetsVersion(const AddonVersion& versionMin, const AddonVersion& version) const;
@@ -246,6 +248,7 @@ private:
CDateTime m_lastUpdated;
CDateTime m_lastUsed;
std::string m_origin;
+ mutable std::unique_ptr<std::string> m_originName; // @todo use std::optional once we use c++17
uint64_t m_packageSize = 0;
std::string m_libname;
InfoMap m_extrainfo;
diff --git a/xbmc/guilib/guiinfo/AddonsGUIInfo.cpp b/xbmc/guilib/guiinfo/AddonsGUIInfo.cpp
index da16d960e3..e8af7ae1d6 100644
--- a/xbmc/guilib/guiinfo/AddonsGUIInfo.cpp
+++ b/xbmc/guilib/guiinfo/AddonsGUIInfo.cpp
@@ -112,10 +112,9 @@ bool CAddonsGUIInfo::GetLabel(std::string& value, const CFileItem *item, int con
value = g_localizeStrings.Get(24992);
return true;
}
- ADDON::AddonPtr origin;
- if (CServiceBroker::GetAddonMgr().GetAddon(item->GetAddonInfo()->Origin(), origin, ADDON::ADDON_UNKNOWN, false))
+ if (!item->GetAddonInfo()->OriginName().empty())
{
- value = origin->Name();
+ value = item->GetAddonInfo()->OriginName();
return true;
}
else if (!item->GetAddonInfo()->Origin().empty())