1 /*
2 * Copyright (C) 2015-2018 Team Kodi
3 * This file is part of Kodi - https://kodi.tv
4 *
5 * SPDX-License-Identifier: GPL-2.0-or-later
6 * See LICENSES/README.md for more information.
7 */
8
9 #include "Progress.h"
10
11 #include "ServiceBroker.h"
12 #include "addons/binary-addons/AddonDll.h"
13 #include "addons/kodi-dev-kit/include/kodi/gui/dialogs/Progress.h"
14 #include "dialogs/GUIDialogProgress.h"
15 #include "guilib/GUIComponent.h"
16 #include "guilib/GUIWindowManager.h"
17 #include "utils/Variant.h"
18 #include "utils/log.h"
19
20 namespace ADDON
21 {
22
Init(AddonGlobalInterface * addonInterface)23 void Interface_GUIDialogProgress::Init(AddonGlobalInterface* addonInterface)
24 {
25 addonInterface->toKodi->kodi_gui->dialogProgress =
26 new AddonToKodiFuncTable_kodi_gui_dialogProgress();
27
28 addonInterface->toKodi->kodi_gui->dialogProgress->new_dialog = new_dialog;
29 addonInterface->toKodi->kodi_gui->dialogProgress->delete_dialog = delete_dialog;
30 addonInterface->toKodi->kodi_gui->dialogProgress->open = open;
31 addonInterface->toKodi->kodi_gui->dialogProgress->set_heading = set_heading;
32 addonInterface->toKodi->kodi_gui->dialogProgress->set_line = set_line;
33 addonInterface->toKodi->kodi_gui->dialogProgress->set_can_cancel = set_can_cancel;
34 addonInterface->toKodi->kodi_gui->dialogProgress->is_canceled = is_canceled;
35 addonInterface->toKodi->kodi_gui->dialogProgress->set_percentage = set_percentage;
36 addonInterface->toKodi->kodi_gui->dialogProgress->get_percentage = get_percentage;
37 addonInterface->toKodi->kodi_gui->dialogProgress->show_progress_bar = show_progress_bar;
38 addonInterface->toKodi->kodi_gui->dialogProgress->set_progress_max = set_progress_max;
39 addonInterface->toKodi->kodi_gui->dialogProgress->set_progress_advance = set_progress_advance;
40 addonInterface->toKodi->kodi_gui->dialogProgress->abort = abort;
41 }
42
DeInit(AddonGlobalInterface * addonInterface)43 void Interface_GUIDialogProgress::DeInit(AddonGlobalInterface* addonInterface)
44 {
45 delete addonInterface->toKodi->kodi_gui->dialogProgress;
46 }
47
new_dialog(KODI_HANDLE kodiBase)48 KODI_GUI_HANDLE Interface_GUIDialogProgress::new_dialog(KODI_HANDLE kodiBase)
49 {
50 CAddonDll* addon = static_cast<CAddonDll*>(kodiBase);
51 if (!addon)
52 {
53 CLog::Log(LOGERROR, "Interface_GUIDialogProgress::{} - invalid data", __func__);
54 return nullptr;
55 }
56
57 CGUIDialogProgress* dialog =
58 CServiceBroker::GetGUI()->GetWindowManager().GetWindow<CGUIDialogProgress>(
59 WINDOW_DIALOG_PROGRESS);
60 if (!dialog)
61 {
62 CLog::Log(LOGERROR,
63 "Interface_GUIDialogProgress::{} - invalid handler data (dialog='{}') on addon '{}'",
64 __func__, static_cast<void*>(dialog), addon->ID());
65 return nullptr;
66 }
67
68 return dialog;
69 }
70
delete_dialog(KODI_HANDLE kodiBase,KODI_GUI_HANDLE handle)71 void Interface_GUIDialogProgress::delete_dialog(KODI_HANDLE kodiBase, KODI_GUI_HANDLE handle)
72 {
73 CAddonDll* addon = static_cast<CAddonDll*>(kodiBase);
74 if (!addon)
75 {
76 CLog::Log(LOGERROR, "Interface_GUIDialogProgress::{} - invalid data", __func__);
77 return;
78 }
79
80 if (!handle)
81 {
82 CLog::Log(LOGERROR,
83 "Interface_GUIDialogProgress::{} - invalid handler data (handle='{}') on addon '{}'",
84 __func__, handle, addon->ID());
85 return;
86 }
87
88 static_cast<CGUIDialogProgress*>(handle)->Close();
89 }
90
open(KODI_HANDLE kodiBase,KODI_GUI_HANDLE handle)91 void Interface_GUIDialogProgress::open(KODI_HANDLE kodiBase, KODI_GUI_HANDLE handle)
92 {
93 CAddonDll* addon = static_cast<CAddonDll*>(kodiBase);
94 if (!addon)
95 {
96 CLog::Log(LOGERROR, "Interface_GUIDialogProgress::{} - invalid data", __func__);
97 return;
98 }
99
100 if (!handle)
101 {
102 CLog::Log(LOGERROR,
103 "Interface_GUIDialogProgress::{} - invalid handler data (handle='{}') on addon '{}'",
104 __func__, handle, addon->ID());
105 return;
106 }
107
108 static_cast<CGUIDialogProgress*>(handle)->Open();
109 }
110
set_heading(KODI_HANDLE kodiBase,KODI_GUI_HANDLE handle,const char * heading)111 void Interface_GUIDialogProgress::set_heading(KODI_HANDLE kodiBase,
112 KODI_GUI_HANDLE handle,
113 const char* heading)
114 {
115 CAddonDll* addon = static_cast<CAddonDll*>(kodiBase);
116 if (!addon)
117 {
118 CLog::Log(LOGERROR, "Interface_GUIDialogProgress::{} - invalid data", __func__);
119 return;
120 }
121
122 if (!handle || !heading)
123 {
124 CLog::Log(LOGERROR,
125 "Interface_GUIDialogProgress::{} - invalid handler data (handle='{}', heading='{}') "
126 "on addon '{}'",
127 __func__, handle, static_cast<const void*>(heading), addon->ID());
128 return;
129 }
130
131 static_cast<CGUIDialogProgress*>(handle)->SetHeading(heading);
132 }
133
set_line(KODI_HANDLE kodiBase,KODI_GUI_HANDLE handle,unsigned int line,const char * text)134 void Interface_GUIDialogProgress::set_line(KODI_HANDLE kodiBase,
135 KODI_GUI_HANDLE handle,
136 unsigned int line,
137 const char* text)
138 {
139 CAddonDll* addon = static_cast<CAddonDll*>(kodiBase);
140 if (!addon)
141 {
142 CLog::Log(LOGERROR, "Interface_GUIDialogProgress::{} - invalid data", __func__);
143 return;
144 }
145
146 if (!handle || !text)
147 {
148 CLog::Log(LOGERROR,
149 "Interface_GUIDialogProgress::{} - invalid handler data (handle='{}', text='{}') on "
150 "addon '{}'",
151 __func__, handle, static_cast<const void*>(text), addon->ID());
152 return;
153 }
154
155 static_cast<CGUIDialogProgress*>(handle)->SetLine(line, text);
156 }
157
set_can_cancel(KODI_HANDLE kodiBase,KODI_GUI_HANDLE handle,bool canCancel)158 void Interface_GUIDialogProgress::set_can_cancel(KODI_HANDLE kodiBase,
159 KODI_GUI_HANDLE handle,
160 bool canCancel)
161 {
162 CAddonDll* addon = static_cast<CAddonDll*>(kodiBase);
163 if (!addon)
164 {
165 CLog::Log(LOGERROR, "Interface_GUIDialogProgress::{} - invalid data", __func__);
166 return;
167 }
168
169 if (!handle)
170 {
171 CLog::Log(LOGERROR,
172 "Interface_GUIDialogProgress::{} - invalid handler data (handle='{}') on addon '{}'",
173 __func__, handle, addon->ID());
174 return;
175 }
176
177 static_cast<CGUIDialogProgress*>(handle)->SetCanCancel(canCancel);
178 }
179
is_canceled(KODI_HANDLE kodiBase,KODI_GUI_HANDLE handle)180 bool Interface_GUIDialogProgress::is_canceled(KODI_HANDLE kodiBase, KODI_GUI_HANDLE handle)
181 {
182 CAddonDll* addon = static_cast<CAddonDll*>(kodiBase);
183 if (!addon)
184 {
185 CLog::Log(LOGERROR, "Interface_GUIDialogProgress::{} - invalid data", __func__);
186 return false;
187 }
188
189 if (!handle)
190 {
191 CLog::Log(LOGERROR,
192 "Interface_GUIDialogProgress::{} - invalid handler data (handle='{}') on addon '{}'",
193 __func__, handle, addon->ID());
194 return false;
195 }
196
197 return static_cast<CGUIDialogProgress*>(handle)->IsCanceled();
198 }
199
set_percentage(KODI_HANDLE kodiBase,KODI_GUI_HANDLE handle,int percentage)200 void Interface_GUIDialogProgress::set_percentage(KODI_HANDLE kodiBase,
201 KODI_GUI_HANDLE handle,
202 int percentage)
203 {
204 CAddonDll* addon = static_cast<CAddonDll*>(kodiBase);
205 if (!addon)
206 {
207 CLog::Log(LOGERROR, "Interface_GUIDialogProgress::{} - invalid data", __func__);
208 return;
209 }
210
211 if (!handle)
212 {
213 CLog::Log(LOGERROR,
214 "Interface_GUIDialogProgress::{} - invalid handler data (handle='{}') on addon '{}'",
215 __func__, handle, addon->ID());
216 return;
217 }
218
219 static_cast<CGUIDialogProgress*>(handle)->SetPercentage(percentage);
220 }
221
get_percentage(KODI_HANDLE kodiBase,KODI_GUI_HANDLE handle)222 int Interface_GUIDialogProgress::get_percentage(KODI_HANDLE kodiBase, KODI_GUI_HANDLE handle)
223 {
224 CAddonDll* addon = static_cast<CAddonDll*>(kodiBase);
225 if (!addon)
226 {
227 CLog::Log(LOGERROR, "Interface_GUIDialogProgress::{} - invalid data", __func__);
228 return 0;
229 }
230
231 if (!handle)
232 {
233 CLog::Log(LOGERROR,
234 "Interface_GUIDialogProgress::{} - invalid handler data (handle='{}') on addon '{}'",
235 __func__, handle, addon->ID());
236 return 0;
237 }
238
239 return static_cast<CGUIDialogProgress*>(handle)->GetPercentage();
240 }
241
show_progress_bar(KODI_HANDLE kodiBase,KODI_GUI_HANDLE handle,bool onOff)242 void Interface_GUIDialogProgress::show_progress_bar(KODI_HANDLE kodiBase,
243 KODI_GUI_HANDLE handle,
244 bool onOff)
245 {
246 CAddonDll* addon = static_cast<CAddonDll*>(kodiBase);
247 if (!addon)
248 {
249 CLog::Log(LOGERROR, "Interface_GUIDialogProgress::{} - invalid data", __func__);
250 return;
251 }
252
253 if (!handle)
254 {
255 CLog::Log(LOGERROR,
256 "Interface_GUIDialogProgress::{} - invalid handler data (handle='{}') on addon '{}'",
257 __func__, handle, addon->ID());
258 return;
259 }
260
261 static_cast<CGUIDialogProgress*>(handle)->ShowProgressBar(onOff);
262 }
263
set_progress_max(KODI_HANDLE kodiBase,KODI_GUI_HANDLE handle,int max)264 void Interface_GUIDialogProgress::set_progress_max(KODI_HANDLE kodiBase,
265 KODI_GUI_HANDLE handle,
266 int max)
267 {
268 CAddonDll* addon = static_cast<CAddonDll*>(kodiBase);
269 if (!addon)
270 {
271 CLog::Log(LOGERROR, "Interface_GUIDialogProgress::{} - invalid data", __func__);
272 return;
273 }
274
275 if (!handle)
276 {
277 CLog::Log(LOGERROR,
278 "Interface_GUIDialogProgress::{} - invalid handler data (handle='{}') on addon '{}'",
279 __func__, handle, addon->ID());
280 return;
281 }
282
283 static_cast<CGUIDialogProgress*>(handle)->SetProgressMax(max);
284 }
285
set_progress_advance(KODI_HANDLE kodiBase,KODI_GUI_HANDLE handle,int nSteps)286 void Interface_GUIDialogProgress::set_progress_advance(KODI_HANDLE kodiBase,
287 KODI_GUI_HANDLE handle,
288 int nSteps)
289 {
290 CAddonDll* addon = static_cast<CAddonDll*>(kodiBase);
291 if (!addon)
292 {
293 CLog::Log(LOGERROR, "Interface_GUIDialogProgress::{} - invalid data", __func__);
294 return;
295 }
296
297 if (!handle)
298 {
299 CLog::Log(LOGERROR,
300 "Interface_GUIDialogProgress::{} - invalid handler data (handle='{}') on addon '{}'",
301 __func__, handle, addon->ID());
302 return;
303 }
304
305 static_cast<CGUIDialogProgress*>(handle)->SetProgressAdvance(nSteps);
306 }
307
abort(KODI_HANDLE kodiBase,KODI_GUI_HANDLE handle)308 bool Interface_GUIDialogProgress::abort(KODI_HANDLE kodiBase, KODI_GUI_HANDLE handle)
309 {
310 CAddonDll* addon = static_cast<CAddonDll*>(kodiBase);
311 if (!addon)
312 {
313 CLog::Log(LOGERROR, "Interface_GUIDialogProgress::{} - invalid data", __func__);
314 return false;
315 }
316
317 if (!handle)
318 {
319 CLog::Log(LOGERROR,
320 "Interface_GUIDialogProgress::{} - invalid handler data (handle='{}') on addon '{}'",
321 __func__, handle, addon->ID());
322 return false;
323 }
324
325 return static_cast<CGUIDialogProgress*>(handle)->Abort();
326 }
327
328 } /* namespace ADDON */
329