From a6241d25db1a08a51c7f6ffe07c9b41940909fdd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Odd=20Str=C3=A5b=C3=B8?= Date: Fri, 29 May 2020 01:11:25 +0200 Subject: [PATCH] Update deprecated isPassword functionality and dialog line1 to message parameter rename. The isPassword change likely bumps minimum version up to Kodi 18. This can be worked around if desirable. --- jellyfin_kodi/client.py | 2 +- jellyfin_kodi/database/__init__.py | 12 ++++++------ jellyfin_kodi/dialogs/loginmanual.py | 10 +++++++--- jellyfin_kodi/entrypoint/context.py | 2 +- jellyfin_kodi/entrypoint/default.py | 6 +++--- jellyfin_kodi/entrypoint/service.py | 4 ++-- jellyfin_kodi/full_sync.py | 10 +++++----- jellyfin_kodi/helper/utils.py | 12 ++++++++---- jellyfin_kodi/helper/xmls.py | 2 +- jellyfin_kodi/library.py | 8 ++++---- jellyfin_kodi/monitor.py | 2 +- jellyfin_kodi/objects/actions.py | 2 +- jellyfin_kodi/player.py | 2 +- 13 files changed, 41 insertions(+), 33 deletions(-) diff --git a/jellyfin_kodi/client.py b/jellyfin_kodi/client.py index ab80c49a..76ea74b4 100644 --- a/jellyfin_kodi/client.py +++ b/jellyfin_kodi/client.py @@ -112,7 +112,7 @@ def reset_device_id(): window('jellyfin_deviceId', clear=True) get_device_id(True) - dialog("ok", heading="{jellyfin}", line1=translate(33033)) + dialog("ok", "{jellyfin}", translate(33033)) xbmc.executebuiltin('RestartApp') diff --git a/jellyfin_kodi/database/__init__.py b/jellyfin_kodi/database/__init__.py index 605712de..b243fc05 100644 --- a/jellyfin_kodi/database/__init__.py +++ b/jellyfin_kodi/database/__init__.py @@ -224,7 +224,7 @@ def reset(): from views import Views views = Views() - if not dialog("yesno", heading="{jellyfin}", line1=translate(33074)): + if not dialog("yesno", "{jellyfin}", translate(33074)): return window('jellyfin_should_stop.bool', True) @@ -236,7 +236,7 @@ def reset(): count -= 1 if not count: - dialog("ok", heading="{jellyfin}", line1=translate(33085)) + dialog("ok", "{jellyfin}", translate(33085)) return @@ -248,10 +248,10 @@ def reset(): views.delete_playlists() views.delete_nodes() - if dialog("yesno", heading="{jellyfin}", line1=translate(33086)): + if dialog("yesno", "{jellyfin}", translate(33086)): reset_artwork() - if dialog("yesno", heading="{jellyfin}", line1=translate(33087)): + if dialog("yesno", "{jellyfin}", translate(33087)): xbmcvfs.delete(os.path.join(ADDON_DATA, "settings.xml")) xbmcvfs.delete(os.path.join(ADDON_DATA, "data.json")) @@ -264,7 +264,7 @@ def reset(): settings('MinimumSetup', "") settings('MusicRescan.bool', False) settings('SyncInstallRunDone.bool', False) - dialog("ok", heading="{jellyfin}", line1=translate(33088)) + dialog("ok", "{jellyfin}", translate(33088)) xbmc.executebuiltin('RestartApp') @@ -279,7 +279,7 @@ def reset_kodi(): if name != 'version': videodb.cursor.execute("DELETE FROM " + name) - if settings('enableMusic.bool') or dialog("yesno", heading="{jellyfin}", line1=translate(33162)): + if settings('enableMusic.bool') or dialog("yesno", "{jellyfin}", translate(33162)): with Database('music') as musicdb: musicdb.cursor.execute("SELECT tbl_name FROM sqlite_master WHERE type='table'") diff --git a/jellyfin_kodi/dialogs/loginmanual.py b/jellyfin_kodi/dialogs/loginmanual.py index b2ef2157..c449a092 100644 --- a/jellyfin_kodi/dialogs/loginmanual.py +++ b/jellyfin_kodi/dialogs/loginmanual.py @@ -51,7 +51,7 @@ class LoginManual(xbmcgui.WindowXMLDialog): self.error_toggle = self.getControl(ERROR_TOGGLE) self.error_msg = self.getControl(ERROR_MSG) self.user_field = self._add_editcontrol(755, 433, 40, 415) - self.password_field = self._add_editcontrol(755, 543, 40, 415, password=1) + self.password_field = self._add_editcontrol(755, 543, 40, 415, password=True) if self.username: @@ -103,14 +103,18 @@ class LoginManual(xbmcgui.WindowXMLDialog): textColor="FF00A4DC", disabledColor="FF888888", focusTexture="-", - noFocusTexture="-", - isPassword=password) + noFocusTexture="-") + control.setPosition(x, y) control.setHeight(height) control.setWidth(width) self.addControl(control) + # setType has no effect before the control is added to a window + if password: + control.setType(xbmcgui.INPUT_TYPE_PASSWORD, "Please enter password") + return control def _login(self, username, password): diff --git a/jellyfin_kodi/entrypoint/context.py b/jellyfin_kodi/entrypoint/context.py index 5b0b6ad5..b20af031 100644 --- a/jellyfin_kodi/entrypoint/context.py +++ b/jellyfin_kodi/entrypoint/context.py @@ -163,7 +163,7 @@ class Context(object): if not settings('skipContextMenu.bool'): - if not dialog("yesno", heading="{jellyfin}", line1=translate(33015)): + if not dialog("yesno", "{jellyfin}", translate(33015)): delete = False if delete: diff --git a/jellyfin_kodi/entrypoint/default.py b/jellyfin_kodi/entrypoint/default.py index b21a71e4..2c2da3e4 100644 --- a/jellyfin_kodi/entrypoint/default.py +++ b/jellyfin_kodi/entrypoint/default.py @@ -786,7 +786,7 @@ def get_themes(): tvtunes.setSetting('custom_path', library) LOG.info("TV Tunes custom path is enabled and set.") else: - dialog("ok", heading="{jellyfin}", line1=translate(33152)) + dialog("ok", "{jellyfin}", translate(33152)) return @@ -862,7 +862,7 @@ def backup(): backup = os.path.join(path, folder_name) if xbmcvfs.exists(backup + '/'): - if not dialog("yesno", heading="{jellyfin}", line1=translate(33090)): + if not dialog("yesno", "{jellyfin}", translate(33090)): return backup() @@ -900,4 +900,4 @@ def backup(): LOG.info("copied %s", filename) LOG.info("backup completed") - dialog("ok", heading="{jellyfin}", line1="%s %s" % (translate(33091), backup)) + dialog("ok", "{jellyfin}", "%s %s" % (translate(33091), backup)) diff --git a/jellyfin_kodi/entrypoint/service.py b/jellyfin_kodi/entrypoint/service.py index 8fc8f36e..55bc21e2 100644 --- a/jellyfin_kodi/entrypoint/service.py +++ b/jellyfin_kodi/entrypoint/service.py @@ -375,13 +375,13 @@ class Service(xbmc.Monitor): if not self.settings.get('mode_warn'): self.settings['mode_warn'] = True - dialog("yesno", heading="{jellyfin}", line1=translate(33118)) + dialog("yesno", "{jellyfin}", translate(33118)) if settings('kodiCompanion.bool') != self.settings['kodi_companion']: self.settings['kodi_companion'] = settings('kodiCompanion.bool') if not self.settings['kodi_companion']: - dialog("ok", heading="{jellyfin}", line1=translate(33138)) + dialog("ok", "{jellyfin}", translate(33138)) def reload_objects(self): diff --git a/jellyfin_kodi/full_sync.py b/jellyfin_kodi/full_sync.py index 8969e838..66706661 100644 --- a/jellyfin_kodi/full_sync.py +++ b/jellyfin_kodi/full_sync.py @@ -43,7 +43,7 @@ class FullSync(object): self.__dict__ = self._shared_state if self.running: - dialog("ok", heading="{jellyfin}", line1=translate(33197)) + dialog("ok", "{jellyfin}", translate(33197)) raise Exception("Sync is already running.") @@ -114,10 +114,10 @@ class FullSync(object): ''' if self.sync['Libraries']: - if not dialog("yesno", heading="{jellyfin}", line1=translate(33102)): + if not dialog("yesno", "{jellyfin}", translate(33102)): - if not dialog("yesno", heading="{jellyfin}", line1=translate(33173)): - dialog("ok", heading="{jellyfin}", line1=translate(33122)) + if not dialog("yesno", "{jellyfin}", translate(33173)): + dialog("ok", "{jellyfin}", translate(33122)) raise LibraryException("ProgressStopped") else: @@ -244,7 +244,7 @@ class FullSync(object): if 'Failed to validate path' not in error: - dialog("ok", heading="{jellyfin}", line1=translate(33119)) + dialog("ok", "{jellyfin}", translate(33119)) LOG.error("full sync exited unexpectedly") save_sync(self.sync) diff --git a/jellyfin_kodi/helper/utils.py b/jellyfin_kodi/helper/utils.py index 92a6fe8b..4b49a95d 100644 --- a/jellyfin_kodi/helper/utils.py +++ b/jellyfin_kodi/helper/utils.py @@ -156,6 +156,10 @@ def dialog(dialog_type, *args, **kwargs): if "heading" in kwargs: kwargs['heading'] = kwargs['heading'].replace("{jellyfin}", translate('addon_name')) + if args: + args = list(args) + args[0] = args[0].replace("{jellyfin}", translate('addon_name')) + types = { 'yesno': d.yesno, 'ok': d.ok, @@ -248,7 +252,7 @@ def validate(path): if not xbmcvfs.exists(path): LOG.info("Could not find %s", path) - if dialog("yesno", heading="{jellyfin}", line1="%s %s. %s" % (translate(33047), path, translate(33048))): + if dialog("yesno", "{jellyfin}", "%s %s. %s" % (translate(33047), path, translate(33048))): return False @@ -465,15 +469,15 @@ def set_addon_mode(): ''' Setup playback mode. If native mode selected, check network credentials. ''' value = dialog("yesno", - heading=translate('playback_mode'), - line1=translate(33035), + translate('playback_mode'), + translate(33035), nolabel=translate('addon_mode'), yeslabel=translate('native_mode')) settings('useDirectPaths', value="1" if value else "0") if value: - dialog("ok", heading="{jellyfin}", line1=translate(33145)) + dialog("ok", "{jellyfin}", translate(33145)) LOG.info("Add-on playback: %s", settings('useDirectPaths') == "0") diff --git a/jellyfin_kodi/helper/xmls.py b/jellyfin_kodi/helper/xmls.py index 82c1441e..066dba13 100644 --- a/jellyfin_kodi/helper/xmls.py +++ b/jellyfin_kodi/helper/xmls.py @@ -129,7 +129,7 @@ def advanced_settings(): tree = etree.ElementTree(xml) tree.write(path) - dialog("ok", heading="{jellyfin}", line1=translate(33097)) + dialog("ok", "{jellyfin}", translate(33097)) xbmc.executebuiltin('RestartApp') return True diff --git a/jellyfin_kodi/library.py b/jellyfin_kodi/library.py index 655f0556..187e3e30 100644 --- a/jellyfin_kodi/library.py +++ b/jellyfin_kodi/library.py @@ -332,7 +332,7 @@ class Library(threading.Thread): if self.server.jellyfin.check_companion_installed(): if not self.fast_sync(): - dialog("ok", heading="{jellyfin}", line1=translate(33128)) + dialog("ok", "{jellyfin}", translate(33128)) raise Exception("Failed to retrieve latest updates") @@ -347,7 +347,7 @@ class Library(threading.Thread): if error.status in 'SyncLibraryLater': - dialog("ok", heading="{jellyfin}", line1=translate(33129)) + dialog("ok", "{jellyfin}", translate(33129)) settings('SyncInstallRunDone.bool', True) sync = get_sync() sync['Libraries'] = [] @@ -357,7 +357,7 @@ class Library(threading.Thread): elif error.status == 'CompanionMissing': - dialog("ok", heading="{jellyfin}", line1=translate(33099)) + dialog("ok", "{jellyfin}", translate(33099)) settings('kodiCompanion.bool', False) return True @@ -409,7 +409,7 @@ class Library(threading.Thread): ''' Inverse yes no, in case the dialog is forced closed by Kodi. ''' - if dialog("yesno", heading="{jellyfin}", line1=translate(33172).replace('{number}', str(total)), nolabel=translate(107), yeslabel=translate(106)): + if dialog("yesno", "{jellyfin}", translate(33172).replace('{number}', str(total)), nolabel=translate(107), yeslabel=translate(106)): LOG.warning("Large updates skipped.") return True diff --git a/jellyfin_kodi/monitor.py b/jellyfin_kodi/monitor.py index bbdbc7c4..ca10193a 100644 --- a/jellyfin_kodi/monitor.py +++ b/jellyfin_kodi/monitor.py @@ -116,7 +116,7 @@ class Monitor(xbmc.Monitor): except Exception as error: LOG.exception(error) - dialog("ok", heading="{jellyfin}", line1=translate(33142)) + dialog("ok", "{jellyfin}", translate(33142)) return diff --git a/jellyfin_kodi/objects/actions.py b/jellyfin_kodi/objects/actions.py index 36a34cbb..57d28939 100644 --- a/jellyfin_kodi/objects/actions.py +++ b/jellyfin_kodi/objects/actions.py @@ -121,7 +121,7 @@ class Actions(object): if settings('askCinema') == "true": - resp = dialog("yesno", heading="{jellyfin}", line1=translate(33016)) + resp = dialog("yesno", "{jellyfin}", translate(33016)) if not resp: enabled = False diff --git a/jellyfin_kodi/player.py b/jellyfin_kodi/player.py index 6a059c27..08b8beb6 100644 --- a/jellyfin_kodi/player.py +++ b/jellyfin_kodi/player.py @@ -436,7 +436,7 @@ class Player(xbmc.Player): if delete: LOG.info("Offer delete option") - if dialog("yesno", heading=translate(30091), line1=translate(33015), autoclose=120000): + if dialog("yesno", translate(30091), translate(33015), autoclose=120000): item['Server'].jellyfin.delete_item(item['Id']) window('jellyfin.external_check', clear=True)