Signed-off-by: nathom <nathanthomas707@gmail.com>
This commit is contained in:
nathom 2021-06-08 23:18:15 -07:00
parent 3b6e3191ee
commit bbc6e3ec8a
4 changed files with 36 additions and 18 deletions

View file

@ -374,7 +374,7 @@ class Track:
a dict with the keys allowed in formatter strings, and their values in a dict with the keys allowed in formatter strings, and their values in
the TrackMetadata object. the TrackMetadata object.
""" """
formatter = self.meta.get_formatter() formatter = self.meta.get_formatter(max_quality=self.quality)
logger.debug("Track meta formatter %s", formatter) logger.debug("Track meta formatter %s", formatter)
filename = clean_format(self.file_format, formatter) filename = clean_format(self.file_format, formatter)
self.final_path = os.path.join(self.folder, filename)[ self.final_path = os.path.join(self.folder, filename)[

View file

@ -446,7 +446,7 @@ class TrackMetadata:
""" """
self._year = val self._year = val
def get_formatter(self) -> dict: def get_formatter(self, max_quality: int) -> dict:
"""Return a dict that is used to apply values to file format strings. """Return a dict that is used to apply values to file format strings.
:rtype: dict :rtype: dict

View file

@ -21,6 +21,7 @@ from .utils import (
clean_format, clean_format,
get_container, get_container,
safe_get, safe_get,
get_stats_from_quality,
tidal_cover_url, tidal_cover_url,
tqdm_download, tqdm_download,
) )
@ -104,10 +105,7 @@ class Album(Tracklist):
""" """
# Generate the folder name # Generate the folder name
self.folder_format = kwargs.get("folder_format", FOLDER_FORMAT) self.folder_format = kwargs.get("folder_format", FOLDER_FORMAT)
if not hasattr(self, "quality"): self.quality = min(kwargs.get("quality", 3), self.client.max_quality)
self.quality = min(
kwargs.get("quality", 3), self.client.max_quality
)
self.folder = self._get_formatted_folder( self.folder = self._get_formatted_folder(
kwargs.get("parent_folder", "StreamripDownloads"), self.quality kwargs.get("parent_folder", "StreamripDownloads"), self.quality
@ -238,20 +236,25 @@ class Album(Tracklist):
) )
def _get_formatter(self) -> dict: def _get_formatter(self) -> dict:
"""Get a formatter that is used for previews in core.py. """Get a formatter that is used for naming folders and previews.
:rtype: dict :rtype: dict
""" """
fmt = dict() fmt = {key: self.get(key) for key in ALBUM_KEYS}
for key in ALBUM_KEYS:
# default to None
fmt[key] = self.get(key)
if fmt.get("sampling_rate", False): max_bd, max_sr = get_stats_from_quality(self.quality)
fmt["sampling_rate"] /= 1000 if max_sr < fmt.get("sampling_rate", 0) or max_bd < fmt.get(
# change 48.0kHz -> 48kHz, 44.1kHz -> 44.1kHz "bit_depth", 0
if fmt["sampling_rate"] % 1 == 0.0: ):
fmt["sampling_rate"] = int(fmt["sampling_rate"]) fmt["sampling_rate"] = max_sr
fmt["bit_depth"] = max_bd
if sr := fmt.get("sampling_rate"):
if sr % 1000 == 0:
# truncate the decimal .0 when converting to str
fmt["sampling_rate"] = int(sr / 1000)
else:
fmt["sampling_rate"] = sr / 1000
return fmt return fmt

View file

@ -5,7 +5,7 @@ import logging
import os import os
import re import re
from string import Formatter from string import Formatter
from typing import Dict, Hashable, Optional, Union from typing import Dict, Hashable, Optional, Union, Tuple
import click import click
import requests import requests
@ -14,7 +14,7 @@ from requests.packages import urllib3
from tqdm import tqdm from tqdm import tqdm
from .constants import AGENT, TIDAL_COVER_URL from .constants import AGENT, TIDAL_COVER_URL
from .exceptions import InvalidSourceError, NonStreamable from .exceptions import InvalidSourceError, NonStreamable, InvalidQuality
urllib3.disable_warnings() urllib3.disable_warnings()
logger = logging.getLogger("streamrip") logger = logging.getLogger("streamrip")
@ -109,6 +109,21 @@ def get_quality_id(bit_depth: Optional[int], sampling_rate: Optional[int]):
return 4 return 4
def get_stats_from_quality(
quality_id: int,
) -> Tuple[Optional[int], Optional[int]]:
if quality_id <= 1:
return (None, None)
elif quality_id == 2:
return (16, 44100)
elif quality_id == 3:
return (24, 96000)
elif quality_id == 4:
return (24, 192000)
else:
raise InvalidQuality(quality_id)
def tqdm_download( def tqdm_download(
url: str, filepath: str, params: dict = None, desc: str = None url: str, filepath: str, params: dict = None, desc: str = None
): ):