From 373f3a60ea0ebcecd539c235307638478c9e50b5 Mon Sep 17 00:00:00 2001 From: spiff Date: Thu, 29 Mar 2012 22:58:37 +0200 Subject: [PATCH 1/2] added: field to xbmc.metadata extension point allows specifying the language(s) of the content the add-on provides --- xbmc/addons/Addon.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/xbmc/addons/Addon.cpp b/xbmc/addons/Addon.cpp index 095c4a2641b48..bc3fc913770af 100644 --- a/xbmc/addons/Addon.cpp +++ b/xbmc/addons/Addon.cpp @@ -151,6 +151,10 @@ AddonProps::AddonProps(const cp_extension_t *ext) description = CAddonMgr::Get().GetTranslatedString(metadata->configuration, "description"); disclaimer = CAddonMgr::Get().GetTranslatedString(metadata->configuration, "disclaimer"); license = CAddonMgr::Get().GetExtValue(metadata->configuration, "license"); + CStdString language; + language = CAddonMgr::Get().GetExtValue(metadata->configuration, "language"); + if (!language.IsEmpty()) + extrainfo.insert(make_pair("language",language)); broken = CAddonMgr::Get().GetExtValue(metadata->configuration, "broken"); EMPTY_IF("nofanart",fanart) EMPTY_IF("noicon",icon) From 5c8f8f1a659da594e9687e8f2a68c7d9a9ce3bf2 Mon Sep 17 00:00:00 2001 From: spiff Date: Sun, 15 Apr 2012 10:33:03 +0200 Subject: [PATCH 2/2] added: option to filter out foreign language add-ons in the add-on browser. English add-ons are always included. Setting defaults to false --- addons/skin.confluence/720p/AddonBrowser.xml | 7 +++ language/English/strings.xml | 1 + xbmc/addons/AddonDatabase.cpp | 4 ++ xbmc/addons/GUIWindowAddonBrowser.cpp | 46 +++++++++++++++++++- xbmc/settings/Settings.cpp | 3 ++ xbmc/settings/Settings.h | 1 + 6 files changed, 60 insertions(+), 2 deletions(-) diff --git a/addons/skin.confluence/720p/AddonBrowser.xml b/addons/skin.confluence/720p/AddonBrowser.xml index 7df9d8f5d388c..4a255ab60fc82 100644 --- a/addons/skin.confluence/720p/AddonBrowser.xml +++ b/addons/skin.confluence/720p/AddonBrowser.xml @@ -83,6 +83,13 @@ ButtonCommonValues + + Hide foreign + 0 + 210 + ButtonCommonValues + + CommonNowPlaying_Controls diff --git a/language/English/strings.xml b/language/English/strings.xml index 9a7fe5a6491f1..41f49ec9fdff1 100644 --- a/language/English/strings.xml +++ b/language/English/strings.xml @@ -2252,6 +2252,7 @@ To use this feature you must download an Add-on: Would you like to download this Add-on? Notifications + Hide foreign Library Mode diff --git a/xbmc/addons/AddonDatabase.cpp b/xbmc/addons/AddonDatabase.cpp index fe4e7b414bb5c..e1f00012b3b37 100644 --- a/xbmc/addons/AddonDatabase.cpp +++ b/xbmc/addons/AddonDatabase.cpp @@ -558,6 +558,10 @@ void CAddonDatabase::SetPropertiesFromAddon(const AddonPtr& addon, pItem->SetProperty("Addon.StarRating",starrating); pItem->SetProperty("Addon.Path", addon->Path()); pItem->SetProperty("Addon.Broken", addon->Props().broken); + std::map::iterator it = + addon->Props().extrainfo.find("language"); + if (it != addon->Props().extrainfo.end()) + pItem->SetProperty("Addon.Language", it->second); } bool CAddonDatabase::DisableAddon(const CStdString &addonID, bool disable /* = true */) diff --git a/xbmc/addons/GUIWindowAddonBrowser.cpp b/xbmc/addons/GUIWindowAddonBrowser.cpp index 6d612675f2394..1851584312bcf 100644 --- a/xbmc/addons/GUIWindowAddonBrowser.cpp +++ b/xbmc/addons/GUIWindowAddonBrowser.cpp @@ -48,9 +48,11 @@ #include "settings/AdvancedSettings.h" #include "storage/MediaManager.h" #include "settings/GUISettings.h" +#include "LangInfo.h" -#define CONTROL_AUTOUPDATE 5 -#define CONTROL_SHUTUP 6 +#define CONTROL_AUTOUPDATE 5 +#define CONTROL_SHUTUP 6 +#define CONTROL_FOREIGNFILTER 7 using namespace ADDON; using namespace XFILE; @@ -100,6 +102,13 @@ bool CGUIWindowAddonBrowser::OnMessage(CGUIMessage& message) g_settings.Save(); return true; } + else if (iControl == CONTROL_FOREIGNFILTER) + { + g_settings.m_bAddonForeignFilter = !g_settings.m_bAddonForeignFilter; + g_settings.Save(); + Update(m_vecItems->GetPath()); + return true; + } else if (m_viewControl.HasControl(iControl)) // list/thumb control { // get selected item @@ -246,9 +255,23 @@ void CGUIWindowAddonBrowser::UpdateButtons() { SET_CONTROL_SELECTED(GetID(),CONTROL_AUTOUPDATE,g_settings.m_bAddonAutoUpdate); SET_CONTROL_SELECTED(GetID(),CONTROL_SHUTUP,g_settings.m_bAddonNotifications); + SET_CONTROL_SELECTED(GetID(),CONTROL_FOREIGNFILTER,g_settings.m_bAddonForeignFilter); CGUIMediaWindow::UpdateButtons(); } +static bool FilterVar(bool valid, const CVariant& variant, + const std::string& check) +{ + if (!valid) + return false; + + if (variant.isNull() || variant.asString().empty()) + return false; + + std::string regions = variant.asString(); + return regions.find(check) == std::string::npos; +} + bool CGUIWindowAddonBrowser::GetDirectory(const CStdString& strDirectory, CFileItemList& items) { @@ -275,7 +298,26 @@ bool CGUIWindowAddonBrowser::GetDirectory(const CStdString& strDirectory, } else + { result = CGUIMediaWindow::GetDirectory(strDirectory,items); + if (g_settings.m_bAddonForeignFilter) + { + int i=0; + while (i < items.Size()) + { + if (FilterVar(g_settings.m_bAddonForeignFilter, + items[i]->GetProperty("Addon.Language"), "en") || + FilterVar(g_settings.m_bAddonForeignFilter, + items[i]->GetProperty("Addon.Language"), + g_langInfo.GetLanguageLocale())) + { + items.Remove(i); + } + else + i++; + } + } + } if (strDirectory.IsEmpty() && CAddonInstaller::Get().IsDownloading()) { diff --git a/xbmc/settings/Settings.cpp b/xbmc/settings/Settings.cpp index 35578530632b7..f4a179d8e0587 100644 --- a/xbmc/settings/Settings.cpp +++ b/xbmc/settings/Settings.cpp @@ -93,6 +93,7 @@ void CSettings::Initialize() m_bStartVideoWindowed = false; m_bAddonAutoUpdate = true; m_bAddonNotifications = true; + m_bAddonForeignFilter = false; m_nVolumeLevel = 0; m_dynamicRangeCompressionLevel = 0; @@ -667,6 +668,7 @@ bool CSettings::LoadSettings(const CStdString& strSettingsFile) GetInteger(pElement, "httpapibroadcastport", m_HttpApiBroadcastPort, 8278, 1, 65535); XMLUtils::GetBoolean(pElement, "addonautoupdate", m_bAddonAutoUpdate); XMLUtils::GetBoolean(pElement, "addonnotifications", m_bAddonNotifications); + XMLUtils::GetBoolean(pElement, "addonforeignfilter", m_bAddonForeignFilter); } pElement = pRootElement->FirstChildElement("defaultvideosettings"); @@ -870,6 +872,7 @@ bool CSettings::SaveSettings(const CStdString& strSettingsFile, CGUISettings *lo XMLUtils::SetInt(pNode, "httpapibroadcastlevel", m_HttpApiBroadcastLevel); XMLUtils::SetBoolean(pNode, "addonautoupdate", m_bAddonAutoUpdate); XMLUtils::SetBoolean(pNode, "addonnotifications", m_bAddonNotifications); + XMLUtils::SetBoolean(pNode, "addonforeignfilter", m_bAddonForeignFilter); // default video settings TiXmlElement videoSettingsNode("defaultvideosettings"); diff --git a/xbmc/settings/Settings.h b/xbmc/settings/Settings.h index 61428b05e803b..8ca148324b08f 100644 --- a/xbmc/settings/Settings.h +++ b/xbmc/settings/Settings.h @@ -208,6 +208,7 @@ class CSettings bool m_bStartVideoWindowed; bool m_bAddonAutoUpdate; bool m_bAddonNotifications; + bool m_bAddonForeignFilter; int m_iVideoStartWindow;