mirror of
https://github.com/nathom/streamrip.git
synced 2025-05-20 18:25:30 -04:00
parent
7e14479403
commit
117fadb7e5
4 changed files with 36 additions and 15 deletions
|
@ -73,6 +73,7 @@ __MP4_KEYS = (
|
||||||
"trkn",
|
"trkn",
|
||||||
"disk",
|
"disk",
|
||||||
None,
|
None,
|
||||||
|
None,
|
||||||
)
|
)
|
||||||
|
|
||||||
__MP3_KEYS = (
|
__MP3_KEYS = (
|
||||||
|
@ -95,6 +96,7 @@ __MP3_KEYS = (
|
||||||
id3.TRCK,
|
id3.TRCK,
|
||||||
id3.TPOS,
|
id3.TPOS,
|
||||||
None,
|
None,
|
||||||
|
None,
|
||||||
)
|
)
|
||||||
|
|
||||||
__METADATA_TYPES = (
|
__METADATA_TYPES = (
|
||||||
|
@ -117,6 +119,7 @@ __METADATA_TYPES = (
|
||||||
"tracknumber",
|
"tracknumber",
|
||||||
"discnumber",
|
"discnumber",
|
||||||
"tracktotal",
|
"tracktotal",
|
||||||
|
"disctotal",
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -748,9 +748,10 @@ class Album(Tracklist):
|
||||||
"id": resp.get("id"),
|
"id": resp.get("id"),
|
||||||
"title": resp.get("title"),
|
"title": resp.get("title"),
|
||||||
"_artist": resp.get("artist") or resp.get("performer"),
|
"_artist": resp.get("artist") or resp.get("performer"),
|
||||||
"albumartist": resp.get("artist", {}).get("name"),
|
"albumartist": safe_get(resp, "artist", "name"),
|
||||||
"year": str(resp.get("release_date_original"))[:4],
|
"year": str(resp.get("release_date_original"))[:4],
|
||||||
"version": resp.get("version"),
|
"version": resp.get("version"),
|
||||||
|
"composer": safe_get(resp, "composer", "name"),
|
||||||
"release_type": resp.get("release_type", "album"),
|
"release_type": resp.get("release_type", "album"),
|
||||||
"cover_urls": resp.get("image"),
|
"cover_urls": resp.get("image"),
|
||||||
"streamable": resp.get("streamable"),
|
"streamable": resp.get("streamable"),
|
||||||
|
@ -760,6 +761,10 @@ class Album(Tracklist):
|
||||||
"bit_depth": resp.get("maximum_bit_depth"),
|
"bit_depth": resp.get("maximum_bit_depth"),
|
||||||
"sampling_rate": sampling_rate,
|
"sampling_rate": sampling_rate,
|
||||||
"tracktotal": resp.get("tracks_count"),
|
"tracktotal": resp.get("tracks_count"),
|
||||||
|
"description": resp.get("description"),
|
||||||
|
"disctotal": max(
|
||||||
|
track.get("media_number", 1) for track in resp["tracks"]["items"]
|
||||||
|
),
|
||||||
}
|
}
|
||||||
elif client.source == "tidal":
|
elif client.source == "tidal":
|
||||||
return {
|
return {
|
||||||
|
@ -778,6 +783,7 @@ class Album(Tracklist):
|
||||||
"bit_depth": 24 if resp.get("audioQuality") == "HI_RES" else 16,
|
"bit_depth": 24 if resp.get("audioQuality") == "HI_RES" else 16,
|
||||||
"sampling_rate": 44100, # always 44.1 kHz
|
"sampling_rate": 44100, # always 44.1 kHz
|
||||||
"tracktotal": resp.get("numberOfTracks"),
|
"tracktotal": resp.get("numberOfTracks"),
|
||||||
|
"disctotal": 1,
|
||||||
}
|
}
|
||||||
elif client.source == "deezer":
|
elif client.source == "deezer":
|
||||||
if resp.get("release_date", False):
|
if resp.get("release_date", False):
|
||||||
|
@ -804,6 +810,7 @@ class Album(Tracklist):
|
||||||
"bit_depth": 16,
|
"bit_depth": 16,
|
||||||
"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']),
|
||||||
}
|
}
|
||||||
|
|
||||||
raise InvalidSourceError(client.source)
|
raise InvalidSourceError(client.source)
|
||||||
|
@ -907,15 +914,21 @@ class Album(Tracklist):
|
||||||
if self.client.source != "deezer" and embed_cover:
|
if self.client.source != "deezer" and embed_cover:
|
||||||
cover = self.get_cover_obj(cover_path, quality)
|
cover = self.get_cover_obj(cover_path, quality)
|
||||||
|
|
||||||
|
download_args = {
|
||||||
|
'quality': quality,
|
||||||
|
'parent_folder': folder,
|
||||||
|
'progress_bar': kwargs.get("progress_bar", True),
|
||||||
|
'database': database,
|
||||||
|
'track_format': kwargs.get("track_format", TRACK_FORMAT),
|
||||||
|
}
|
||||||
for track in self:
|
for track in self:
|
||||||
logger.debug("Downloading track to %s", folder)
|
logger.debug("Downloading track to %s", folder)
|
||||||
track.download(
|
if self.disctotal > 1:
|
||||||
quality,
|
disc_folder = os.path.join(folder, f"Disc {track.meta.discnumber}")
|
||||||
folder,
|
download_args['parent_folder'] = disc_folder
|
||||||
kwargs.get("progress_bar", True),
|
|
||||||
database=database,
|
track.download(**download_args)
|
||||||
track_format=kwargs.get("track_format", TRACK_FORMAT),
|
|
||||||
)
|
|
||||||
if kwargs.get("tag_tracks", True) and self.client.source != "deezer":
|
if kwargs.get("tag_tracks", True) and self.client.source != "deezer":
|
||||||
track.tag(cover=cover, embed_cover=embed_cover)
|
track.tag(cover=cover, embed_cover=embed_cover)
|
||||||
|
|
||||||
|
@ -923,7 +936,7 @@ class Album(Tracklist):
|
||||||
logger.debug(f"Removing cover at {cover_path}")
|
logger.debug(f"Removing cover at {cover_path}")
|
||||||
try:
|
try:
|
||||||
os.remove(cover_path)
|
os.remove(cover_path)
|
||||||
os.remove(large_cover_path)
|
os.remove(dl_cover_path)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logger.debug(e)
|
logger.debug(e)
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,8 @@
|
||||||
import json
|
import json
|
||||||
import logging
|
import logging
|
||||||
import re
|
import re
|
||||||
|
import sys
|
||||||
|
from pprint import pprint
|
||||||
from typing import Generator, Optional, Tuple, Union
|
from typing import Generator, Optional, Tuple, Union
|
||||||
|
|
||||||
from .constants import (
|
from .constants import (
|
||||||
|
@ -83,7 +85,7 @@ class TrackMetadata:
|
||||||
"""Parse the metadata from an resp dict returned by the
|
"""Parse the metadata from an resp dict returned by the
|
||||||
Qobuz API.
|
Qobuz API.
|
||||||
|
|
||||||
:param dict resp: from the Qobuz API
|
:param dict resp: from API
|
||||||
"""
|
"""
|
||||||
if self.__source == "qobuz":
|
if self.__source == "qobuz":
|
||||||
self.album = resp.get("title")
|
self.album = resp.get("title")
|
||||||
|
@ -93,6 +95,10 @@ class TrackMetadata:
|
||||||
self.copyright = resp.get("copyright")
|
self.copyright = resp.get("copyright")
|
||||||
self.albumartist = resp.get("artist", {}).get("name")
|
self.albumartist = resp.get("artist", {}).get("name")
|
||||||
self.label = resp.get("label")
|
self.label = resp.get("label")
|
||||||
|
self.description = resp.get("description")
|
||||||
|
self.disctotal = max(
|
||||||
|
track.get("media_number", 1) for track in resp["tracks"]["items"]
|
||||||
|
)
|
||||||
|
|
||||||
if isinstance(self.label, dict):
|
if isinstance(self.label, dict):
|
||||||
self.label = self.label.get("name")
|
self.label = self.label.get("name")
|
||||||
|
@ -114,7 +120,7 @@ class TrackMetadata:
|
||||||
self.albumartist = resp.get("artist", {}).get("name")
|
self.albumartist = resp.get("artist", {}).get("name")
|
||||||
self.label = resp.get("label")
|
self.label = resp.get("label")
|
||||||
elif self.__source == "soundcloud":
|
elif self.__source == "soundcloud":
|
||||||
raise Exception
|
raise NotImplementedError
|
||||||
else:
|
else:
|
||||||
raise ValueError(self.__source)
|
raise ValueError(self.__source)
|
||||||
|
|
||||||
|
@ -336,7 +342,7 @@ class TrackMetadata:
|
||||||
if k == "tracknumber":
|
if k == "tracknumber":
|
||||||
text = f"{self.tracknumber}/{self.tracktotal}"
|
text = f"{self.tracknumber}/{self.tracktotal}"
|
||||||
elif k == "discnumber":
|
elif k == "discnumber":
|
||||||
text = str(self.discnumber)
|
text = f"{self.discnumber}/{self.get('disctotal', 1)}"
|
||||||
else:
|
else:
|
||||||
text = getattr(self, k)
|
text = getattr(self, k)
|
||||||
|
|
||||||
|
|
|
@ -173,7 +173,7 @@ def init_log(
|
||||||
"""
|
"""
|
||||||
if not path:
|
if not path:
|
||||||
os.makedirs(LOG_DIR, exist_ok=True)
|
os.makedirs(LOG_DIR, exist_ok=True)
|
||||||
path = os.path.join(LOG_DIR, "qobuz_dl.log")
|
path = os.path.join(LOG_DIR, "streamrip")
|
||||||
|
|
||||||
logger = logging.getLogger()
|
logger = logging.getLogger()
|
||||||
level = logging.getLevelName(level)
|
level = logging.getLevelName(level)
|
||||||
|
@ -193,8 +193,7 @@ def init_log(
|
||||||
logger.addHandler(printable)
|
logger.addHandler(printable)
|
||||||
logger.addHandler(rotable)
|
logger.addHandler(rotable)
|
||||||
|
|
||||||
logging.getLogger("urllib3").setLevel(logging.WARNING)
|
logging.getLogger("urllib3").setLevel(logging.DEBUG)
|
||||||
logging.getLogger("tidal_api").setLevel(logging.WARNING)
|
|
||||||
|
|
||||||
|
|
||||||
def capitalize(s: str) -> str:
|
def capitalize(s: str) -> str:
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue