[Windows] Fix driver version detection of AMD RDNA+ GPU on Windows 10
[xbmc.git] / xbmc / addons / LanguageResource.cpp
blobc9ec0c8afc558596cb587fdca1fa41b14c6e1e71
1 /*
2 * Copyright (C) 2005-2018 Team Kodi
3 * This file is part of Kodi - https://kodi.tv
5 * SPDX-License-Identifier: GPL-2.0-or-later
6 * See LICENSES/README.md for more information.
7 */
8 #include "LanguageResource.h"
10 #include "LangInfo.h"
11 #include "ServiceBroker.h"
12 #include "addons/AddonManager.h"
13 #include "addons/Skin.h"
14 #include "addons/addoninfo/AddonType.h"
15 #include "guilib/GUIWindowManager.h"
16 #include "messaging/helpers/DialogHelper.h"
17 #include "settings/Settings.h"
18 #include "settings/SettingsComponent.h"
19 #include "utils/StringUtils.h"
20 #include "utils/Variant.h"
22 using namespace KODI::MESSAGING;
24 using KODI::MESSAGING::HELPERS::DialogResponse;
26 #define LANGUAGE_ADDON_PREFIX "resource.language."
28 namespace ADDON
31 CLanguageResource::CLanguageResource(const AddonInfoPtr& addonInfo)
32 : CResource(addonInfo, AddonType::RESOURCE_LANGUAGE)
34 // parse <extension> attributes
35 m_locale =
36 CLocale::FromString(Type(AddonType::RESOURCE_LANGUAGE)->GetValue("@locale").asString());
38 // parse <charsets>
39 const CAddonExtensions* charsetsElement =
40 Type(AddonType::RESOURCE_LANGUAGE)->GetElement("charsets");
41 if (charsetsElement != nullptr)
43 m_charsetGui = charsetsElement->GetValue("gui").asString();
44 m_forceUnicodeFont = charsetsElement->GetValue("gui@unicodefont").asBoolean();
45 m_charsetSubtitle = charsetsElement->GetValue("subtitle").asString();
48 // parse <dvd>
49 const CAddonExtensions* dvdElement = Type(AddonType::RESOURCE_LANGUAGE)->GetElement("dvd");
50 if (dvdElement != nullptr)
52 m_dvdLanguageMenu = dvdElement->GetValue("menu").asString();
53 m_dvdLanguageAudio = dvdElement->GetValue("audio").asString();
54 m_dvdLanguageSubtitle = dvdElement->GetValue("subtitle").asString();
56 // fall back to the language of the addon if a DVD language is not defined
57 if (m_dvdLanguageMenu.empty())
58 m_dvdLanguageMenu = m_locale.GetLanguageCode();
59 if (m_dvdLanguageAudio.empty())
60 m_dvdLanguageAudio = m_locale.GetLanguageCode();
61 if (m_dvdLanguageSubtitle.empty())
62 m_dvdLanguageSubtitle = m_locale.GetLanguageCode();
64 // parse <sorttokens>
65 const CAddonExtensions* sorttokensElement =
66 Type(AddonType::RESOURCE_LANGUAGE)->GetElement("sorttokens");
67 if (sorttokensElement != nullptr)
69 /* First loop goes around rows e.g.
70 * <token separators="'">L</token>
71 * <token>Le</token>
72 * ...
74 for (const auto& values : sorttokensElement->GetValues())
76 /* Second loop goes around the row parts, e.g.
77 * separators = "'"
78 * token = Le
80 std::string token = values.second.GetValue("token").asString();
81 std::string separators = values.second.GetValue("token@separators").asString();
82 if (!token.empty())
84 if (separators.empty())
85 separators = " ._";
87 for (auto separator : separators)
88 m_sortTokens.insert(token + separator);
94 bool CLanguageResource::IsInUse() const
96 return StringUtils::EqualsNoCase(CServiceBroker::GetSettingsComponent()->GetSettings()->GetString(CSettings::SETTING_LOCALE_LANGUAGE), ID());
99 void CLanguageResource::OnPostInstall(bool update, bool modal)
101 if (!g_SkinInfo)
102 return;
104 if (IsInUse() || (!update && !modal &&
105 (HELPERS::ShowYesNoDialogText(CVariant{Name()}, CVariant{24132}) ==
106 DialogResponse::CHOICE_YES)))
108 if (IsInUse())
109 g_langInfo.SetLanguage(ID());
110 else
111 CServiceBroker::GetSettingsComponent()->GetSettings()->SetString(CSettings::SETTING_LOCALE_LANGUAGE, ID());
115 bool CLanguageResource::IsAllowed(const std::string &file) const
117 return file.empty() ||
118 StringUtils::EqualsNoCase(file.c_str(), "langinfo.xml") ||
119 StringUtils::EqualsNoCase(file.c_str(), "strings.po");
122 std::string CLanguageResource::GetAddonId(const std::string& locale)
124 if (locale.empty())
125 return "";
127 std::string addonId = locale;
128 if (!StringUtils::StartsWith(addonId, LANGUAGE_ADDON_PREFIX))
129 addonId = LANGUAGE_ADDON_PREFIX + locale;
131 StringUtils::ToLower(addonId);
132 return addonId;
135 bool CLanguageResource::FindLegacyLanguage(const std::string &locale, std::string &legacyLanguage)
137 if (locale.empty())
138 return false;
140 std::string addonId = GetAddonId(locale);
142 AddonPtr addon;
143 if (!CServiceBroker::GetAddonMgr().GetAddon(addonId, addon, AddonType::RESOURCE_LANGUAGE,
144 OnlyEnabled::CHOICE_YES))
145 return false;
147 legacyLanguage = addon->Name();
148 return true;