mirror of
https://github.com/nathom/streamrip.git
synced 2025-05-24 03:57:14 -04:00
Fix #39
This commit is contained in:
parent
3e506db3cb
commit
43730127fa
3 changed files with 32 additions and 14 deletions
|
@ -61,7 +61,7 @@ def cli(ctx, **kwargs):
|
||||||
from packaging import version
|
from packaging import version
|
||||||
|
|
||||||
r = requests.get("https://pypi.org/pypi/streamrip/json").json()
|
r = requests.get("https://pypi.org/pypi/streamrip/json").json()
|
||||||
newest = r['info']['version']
|
newest = r["info"]["version"]
|
||||||
if version.parse(metadata.version("streamrip")) < version.parse(newest):
|
if version.parse(metadata.version("streamrip")) < version.parse(newest):
|
||||||
click.secho(
|
click.secho(
|
||||||
"A new version of streamrip is available! "
|
"A new version of streamrip is available! "
|
||||||
|
@ -69,7 +69,7 @@ def cli(ctx, **kwargs):
|
||||||
fg="yellow",
|
fg="yellow",
|
||||||
)
|
)
|
||||||
else:
|
else:
|
||||||
click.secho("streamrip is up-to-date!", fg='green')
|
click.secho("streamrip is up-to-date!", fg="green")
|
||||||
|
|
||||||
if kwargs["no_db"]:
|
if kwargs["no_db"]:
|
||||||
config.session["database"]["enabled"] = False
|
config.session["database"]["enabled"] = False
|
||||||
|
|
|
@ -124,7 +124,7 @@ class Track:
|
||||||
) # meta dict -> TrackMetadata object
|
) # meta dict -> TrackMetadata object
|
||||||
try:
|
try:
|
||||||
if self.client.source == "qobuz":
|
if self.client.source == "qobuz":
|
||||||
self.cover_url = self.resp["album"]["image"]["small"]
|
self.cover_url = self.resp["album"]["image"]["large"]
|
||||||
elif self.client.source == "tidal":
|
elif self.client.source == "tidal":
|
||||||
self.cover_url = tidal_cover_url(self.resp["album"]["cover"], 320)
|
self.cover_url = tidal_cover_url(self.resp["album"]["cover"], 320)
|
||||||
elif self.client.source == "deezer":
|
elif self.client.source == "deezer":
|
||||||
|
@ -486,7 +486,10 @@ class Track:
|
||||||
@property
|
@property
|
||||||
def title(self):
|
def title(self):
|
||||||
if hasattr(self, "meta"):
|
if hasattr(self, "meta"):
|
||||||
return self.meta.title
|
_title = self.meta.title
|
||||||
|
if self.meta.explicit:
|
||||||
|
_title = f"{_title} (Explicit)"
|
||||||
|
return _title
|
||||||
else:
|
else:
|
||||||
raise Exception("Track must be loaded before accessing title")
|
raise Exception("Track must be loaded before accessing title")
|
||||||
|
|
||||||
|
@ -557,7 +560,7 @@ class Tracklist(list):
|
||||||
IndexError
|
IndexError
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def get(self, key: Union[str, int], default: Optional[Any]):
|
def get(self, key: Union[str, int], default=None):
|
||||||
if isinstance(key, str):
|
if isinstance(key, str):
|
||||||
if hasattr(self, key):
|
if hasattr(self, key):
|
||||||
return getattr(self, key)
|
return getattr(self, key)
|
||||||
|
@ -764,8 +767,11 @@ class Album(Tracklist):
|
||||||
"tracktotal": resp.get("tracks_count"),
|
"tracktotal": resp.get("tracks_count"),
|
||||||
"description": resp.get("description"),
|
"description": resp.get("description"),
|
||||||
"disctotal": max(
|
"disctotal": max(
|
||||||
track.get("media_number", 1) for track in resp["tracks"]["items"]
|
track.get("media_number", 1)
|
||||||
),
|
for track in safe_get(resp, "tracks", "items", default=[{}])
|
||||||
|
)
|
||||||
|
or 1,
|
||||||
|
"explicit": resp.get("parental_warning", False),
|
||||||
}
|
}
|
||||||
elif client.source == "tidal":
|
elif client.source == "tidal":
|
||||||
return {
|
return {
|
||||||
|
@ -787,6 +793,7 @@ class Album(Tracklist):
|
||||||
else 41000,
|
else 41000,
|
||||||
"tracktotal": resp.get("numberOfTracks"),
|
"tracktotal": resp.get("numberOfTracks"),
|
||||||
"disctotal": resp.get("numberOfVolumes"),
|
"disctotal": resp.get("numberOfVolumes"),
|
||||||
|
"explicit": resp.get("explicit", False),
|
||||||
}
|
}
|
||||||
elif client.source == "deezer":
|
elif client.source == "deezer":
|
||||||
if resp.get("release_date", False):
|
if resp.get("release_date", False):
|
||||||
|
@ -814,6 +821,7 @@ class Album(Tracklist):
|
||||||
"sampling_rate": 44100,
|
"sampling_rate": 44100,
|
||||||
"tracktotal": resp.get("track_total") or resp.get("nb_tracks"),
|
"tracktotal": resp.get("track_total") or resp.get("nb_tracks"),
|
||||||
"disctotal": max(track["disk_number"] for track in resp["tracks"]),
|
"disctotal": max(track["disk_number"] for track in resp["tracks"]),
|
||||||
|
"explicit": bool(resp.get("explicit_content_lyrics")),
|
||||||
}
|
}
|
||||||
|
|
||||||
raise InvalidSourceError(client.source)
|
raise InvalidSourceError(client.source)
|
||||||
|
@ -845,6 +853,9 @@ class Album(Tracklist):
|
||||||
if self.version.lower() not in album_title.lower():
|
if self.version.lower() not in album_title.lower():
|
||||||
album_title = f"{album_title} ({self.version})"
|
album_title = f"{album_title} ({self.version})"
|
||||||
|
|
||||||
|
if self.get("explicit", False):
|
||||||
|
album_title = f"{album_title} (Explicit)"
|
||||||
|
|
||||||
return album_title
|
return album_title
|
||||||
|
|
||||||
@title.setter
|
@title.setter
|
||||||
|
@ -945,14 +956,12 @@ class Album(Tracklist):
|
||||||
def _get_formatter(self) -> dict:
|
def _get_formatter(self) -> dict:
|
||||||
fmt = dict()
|
fmt = dict()
|
||||||
for key in ALBUM_KEYS:
|
for key in ALBUM_KEYS:
|
||||||
if hasattr(self, key):
|
# default to None
|
||||||
fmt[key] = getattr(self, key)
|
fmt[key] = self.get(key)
|
||||||
else:
|
|
||||||
fmt[key] = None
|
|
||||||
|
|
||||||
if fmt.get("sampling_rate", False):
|
if fmt.get("sampling_rate", False):
|
||||||
fmt["sampling_rate"] /= 1000
|
fmt["sampling_rate"] /= 1000
|
||||||
# 48.0kHz -> 48kHz, 44.1kHz -> 44.1kHz
|
# change 48.0kHz -> 48kHz, 44.1kHz -> 44.1kHz
|
||||||
if fmt["sampling_rate"] % 1 == 0.0:
|
if fmt["sampling_rate"] % 1 == 0.0:
|
||||||
fmt["sampling_rate"] = int(fmt["sampling_rate"])
|
fmt["sampling_rate"] = int(fmt["sampling_rate"])
|
||||||
|
|
||||||
|
|
|
@ -14,6 +14,7 @@ from .constants import (
|
||||||
TRACK_KEYS,
|
TRACK_KEYS,
|
||||||
)
|
)
|
||||||
from .exceptions import InvalidContainerError
|
from .exceptions import InvalidContainerError
|
||||||
|
from .utils import safe_get
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
@ -69,7 +70,10 @@ class TrackMetadata:
|
||||||
self.tracknumber = None
|
self.tracknumber = None
|
||||||
self.discnumber = None
|
self.discnumber = None
|
||||||
|
|
||||||
self.__source = source # not included in tags
|
# not included in tags
|
||||||
|
self.explicit = False
|
||||||
|
|
||||||
|
self.__source = source
|
||||||
|
|
||||||
if track is None and album is None:
|
if track is None and album is None:
|
||||||
logger.debug("No params passed, returning")
|
logger.debug("No params passed, returning")
|
||||||
|
@ -93,12 +97,13 @@ class TrackMetadata:
|
||||||
self.genre = resp.get("genres_list", [])
|
self.genre = resp.get("genres_list", [])
|
||||||
self.date = resp.get("release_date_original") or resp.get("release_date")
|
self.date = resp.get("release_date_original") or resp.get("release_date")
|
||||||
self.copyright = resp.get("copyright")
|
self.copyright = resp.get("copyright")
|
||||||
self.albumartist = resp.get("artist", {}).get("name")
|
self.albumartist = safe_get(resp, "artist", "name")
|
||||||
self.label = resp.get("label")
|
self.label = resp.get("label")
|
||||||
self.description = resp.get("description")
|
self.description = resp.get("description")
|
||||||
self.disctotal = max(
|
self.disctotal = max(
|
||||||
track.get("media_number", 1) for track in resp["tracks"]["items"]
|
track.get("media_number", 1) for track in resp["tracks"]["items"]
|
||||||
)
|
)
|
||||||
|
self.explicit = resp.get("parental_warning", False)
|
||||||
|
|
||||||
if isinstance(self.label, dict):
|
if isinstance(self.label, dict):
|
||||||
self.label = self.label.get("name")
|
self.label = self.label.get("name")
|
||||||
|
@ -112,6 +117,7 @@ class TrackMetadata:
|
||||||
self.albumartist = resp.get("artist", {}).get("name")
|
self.albumartist = resp.get("artist", {}).get("name")
|
||||||
self.disctotal = resp.get("numberOfVolumes")
|
self.disctotal = resp.get("numberOfVolumes")
|
||||||
self.isrc = resp.get("isrc")
|
self.isrc = resp.get("isrc")
|
||||||
|
self.explicit = resp.get("explicit", False)
|
||||||
# label not returned by API
|
# label not returned by API
|
||||||
|
|
||||||
elif self.__source == "deezer":
|
elif self.__source == "deezer":
|
||||||
|
@ -121,6 +127,9 @@ class TrackMetadata:
|
||||||
self.date = resp.get("release_date")
|
self.date = resp.get("release_date")
|
||||||
self.albumartist = resp.get("artist", {}).get("name")
|
self.albumartist = resp.get("artist", {}).get("name")
|
||||||
self.label = resp.get("label")
|
self.label = resp.get("label")
|
||||||
|
# either 0 or 1
|
||||||
|
self.explicit = bool(resp.get("parental_warning"))
|
||||||
|
|
||||||
elif self.__source == "soundcloud":
|
elif self.__source == "soundcloud":
|
||||||
raise NotImplementedError
|
raise NotImplementedError
|
||||||
else:
|
else:
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue