mirror of
https://github.com/nathom/streamrip.git
synced 2025-05-19 01:35:24 -04:00
parent
3b6e3191ee
commit
bbc6e3ec8a
4 changed files with 36 additions and 18 deletions
|
@ -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)[
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
):
|
):
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue