From 16db25e876bd449fec8a4dd082f11e6814615e9e Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Odd=20Str=C3=A5b=C3=B8?= <oddstr13@gmail.com>
Date: Tue, 18 Oct 2022 17:45:51 +0200
Subject: [PATCH 1/2] 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)
 

From 7b2051f883076031b82a218cc9065503137ffc8f Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Odd=20Str=C3=A5b=C3=B8?= <oddstr13@gmail.com>
Date: Tue, 18 Oct 2022 18:58:30 +0200
Subject: [PATCH 2/2] Result is already unpacked

---
 jellyfin_kodi/jellyfin/api.py | 34 ++++++++++++++++------------------
 1 file changed, 16 insertions(+), 18 deletions(-)

diff --git a/jellyfin_kodi/jellyfin/api.py b/jellyfin_kodi/jellyfin/api.py
index 6a3687ac..69987883 100644
--- a/jellyfin_kodi/jellyfin/api.py
+++ b/jellyfin_kodi/jellyfin/api.py
@@ -264,27 +264,25 @@ class API(object):
         False = Not installed, scheduled for uninstalling or disabled
         """
         try:
-            res = self.get_plugins()  # type: requests.Response
-            if res.ok:
-                kodi_sync_queue = [
-                    x
-                    for x in res.json()
-                    if x.get("Id") == "771e19d653854cafb35c28a0e865cf63"
-                ]
+            kodi_sync_queue = [
+                x
+                for x in self.get_plugins()
+                if x.get("Id") == "771e19d653854cafb35c28a0e865cf63"
+            ]
 
-                LOG.debug("KodiSyncQueue Plugins result: %s", kodi_sync_queue)
+            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"]
-                ]
+            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
+            if kodi_sync_queue_filtered:
+                return True
+            else:
+                return False
         except requests.RequestException as e:
             LOG.warning("Error checking companion installed state: %s", e)