Fix ampache compatibility

Ampache returns strings where integers are normally expected and full
URLs instead of IDs for some album art.

Fixes #272
This commit is contained in:
Benjamin Schaaf
2021-01-10 18:23:47 +11:00
parent d47b4b6575
commit 249b79fa1a
3 changed files with 12 additions and 5 deletions

View File

@@ -592,8 +592,12 @@ class SubsonicAdapter(Adapter):
def delete_playlist(self, playlist_id: str):
self._get_json(self._make_url("deletePlaylist"), id=playlist_id)
def get_cover_art_uri(self, cover_art_id: str, scheme: str, size: int) -> str:
params = {"id": cover_art_id, "size": size, **self._get_params()}
def get_cover_art_uri(self, cover_art: str, scheme: str, size: int) -> str:
# Some servers return a full URL instead of an ID
if cover_art.startswith("http://") or cover_art.startswith("https://"):
return cover_art
params = {"id": cover_art, "size": size, **self._get_params()}
return self._make_url("getCoverArt") + "?" + urlencode(params)
def get_song_file_uri(self, song_id: str, schemes: Iterable[str]) -> str:

View File

@@ -17,10 +17,12 @@ from dateutil import parser
from .. import api_objects as SublimeAPI
# Translation map
# Translation map for encoding/decoding API results. For instance some servers
# may return a string where an integer is required.
decoder_functions = {
datetime: (lambda s: parser.parse(s) if s else None),
timedelta: (lambda s: timedelta(seconds=s) if s else None),
timedelta: (lambda s: timedelta(seconds=float(s)) if s else None),
int: (lambda s: int(s) if s else None),
}
encoder_functions = {
datetime: (lambda d: datetime.strftime(d, "%Y-%m-%dT%H:%M:%S.%f%z") if d else None),