[PVR][Estuary] Timer settings dialog: Show client name in timer type selection dialog...
[xbmc.git] / xbmc / interfaces / legacy / Addon.cpp
blob4b4db1e10824c3ac33a9a6ba601da427f7192441
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 */
9 #include "Addon.h"
11 #include "GUIUserMessages.h"
12 #include "LanguageHook.h"
13 #include "ServiceBroker.h"
14 #include "addons/AddonManager.h"
15 #include "addons/addoninfo/AddonInfo.h"
16 #include "addons/gui/GUIDialogAddonSettings.h"
17 #include "addons/settings/AddonSettings.h"
18 #include "guilib/GUIComponent.h"
19 #include "guilib/GUIWindowManager.h"
20 #include "guilib/LocalizeStrings.h"
21 #include "utils/StringUtils.h"
23 using namespace ADDON;
25 namespace XBMCAddon
27 namespace xbmcaddon
29 String Addon::getDefaultId() { return languageHook == NULL ? emptyString : languageHook->GetAddonId(); }
31 String Addon::getAddonVersion() { return languageHook == NULL ? emptyString : languageHook->GetAddonVersion(); }
33 bool Addon::UpdateSettingInActiveDialog(const char* id, const String& value)
35 ADDON::AddonPtr addon(pAddon);
36 if (!CServiceBroker::GetGUI()->GetWindowManager().IsWindowActive(WINDOW_DIALOG_ADDON_SETTINGS))
37 return false;
39 CGUIDialogAddonSettings* dialog = CServiceBroker::GetGUI()->GetWindowManager().GetWindow<CGUIDialogAddonSettings>(WINDOW_DIALOG_ADDON_SETTINGS);
40 if (dialog->GetCurrentAddonID() != addon->ID())
41 return false;
43 CGUIMessage message(GUI_MSG_SETTING_UPDATED, 0, 0);
44 std::vector<std::string> params;
45 params.emplace_back(id);
46 params.push_back(value);
47 message.SetStringParams(params);
48 message.SetParam1(ADDON_SETTINGS_ID);
49 CServiceBroker::GetGUI()->GetWindowManager().SendThreadMessage(message, WINDOW_DIALOG_ADDON_SETTINGS);
51 return true;
54 Addon::Addon(const char* cid)
56 String id(cid ? cid : emptyString);
58 // if the id wasn't passed then get the id from
59 // the global dictionary
60 if (id.empty())
61 id = getDefaultId();
63 // if we still don't have an id then bail
64 if (id.empty())
65 throw AddonException("No valid addon id could be obtained. None was passed and the script "
66 "wasn't executed in a normal Kodi manner.");
68 if (!CServiceBroker::GetAddonMgr().GetAddon(id, pAddon, OnlyEnabled::CHOICE_YES))
69 throw AddonException("Unknown addon id '%s'.", id.c_str());
71 CServiceBroker::GetAddonMgr().AddToUpdateableAddons(pAddon);
74 Addon::~Addon()
76 CServiceBroker::GetAddonMgr().RemoveFromUpdateableAddons(pAddon);
79 String Addon::getLocalizedString(int id)
81 return g_localizeStrings.GetAddonString(pAddon->ID(), id);
84 Settings* Addon::getSettings()
86 return new Settings(pAddon->GetSettings());
89 String Addon::getSetting(const char* id)
91 return pAddon->GetSetting(id);
94 bool Addon::getSettingBool(const char* id)
96 bool value = false;
97 if (!pAddon->GetSettingBool(id, value))
98 throw XBMCAddon::WrongTypeException("Invalid setting type");
100 return value;
103 int Addon::getSettingInt(const char* id)
105 int value = 0;
106 if (!pAddon->GetSettingInt(id, value))
107 throw XBMCAddon::WrongTypeException("Invalid setting type");
109 return value;
112 double Addon::getSettingNumber(const char* id)
114 double value = 0.0;
115 if (!pAddon->GetSettingNumber(id, value))
116 throw XBMCAddon::WrongTypeException("Invalid setting type");
118 return value;
121 String Addon::getSettingString(const char* id)
123 std::string value;
124 if (!pAddon->GetSettingString(id, value))
125 throw XBMCAddon::WrongTypeException("Invalid setting type");
127 return value;
130 void Addon::setSetting(const char* id, const String& value)
132 DelayedCallGuard dcguard(languageHook);
133 ADDON::AddonPtr addon(pAddon);
134 if (!UpdateSettingInActiveDialog(id, value))
136 addon->UpdateSetting(id, value);
137 addon->SaveSettings();
141 bool Addon::setSettingBool(const char* id, bool value)
143 DelayedCallGuard dcguard(languageHook);
144 ADDON::AddonPtr addon(pAddon);
145 if (UpdateSettingInActiveDialog(id, value ? "true" : "false"))
146 return true;
148 if (!addon->UpdateSettingBool(id, value))
149 throw XBMCAddon::WrongTypeException("Invalid setting type");
151 addon->SaveSettings();
153 return true;
156 bool Addon::setSettingInt(const char* id, int value)
158 DelayedCallGuard dcguard(languageHook);
159 ADDON::AddonPtr addon(pAddon);
160 if (UpdateSettingInActiveDialog(id, std::to_string(value)))
161 return true;
163 if (!addon->UpdateSettingInt(id, value))
164 throw XBMCAddon::WrongTypeException("Invalid setting type");
166 addon->SaveSettings();
168 return true;
171 bool Addon::setSettingNumber(const char* id, double value)
173 DelayedCallGuard dcguard(languageHook);
174 ADDON::AddonPtr addon(pAddon);
175 if (UpdateSettingInActiveDialog(id, StringUtils::Format("{:f}", value)))
176 return true;
178 if (!addon->UpdateSettingNumber(id, value))
179 throw XBMCAddon::WrongTypeException("Invalid setting type");
181 addon->SaveSettings();
183 return true;
186 bool Addon::setSettingString(const char* id, const String& value)
188 DelayedCallGuard dcguard(languageHook);
189 ADDON::AddonPtr addon(pAddon);
190 if (UpdateSettingInActiveDialog(id, value))
191 return true;
193 if (!addon->UpdateSettingString(id, value))
194 throw XBMCAddon::WrongTypeException("Invalid setting type");
196 addon->SaveSettings();
198 return true;
201 void Addon::openSettings()
203 DelayedCallGuard dcguard(languageHook);
204 // show settings dialog
205 ADDON::AddonPtr addon(pAddon);
206 CGUIDialogAddonSettings::ShowForAddon(addon);
209 String Addon::getAddonInfo(const char* id)
211 if (StringUtils::CompareNoCase(id, "author") == 0)
212 return pAddon->Author();
213 else if (StringUtils::CompareNoCase(id, "changelog") == 0)
214 return pAddon->ChangeLog();
215 else if (StringUtils::CompareNoCase(id, "description") == 0)
216 return pAddon->Description();
217 else if (StringUtils::CompareNoCase(id, "disclaimer") == 0)
218 return pAddon->Disclaimer();
219 else if (StringUtils::CompareNoCase(id, "fanart") == 0)
220 return pAddon->FanArt();
221 else if (StringUtils::CompareNoCase(id, "icon") == 0)
222 return pAddon->Icon();
223 else if (StringUtils::CompareNoCase(id, "id") == 0)
224 return pAddon->ID();
225 else if (StringUtils::CompareNoCase(id, "name") == 0)
226 return pAddon->Name();
227 else if (StringUtils::CompareNoCase(id, "path") == 0)
228 return pAddon->Path();
229 else if (StringUtils::CompareNoCase(id, "profile") == 0)
230 return pAddon->Profile();
231 else if (StringUtils::CompareNoCase(id, "stars") == 0)
232 return StringUtils::Format("-1");
233 else if (StringUtils::CompareNoCase(id, "summary") == 0)
234 return pAddon->Summary();
235 else if (StringUtils::CompareNoCase(id, "type") == 0)
236 return ADDON::CAddonInfo::TranslateType(pAddon->Type());
237 else if (StringUtils::CompareNoCase(id, "version") == 0)
238 return pAddon->Version().asString();
239 else
240 throw AddonException("'%s' is an invalid Id", id);