Skip to content

Commit 3aba34a

Browse files
Fixes with Kodi dialogs.
1 parent 1494c85 commit 3aba34a

File tree

1 file changed

+41
-28
lines changed

1 file changed

+41
-28
lines changed

resources/utils_kodi.py

Lines changed: 41 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -103,20 +103,14 @@ def kodi_dialog_OK(text, title = 'Advanced Emulator Launcher'):
103103
xbmcgui.Dialog().ok(title, text)
104104

105105
# Returns True is YES was pressed, returns False if NO was pressed or dialog canceled.
106-
def kodi_dialog_yesno(text):
107-
title = 'Advanced Emulator Launcher'
108-
106+
def kodi_dialog_yesno(text, title = 'Advanced Emulator Launcher'):
109107
return xbmcgui.Dialog().yesno(title, text)
110108

111109
# Returns True is YES was pressed, returns False if NO was pressed or dialog canceled.
112-
def kodi_dialog_yesno_custom(text, yeslabel_str, nolabel_str):
113-
title = 'Advanced Emulator Launcher'
114-
110+
def kodi_dialog_yesno_custom(text, yeslabel_str, nolabel_str, title = 'Advanced Emulator Launcher'):
115111
return xbmcgui.Dialog().yesno(title, text, yeslabel = yeslabel_str, nolabel = nolabel_str)
116112

117-
def kodi_dialog_yesno_timer(text, timer_ms = 30000):
118-
title = 'Advanced Emulator Launcher'
119-
113+
def kodi_dialog_yesno_timer(text, timer_ms = 30000, title = 'Advanced Emulator Launcher'):
120114
return xbmcgui.Dialog().yesno(title, text, autoclose = timer_ms)
121115

122116
#
@@ -143,6 +137,7 @@ def kodi_refresh_container():
143137
xbmc.executebuiltin('Container.Refresh')
144138

145139
# Progress dialog that can be closed and reopened.
140+
# Messages in the dialog are always remembered.
146141
# If the dialog is canceled this class remembers it forever.
147142
class KodiProgressDialog(object):
148143
def __init__(self):
@@ -156,34 +151,48 @@ def startProgress(self, message, num_steps = 100):
156151
self.num_steps = num_steps
157152
self.progress = 0
158153
self.dialog_active = True
159-
self.progressDialog.create(self.title, message)
154+
self.message1 = message
155+
self.message2 = None
156+
self.progressDialog.create(self.title, self.message1)
160157
self.progressDialog.update(self.progress)
161158

162159
# Update progress and optionally update messages as well.
163-
def updateProgress(self, step_index, message1 = ' ', message2 = ' '):
160+
# If not messages specified then keep current message/s
161+
def updateProgress(self, step_index, message1 = None, message2 = None):
164162
self.progress = (step_index * 100) / self.num_steps
165-
self.message1 = message1
166-
self.message2 = message2
167-
if message2 and message2 != ' ':
168-
self.progressDialog.update(self.progress, message1, message2)
163+
# Update both messages
164+
if message1 and message2:
165+
self.message1 = message1
166+
self.message2 = message2
167+
# Update only message1 and deletes message2. There could be no message2 without a message1.
168+
elif message1:
169+
self.message1 = message1
170+
self.message2 = None
171+
self.progressDialog.update(self.progress, message1, ' ')
172+
return
173+
if self.message2:
174+
self.progressDialog.update(self.progress, self.message1, self.message2)
169175
else:
170-
self.progressDialog.update(self.progress, message1)
171-
172-
# Update dialog message but keep same progress.
173-
def updateMessages(self, message1, message2):
174-
self.message1 = message1
175-
self.message2 = message2
176-
self.progressDialog.update(self.progress, message1, message2)
176+
# The ' ' is to avoid a bug in Kodi progress dialog that keeps old messages 2
177+
# if an empty string is passed.
178+
self.progressDialog.update(self.progress, self.message1, ' ')
177179

178180
# Update dialog message but keep same progress. message2 is removed if any.
179181
def updateMessage(self, message1):
180182
self.message1 = message1
181-
self.progressDialog.update(self.progress, message1)
183+
self.message2 = None
184+
self.progressDialog.update(self.progress, self.message1, ' ')
182185

183186
# Update message2 and keeps same progress and message1
184187
def updateMessage2(self, message2):
185188
self.message2 = message2
186-
self.progressDialog.update(self.progress, self.message1, message2)
189+
self.progressDialog.update(self.progress, self.message1, self.message2)
190+
191+
# Update dialog message but keep same progress.
192+
def updateMessages(self, message1, message2):
193+
self.message1 = message1
194+
self.message2 = message2
195+
self.progressDialog.update(self.progress, message1, message2)
187196

188197
def isCanceled(self):
189198
# If the user pressed the cancel button before then return it now.
@@ -208,13 +217,17 @@ def endProgress(self):
208217
self.progressDialog.close()
209218
self.dialog_active = False
210219

211-
# Reopens a previously closed dialog, remembering the messages and the progress.
220+
# Reopens a previously closed dialog, remembering the messages and the progress it had
221+
# when it was closed.
212222
def reopen(self):
213-
if self.message2 and self.message2 != ' ':
214-
self.progressDialog.create(self.title, self.message1, self.message2)
223+
if self.message2:
224+
self.progressDialog.create(self.progress, self.message1, self.message2)
215225
else:
216-
self.progressDialog.create(self.title, self.message1)
226+
# The ' ' is to avoid a bug in Kodi progress dialog that keeps old messages 2
227+
# if an empty string is passed.
228+
self.progressDialog.create(self.progress, self.message1, ' ')
217229
self.progressDialog.update(self.progress)
230+
self.dialog_active = True
218231

219232
# To be used as a base class.
220233
class KodiProgressDialog_Chrisism(object):

0 commit comments

Comments
 (0)