Switch to side-by-side view

--- a/src/mediaserver/cdplugins/spotify/session.py
+++ b/src/mediaserver/cdplugins/spotify/session.py
@@ -21,16 +21,15 @@
 import datetime
 import time
 import os
+
+import spotipy
+import spotipy.util as spotutil
+
 from upmplgmodels import Artist, Album, Track, Playlist, SearchResult, \
      Category, Genre
 from upmplgutils import uplog
 
-import spotipy
-import spotipy.util as spotutil
-
-SPOTIPY_CLIENT_ID = '5b4e1f241a734668aaddf170017d9244'
-SPOTIPY_CLIENT_SECRET = '9bd49518f7974f8ebb6f965ae641022b'
-SPOTIPY_REDIRECT_URI = 'https://www.lesbonscomptes.com/spotify/'
+import upmspotid
 
 class Session(object):
     def __init__(self):
@@ -42,25 +41,62 @@
 
     def login(self, user, cachepath):
         self.user = user
-        scope = None
+        scope = upmspotid.SCOPE
         sp_oauth = spotipy.oauth2.SpotifyOAuth(
-            SPOTIPY_CLIENT_ID, SPOTIPY_CLIENT_SECRET, SPOTIPY_REDIRECT_URI, 
-            scope=scope, cache_path=cachepath)
+            upmspotid.CLIENT_ID, upmspotid.CLIENT_SECRET,
+            upmspotid.REDIRECT_URI, scope=upmspotid.SCOPE, cache_path=cachepath)
         token_info = sp_oauth.get_cached_token()
         if token_info:
             uplog("token_info: %s" % token_info)
+            uplog("token expires at %s" % datetime.datetime.fromtimestamp(
+                token_info['expires_at']).strftime('%Y-%m-%d %H:%M:%S'))
             self.api = spotipy.Spotify(auth=token_info['access_token'])
             data = self.api.user(self.user)
             #dmpdata("User basic info", data)
             return True
         return False
     
-    def top_tracks(self):
+    def recent_tracks(self):
         if not self.api:
             uplog("Not logged in")
             return []
+        data = self.api.current_user_recently_played()
+        #self.dmpdata('user_recently_played', data)
+        return [_parse_track(i['track']) for i in data['items']]
+
+    def favourite_tracks(self):
+        if not self.api:
+            uplog("Not logged in")
+            return []
+        data = self.api.current_user_top_tracks(limit=50, offset=0)
+        return [_parse_track(t) for t in data['items']]
+        
+    def favourite_albums(self):
+        if not self.api:
+            uplog("Not logged in")
+            return []
+        data = self.api.current_user_saved_albums()
+        #self.dmpdata('favourite_albums', data)
+        try:
+            return [_parse_album(item['album']) for item in data['items']]
+        except:
+            uplog("favourite_albums: _parse_albums failed")
+            pass
         return []
 
+    def favourite_artists(self):
+        if not self.api:
+            uplog("Not logged in")
+            return []
+        data = self.api.current_user_followed_artists()
+        #self.dmpdata('favourite_artists', data)
+        return [_parse_artist(item) for item in data['artists']['items']]
+
+    def get_artist_albums(self, id):
+        data = self.api.artist_albums(id, limit=50)
+        #self.dmpdata('get_artist_albums', data)
+        return [_parse_album(item) for item in data['items']]
+        
     def new_releases(self):
         if not self.api:
             uplog("Not logged in")
@@ -68,9 +104,7 @@
         data = self.api.new_releases()
         #self.dmpdata('new_releases', data)
         try:
-            albums = [_parse_album(alb) for alb in data['albums']['items']]
-            if albums:
-                return [alb for alb in albums if alb.available]
+            return [_parse_album(alb) for alb in data['albums']['items']]
         except:
             uplog("new_releases: _parse_albums failed")
             pass
@@ -109,29 +143,30 @@
             pass
     return Album(**kwargs)
 
-def _parse_track(json_obj, albumarg = None):
+def _parse_track(data, albumarg = None):
     artist = Artist()
-    if 'artists' in json_obj:
-        artist = _parse_artist(json_obj['artists'][0])
+    if 'artists' in data:
+        artist = _parse_artist(data['artists'][0])
     elif albumarg and albumarg.artist:
         artist = albumarg.artist
 
     available = True
     duration = 0
-    if 'duration_ms' in json_obj:
-        duration = str(int(json_obj['duration_ms'])//1000)
+    if 'duration_ms' in data:
+        duration = str(int(data['duration_ms'])//1000)
     kwargs = {
-        'id': json_obj['id'],
-        'name': json_obj['name'],
+        'id': data['id'],
+        'name': data['name'],
         'duration': duration,
-        'track_num': json_obj['track_number'],
-        'disc_num': json_obj['disc_number'],
+        'track_num': data['track_number'],
+        'disc_num': data['disc_number'],
         'artist': artist,
         'available': available
     }
     if albumarg:
         kwargs['album'] = albumarg
-
+    elif 'album' in data:
+        kwargs['album'] = _parse_album(data['album'])
     return Track(**kwargs)