From 16db25e876bd449fec8a4dd082f11e6814615e9e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Odd=20Str=C3=A5b=C3=B8?= Date: Tue, 18 Oct 2022 17:45:51 +0200 Subject: [PATCH] Companion: check list of installed plugins instead of only poking the ServerDate plugin endpoint --- jellyfin_kodi/jellyfin/api.py | 34 ++++++++++++++++++++++++++++++---- jellyfin_kodi/library.py | 16 ++++++---------- 2 files changed, 36 insertions(+), 14 deletions(-) diff --git a/jellyfin_kodi/jellyfin/api.py b/jellyfin_kodi/jellyfin/api.py index 67555741..6a3687ac 100644 --- a/jellyfin_kodi/jellyfin/api.py +++ b/jellyfin_kodi/jellyfin/api.py @@ -258,11 +258,37 @@ class API(object): return self._get("Plugins") def check_companion_installed(self): + """ + None = Unknown + True = Installed, but possibly not loaded right now + False = Not installed, scheduled for uninstalling or disabled + """ try: - self._get("Jellyfin.Plugin.KodiSyncQueue/GetServerDateTime") - return True - except Exception: - return False + res = self.get_plugins() # type: requests.Response + if res.ok: + kodi_sync_queue = [ + x + for x in res.json() + if x.get("Id") == "771e19d653854cafb35c28a0e865cf63" + ] + + LOG.debug("KodiSyncQueue Plugins result: %s", kodi_sync_queue) + + kodi_sync_queue_filtered = [ + x + for x in kodi_sync_queue + if x.get("Status") + in ["Active", "Restart", "Malfunctioned", "NotSupported"] + ] + + if kodi_sync_queue_filtered: + return True + else: + return False + except requests.RequestException as e: + LOG.warning("Error checking companion installed state: %s", e) + + return None def get_seasons(self, show_id): return self.shows("/%s/Seasons" % show_id, params={ diff --git a/jellyfin_kodi/library.py b/jellyfin_kodi/library.py index b44e722d..9de23d67 100644 --- a/jellyfin_kodi/library.py +++ b/jellyfin_kodi/library.py @@ -343,8 +343,8 @@ class Library(threading.Thread): if settings('SyncInstallRunDone.bool') and settings( 'kodiCompanion.bool' ): - - if self.server.jellyfin.check_companion_installed(): + # None == Unknown + if self.server.jellyfin.check_companion_installed() is not False: if not self.fast_sync(): dialog("ok", "{jellyfin}", translate(33128)) @@ -353,8 +353,11 @@ class Library(threading.Thread): LOG.info("--<[ retrieve changes ]") + # is False else: - raise LibraryException('CompanionMissing') + dialog("ok", "{jellyfin}", translate(33099)) + settings("kodiCompanion.bool", False) + return True return True except LibraryException as error: @@ -370,13 +373,6 @@ class Library(threading.Thread): return True - elif error.status == 'CompanionMissing': - - dialog("ok", "{jellyfin}", translate(33099)) - settings('kodiCompanion.bool', False) - - return True - except Exception as error: LOG.exception(error)