diff options
author | Kai Sommerfeld <kai.sommerfeld@gmx.com> | 2020-10-29 11:16:29 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-10-29 11:16:29 +0100 |
commit | 7c3cef3e0389c93d2537262011441a67d039d19f (patch) | |
tree | 3b9352953c6de3736247523503ea2e49c6f154cb | |
parent | 25e85a2d920f64880ce7aea19dbadbbe7bffdf2b (diff) | |
parent | fc4c1094a3bc89c3cb7a7138e5286aa60a4f82c3 (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.h | 1 | ||||
-rw-r--r-- | xbmc/addons/IAddon.h | 1 | ||||
-rw-r--r-- | xbmc/addons/addoninfo/AddonInfo.cpp | 16 | ||||
-rw-r--r-- | xbmc/addons/addoninfo/AddonInfo.h | 3 | ||||
-rw-r--r-- | xbmc/guilib/guiinfo/AddonsGUIInfo.cpp | 5 |
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()) |