2020-03-08 12:31:00 +01:00
|
|
|
import logging
|
|
|
|
|
2016-09-18 04:33:46 +02:00
|
|
|
from mopidy import backend
|
2020-03-08 12:31:00 +01:00
|
|
|
from mopidy_subidy import uri
|
2020-03-08 12:30:34 +01:00
|
|
|
|
2016-09-18 18:19:08 +02:00
|
|
|
logger = logging.getLogger(__name__)
|
2016-09-18 04:33:46 +02:00
|
|
|
|
2020-03-08 12:30:34 +01:00
|
|
|
|
2016-09-18 04:33:46 +02:00
|
|
|
class SubidyPlaylistsProvider(backend.PlaylistsProvider):
|
|
|
|
def __init__(self, *args, **kwargs):
|
2020-03-08 12:30:14 +01:00
|
|
|
super().__init__(*args, **kwargs)
|
2016-09-18 18:19:08 +02:00
|
|
|
self.subsonic_api = self.backend.subsonic_api
|
2016-09-18 04:33:46 +02:00
|
|
|
self.playlists = []
|
2016-09-18 18:19:08 +02:00
|
|
|
self.refresh()
|
2016-09-18 04:33:46 +02:00
|
|
|
|
|
|
|
def as_list(self):
|
2017-05-18 23:45:46 -04:00
|
|
|
return self.subsonic_api.get_playlists_as_refs()
|
2016-09-18 04:33:46 +02:00
|
|
|
|
|
|
|
def create(self, name):
|
2017-05-18 23:25:44 -04:00
|
|
|
result = self.subsonic_api.create_playlist_raw(name)
|
|
|
|
if result is None:
|
|
|
|
return None
|
2020-03-08 12:30:34 +01:00
|
|
|
playlist = result.get("playlist")
|
2017-05-18 23:25:44 -04:00
|
|
|
if playlist is None:
|
2017-05-18 23:42:18 -04:00
|
|
|
for pl in self.subsonic_api.get_playlists_as_playlists():
|
2017-05-18 23:25:44 -04:00
|
|
|
if pl.name == name:
|
|
|
|
playlist = pl
|
|
|
|
return playlist
|
|
|
|
else:
|
|
|
|
return self.subsonic_api.raw_playlist_to_playlist(playlist)
|
|
|
|
|
|
|
|
def delete(self, playlist_uri):
|
|
|
|
playlist_id = uri.get_playlist_id(playlist_uri)
|
|
|
|
self.subsonic_api.delete_playlist_raw(playlist_id)
|
2016-09-18 04:33:46 +02:00
|
|
|
|
2016-09-18 18:19:08 +02:00
|
|
|
def get_items(self, items_uri):
|
2020-03-08 12:30:34 +01:00
|
|
|
return self.subsonic_api.get_playlist_as_songs_as_refs(
|
|
|
|
uri.get_playlist_id(items_uri)
|
|
|
|
)
|
2016-09-18 04:33:46 +02:00
|
|
|
|
2016-09-18 18:19:08 +02:00
|
|
|
def lookup(self, lookup_uri):
|
2020-03-08 12:30:34 +01:00
|
|
|
return self.subsonic_api.get_playlist_as_playlist(
|
|
|
|
uri.get_playlist_id(lookup_uri)
|
|
|
|
)
|
2016-09-18 04:33:46 +02:00
|
|
|
|
|
|
|
def refresh(self):
|
2017-05-18 23:45:46 -04:00
|
|
|
pass
|
2016-09-18 04:33:46 +02:00
|
|
|
|
|
|
|
def save(self, playlist):
|
2017-05-18 23:25:44 -04:00
|
|
|
playlist_id = uri.get_playlist_id(playlist.uri)
|
|
|
|
track_ids = []
|
|
|
|
for trk in playlist.tracks:
|
|
|
|
track_ids.append(uri.get_song_id(trk.uri))
|
2017-05-19 02:18:42 -04:00
|
|
|
result = self.subsonic_api.save_playlist_raw(playlist_id, track_ids)
|
2017-05-18 23:25:44 -04:00
|
|
|
if result is None:
|
|
|
|
return None
|
|
|
|
return playlist
|