Skip to content
Snippets Groups Projects
Commit 089a039a authored by Benoît Harrault's avatar Benoît Harrault
Browse files

Fix encoding in track data, clean/improve some code, log

parent 775844b6
No related branches found
No related tags found
1 merge request!22Resolve "Fix encoding in track data"
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<addon id="script.spotify.screensaver" <addon id="script.spotify.screensaver"
name="Spotify Screensaver" name="Spotify Screensaver"
version="0.0.16" version="0.0.17"
provider-name="Benoît Harrault"> provider-name="Benoît Harrault">
<requires> <requires>
<import addon="xbmc.python" version="2.25.0"/> <import addon="xbmc.python" version="2.25.0"/>
......
...@@ -49,6 +49,7 @@ class GUI(xbmcgui.WindowXMLDialog): ...@@ -49,6 +49,7 @@ class GUI(xbmcgui.WindowXMLDialog):
self.Monitor = MyMonitor(action=self._exit) self.Monitor = MyMonitor(action=self._exit)
self.stop = False self.stop = False
self.last_spotify_event = '' self.last_spotify_event = ''
self.current_track_id = ''
def _get_settings(self): def _get_settings(self):
# read addon settings # read addon settings
...@@ -124,8 +125,9 @@ class GUI(xbmcgui.WindowXMLDialog): ...@@ -124,8 +125,9 @@ class GUI(xbmcgui.WindowXMLDialog):
event_value = event_split[2] if len(event_split) > 2 else '' event_value = event_split[2] if len(event_split) > 2 else ''
if event_type == 'changed' or event_type == 'playing': if event_type == 'changed' or event_type == 'playing':
self._reload_images(event_value) if (self.current_track_id != event_value):
self.next = True self._reload_images(event_value)
self.next = True
elif event_type == 'preloading': elif event_type == 'preloading':
self._preload_images(event_value) self._preload_images(event_value)
elif ( elif (
...@@ -150,30 +152,44 @@ class GUI(xbmcgui.WindowXMLDialog): ...@@ -150,30 +152,44 @@ class GUI(xbmcgui.WindowXMLDialog):
self.log('preload images for track: ' + track_id) self.log('preload images for track: ' + track_id)
track_data = self._get_track_data(track_id) track_data = self._get_track_data(track_id)
track_name = track_data.get('track_name')
track_artists = track_data.get('track_artists') if track_data is None:
track_image_url = track_data.get('track_image_url') self.log('failed to get next track data', xbmc.LOGERROR)
else:
notification = ( track_name = track_data.get('track_name')
'Notification("Next:", "' + ', '.join(track_artists) track_artists = track_data.get('track_artists')
+ ' - ' + track_name track_image_url = track_data.get('track_image_url')
+ '", 29000, ' + track_image_url + ')'
) if ((track_name is None)
xbmc.executebuiltin(notification) or (track_artists is None)
or (track_image_url is None)):
self.log('failed to parse next track data', xbmc.LOGERROR)
else:
artists_string = ', '.join(track_artists).replace('"', '\"')
notification = (
'Notification("Next:", "'
+ str(artists_string) + ' - ' + str(track_name)
+ '", 29000, ' + str(track_image_url) + ')'
)
xbmc.executebuiltin(notification)
def _reload_images(self, track_id): def _reload_images(self, track_id):
self.log('load images for track: ' + track_id) self.log('load images for track: ' + track_id)
self.PanelItems = self.getControl(101) self.PanelItems = self.getControl(101)
self.PanelItems.reset() self.PanelItems.reset()
self.PanelItems.addItems(self._build_items_list(track_id)) self.PanelItems.addItems(self._build_items_list(track_id))
self.current_track_id = track_id
def _remove_images(self): def _remove_images(self):
self.log('no played track. remove images') self.log('no played track. remove images')
self.PanelItems = self.getControl(101) self.PanelItems = self.getControl(101)
self.PanelItems.reset() self.PanelItems.reset()
self.current_track_id = ''
def _fix_encoding(self, string): def _fix_encoding(self, string):
return string.encode('utf-8') return str(string.encode('utf-8'))
def _get_track_data(self, track_id, try_count=1): def _get_track_data(self, track_id, try_count=1):
self.log('track_id: [' + str(track_id) + ']') self.log('track_id: [' + str(track_id) + ']')
...@@ -200,84 +216,102 @@ class GUI(xbmcgui.WindowXMLDialog): ...@@ -200,84 +216,102 @@ class GUI(xbmcgui.WindowXMLDialog):
# album/track image # album/track image
album = data.get('album') album = data.get('album')
if album is None: if album is None:
self.log('failed to get album from API', xbmc.LOGERROR) self.log(
self.log(json.dumps(data), xbmc.LOGERROR) 'failed to get album from API: '
+ json.dumps(data), xbmc.LOGERROR)
if json.dumps(data) == '{"error": {"status": 401, "message": "The access token expired"}}':
self.log('trying to refresh access token') error_string = ('{"error": {"status": 401, '
self._init_spotify_access_token() + '"message": "The access token expired"}}')
self.log('retry get image') if json.dumps(data) == error_string:
self._get_track_data(track_id, try_count + 1) if try_count < 3:
self.log('trying to refresh access token')
self._init_spotify_access_token()
self.log('retry get image')
return self._get_track_data(track_id, try_count + 1)
else:
self.log('giving up', xbmc.LOGERROR)
else: else:
self.log('unknown error getting image', xbmc.LOGERROR) self.log('unknown error getting image', xbmc.LOGERROR)
else: else:
self.log('ok got album from API') self.log('ok got album from API: ' + json.dumps(album))
self.log(json.dumps(album))
# get artists # get artists
artists = album.get('artists') artists = album.get('artists')
if artists is None: if artists is None:
self.log('failed to get artists from API', xbmc.LOGERROR) self.log(
self.log(json.dumps(album), xbmc.LOGERROR) 'failed to get artists from API: '
+ json.dumps(album), xbmc.LOGERROR)
else: else:
self.log('ok got artists from API') self.log('ok got artists from API: ' + json.dumps(artists))
self.log(json.dumps(artists))
for artist in artists: for artist in artists:
artist_name = artist.get('name') artist_name = artist.get('name')
if artist_name is None: if artist_name is None:
self.log( self.log(
'failed to get artist_name from API', 'failed to get artist_name from API: '
xbmc.LOGERROR) + json.dumps(artist), xbmc.LOGERROR)
self.log(json.dumps(artist), xbmc.LOGERROR)
else: else:
self.log('ok got artist_name from API') self.log(
self.log(json.dumps(artist_name)) 'ok got artist_name from API: '
+ json.dumps(artist_name))
track_data['track_artists'].append(self._fix_encoding(artist_name)) track_data['track_artists'].append(
self._fix_encoding(artist_name))
# get images # get images
images = album.get('images') images = album.get('images')
if images is None: if images is None:
self.log('failed to get images from API', xbmc.LOGERROR) self.log(
self.log(json.dumps(album), xbmc.LOGERROR) 'failed to get images from API: '
+ json.dumps(album), xbmc.LOGERROR)
else: else:
self.log('ok got images from API') self.log('ok got images from API: ' + json.dumps(images))
self.log(json.dumps(images))
image = images[0] image = images[0]
if image is None: if image is None:
self.log('failed to get image from API', xbmc.LOGERROR) self.log(
self.log(json.dumps(images), xbmc.LOGERROR) 'failed to get image from API: '
+ json.dumps(images), xbmc.LOGERROR)
else: else:
self.log('ok got image from API') self.log('ok got image from API: ' + json.dumps(image))
self.log(json.dumps(image))
track_image_url = image.get('url') track_image_url = image.get('url')
if track_image_url is None: if track_image_url is None:
self.log( self.log(
'failed to get track_image_url from API', 'failed to get track_image_url from API: '
xbmc.LOGERROR) + json.dumps(image), xbmc.LOGERROR)
self.log(json.dumps(image), xbmc.LOGERROR)
else: else:
self.log('ok got track_image_url from API') self.log(
self.log(track_image_url) 'ok got track_image_url from API: '
+ track_image_url)
track_data['track_image_url'] = track_image_url track_data['track_image_url'] = track_image_url
except Exception as e: except Exception as e:
self.log('failed to get track data: ' + str(e), xbmc.LOGERROR) self.log('failed to get track data: ' + str(e), xbmc.LOGERROR)
self.log('track_name: ' + track_data.get('track_name', ''))
self.log('track_artists: ' + str(track_data.get('track_artists', [])))
self.log('track_image_url: ' + track_data.get('track_image_url', ''))
return track_data return track_data
def _build_items_list(self, track_id): def _build_items_list(self, track_id):
imageLST = [] imageLST = []
track_data = self._get_track_data(track_id) track_data = self._get_track_data(track_id)
track_name = track_data.get('track_name') if track_data is None:
track_artists = track_data.get('track_artists') self.log('failed to get next track data', xbmc.LOGERROR)
track_image_url = track_data.get('track_image_url') else:
track_name = track_data.get('track_name')
imageLST.append( track_artists = track_data.get('track_artists')
xbmcgui.ListItem( track_image_url = track_data.get('track_image_url')
', '.join(track_artists) + ' - ' + track_name,
thumbnailImage=track_image_url if ((track_name is None)
) or (track_artists is None)
) or (track_image_url is None)):
self.log('failed to parse next track data', xbmc.LOGERROR)
else:
artists_string = ', '.join(track_artists)
imageLST.append(
xbmcgui.ListItem(
artists_string + ' - ' + track_name,
thumbnailImage=track_image_url
)
)
return imageLST return imageLST
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment