From 179e294df74a90100bea8d7873ccae37726202c3 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Beno=C3=AEt=20Harrault?= <benoit@harrault.fr>
Date: Thu, 5 May 2022 10:28:06 +0200
Subject: [PATCH] Improve debug/log if error getting data from Spotify API

---
 addon.xml                                     |  2 +-
 gui.py                                        | 45 ++++++++++++++-----
 .../resource.language.en_gb/strings.po        |  4 ++
 resources/settings.xml                        |  7 +--
 4 files changed, 44 insertions(+), 14 deletions(-)

diff --git a/addon.xml b/addon.xml
index 143d7e5..2a5464f 100644
--- a/addon.xml
+++ b/addon.xml
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
 <addon id="script.spotify.screensaver"
     name="Spotify Screensaver"
-    version="0.0.10"
+    version="0.0.11"
     provider-name="Benoît Harrault">
     <requires>
         <import addon="xbmc.python" version="2.25.0"/>
diff --git a/gui.py b/gui.py
index 3722bbb..8c4d591 100644
--- a/gui.py
+++ b/gui.py
@@ -3,6 +3,7 @@ import random
 import xbmc
 import xbmcaddon
 import xbmcgui
+import json
 
 # Plugin data and configuration
 ADDON_ID = 'script.spotify.screensaver'
@@ -22,6 +23,9 @@ class GUI(xbmcgui.WindowXMLDialog):
         self.isExiting = False
 
     def log(self, msg, level=xbmc.LOGDEBUG):
+        if self.force_debug:
+            level = xbmc.LOGERROR
+
         xbmc.log(ADDON_ID + ' - ' + ADDON_VERSION + ' - ' + msg, level)
 
     def onInit(self):
@@ -65,6 +69,8 @@ class GUI(xbmcgui.WindowXMLDialog):
         self.spotify_client_secret = SETTINGS.getSetting(
             'SpotifyClientSecret').decode('utf-8')
 
+        self.force_debug = SETTINGS.getSetting('ForceDebug') == 'true'
+
     def _init_spotify_access_token(self):
         auth_response = requests.post(SPOTIFY_AUTH_URL, {
             'grant_type': 'client_credentials',
@@ -137,27 +143,26 @@ class GUI(xbmcgui.WindowXMLDialog):
     def _unimplemented_event_type(self, event_type, event_value):
         self.log(
             'unimplemented event type: ' + str(event_type)
-            + ' (value: ' + str(event_value) + ')',
-            xbmc.LOGDEBUG
+            + ' (value: ' + str(event_value) + ')'
         )
 
     def _preload_images(self, track_id):
-        self.log('preload images for track: ' + track_id, xbmc.LOGERROR)
+        self.log('preload images for track: ' + track_id)
         self._get_track_data(track_id)
 
     def _reload_images(self, track_id):
-        self.log('load images for track: ' + track_id, xbmc.LOGERROR)
+        self.log('load images for track: ' + track_id)
         self.PanelItems = self.getControl(101)
         self.PanelItems.reset()
         self.PanelItems.addItems(self._get_track_data(track_id))
 
     def _remove_images(self):
-        self.log('no played track. remove images', xbmc.LOGERROR)
+        self.log('no played track. remove images')
         self.PanelItems = self.getControl(101)
         self.PanelItems.reset()
 
     def _get_track_data(self, track_id):
-        self.log('track_id: [' + str(track_id) + ']', xbmc.LOGERROR)
+        self.log('track_id: [' + str(track_id) + ']')
 
         imageLST = []
 
@@ -178,13 +183,33 @@ class GUI(xbmcgui.WindowXMLDialog):
 
             # album/track image
             album = data.get('album')
-            if album is not None:
+            if album is None:
+                self.log('failed to get album from API', xbmc.LOGERROR)
+                self.log(json.dumps(data), xbmc.LOGERROR)
+            else:
+                self.log('ok got album from API')
+                self.log(json.dumps(album))
                 images = album.get('images')
-                if images is not None:
+                if images is None:
+                    self.log('failed to get images from API', xbmc.LOGERROR)
+                    self.log(json.dumps(album), xbmc.LOGERROR)
+                else:
+                    self.log('ok got images from API')
+                    self.log(json.dumps(images))
                     image = images[0]
-                    if image is not None:
+                    if image is None:
+                        self.log('failed to get image from API', xbmc.LOGERROR)
+                        self.log(json.dumps(images), xbmc.LOGERROR)
+                    else:
+                        self.log('ok got image from API')
+                        self.log(json.dumps(image))
                         image_url = image.get('url')
-                        if image_url is not None:
+                        if image_url is None:
+                            self.log('failed to get image_url from API', xbmc.LOGERROR)
+                            self.log(json.dumps(image), xbmc.LOGERROR)
+                        else:
+                            self.log('ok got image_url from API')
+                            self.log(image_url)
                             imageLST.append(
                                 xbmcgui.ListItem(
                                     track_name, thumbnailImage=image_url)
diff --git a/resources/language/resource.language.en_gb/strings.po b/resources/language/resource.language.en_gb/strings.po
index c8442f2..2568c5d 100644
--- a/resources/language/resource.language.en_gb/strings.po
+++ b/resources/language/resource.language.en_gb/strings.po
@@ -35,3 +35,7 @@ msgstr "Spotify Client Id"
 msgctxt "#32005"
 msgid "SpotifyClientSecret"
 msgstr "Spotify Client Secret"
+
+msgctxt "#32006"
+msgid "ForceDebug"
+msgstr "Force debug"
diff --git a/resources/settings.xml b/resources/settings.xml
index 2804cc0..5183be8 100644
--- a/resources/settings.xml
+++ b/resources/settings.xml
@@ -1,8 +1,9 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <settings>
-    <setting id="RotateTime" type="enum" label="32001" default="0" values="30s|60s|120s|240s"/>
-    <setting id="Randomize"  type="bool" label="32002" default="false"/>
-    <setting id="Animate"    type="bool" label="32003" default="false"/>
+    <setting id="RotateTime"          type="enum" label="32001" default="0" values="30s|60s|120s|240s"/>
+    <setting id="Randomize"           type="bool" label="32002" default="false"/>
+    <setting id="Animate"             type="bool" label="32003" default="false"/>
     <setting id="SpotifyClientId"     type="text" label="32004" default="SpotifyClientId"/>
     <setting id="SpotifyClientSecret" type="text" label="32005" default="SpotifyClientSecret"/>
+    <setting id="ForceDebug"          type="bool" label="32006" default="false"/>
 </settings>
-- 
GitLab