--- a/src/cdplugins/gmusic/session.py
+++ b/src/cdplugins/gmusic/session.py
@@ -30,7 +30,7 @@
self.user = None
self.lib_albums = {}
self.lib_artists = {}
- self.lib_tracks = []
+ self.lib_tracks = {}
self.lib_updatetime = 0
self.sitdata = []
self.sitbyid = {}
@@ -60,9 +60,11 @@
if now - self.lib_updatetime < 300:
return
data = self.api.get_all_songs()
+ #self.dmpdata("all_songs", data)
self.lib_updatetime = now
- self.lib_tracks = [_parse_track(t) for t in data]
- for track in self.lib_tracks:
+ tracks = [_parse_track(t) for t in data]
+ self.lib_tracks = dict([(t.id, t) for t in tracks])
+ for track in tracks:
# We would like to use the album id here, but gmusic
# associates the tracks with any compilations after
# uploading (does not use the metadata apparently), so
@@ -89,6 +91,19 @@
#self.dmpdata("playlists", pldata)
return [_parse_playlist(pl) for pl in pldata]
+ def get_user_playlist_tracks(self, playlist_id):
+ self._get_user_library()
+ data = self.api.get_all_user_playlist_contents()
+ #self.dmpdata("user_playlist_content", data)
+ trkl = [item['tracks']
+ for item in data if item['id'] == playlist_id]
+ if not trkl:
+ return []
+ try:
+ return [self.lib_tracks[track['trackId']] for track in trkl[0]]
+ except:
+ return []
+
def create_station_for_genre(self, genre_id):
id = self.api.create_station("station"+genre_id, genre_id=genre_id)
return id
@@ -97,7 +112,6 @@
data = self.api.get_all_stations()
# parse_playlist works fine for stations
stations = [_parse_playlist(d) for d in data]
- #self.api.delete_stations([s.id for s in stations])
return stations
def delete_user_station(self, id):
@@ -223,13 +237,19 @@
def search(self, query):
data = self.api.search(query, max_results=50)
#self.dmpdata("Search", data)
- #track = data['song_hits'][0]['track']
- #song_id = track['nid'] if 'nid' in track else track['id']
tr = [_parse_track(i['track']) for i in data['song_hits']]
+ print("track ok", file=sys.stderr)
ar = [_parse_artist(i['artist']) for i in data['artist_hits']]
+ print("artist ok", file=sys.stderr)
al = [_parse_album(i['album']) for i in data['album_hits']]
- pl = [_parse_playlist(i) for i in data['playlist_hits']]
+ print("album ok", file=sys.stderr)
+ #self.dmpdata("Search playlists", data['playlist_hits'])
+ try:
+ pl = [_parse_splaylist(i) for i in data['playlist_hits']]
+ except:
+ pl = []
+ print("playlist ok", file=sys.stderr)
return SearchResult(artists=ar, albums=al, playlists=pl, tracks=tr)
@@ -246,6 +266,10 @@
def _parse_playlist(data):
return Playlist(id=data['id'], name=data['name'])
+
+def _parse_splaylist(data):
+ return Playlist(id=data['playlist']['shareToken'],
+ name=data['playlist']['name'])
def _parse_situation_station(data):
return Playlist(id=data['seed']['curatedStationId'], name=data['name'])