mirror of
https://github.com/nathom/streamrip.git
synced 2025-05-23 11:37:08 -04:00
Formatting
This commit is contained in:
parent
9301757c10
commit
b00f5278c4
4 changed files with 32 additions and 31 deletions
|
@ -276,7 +276,7 @@ class MusicDL(list):
|
||||||
pl.append(track)
|
pl.append(track)
|
||||||
pl.loaded = True
|
pl.loaded = True
|
||||||
|
|
||||||
click.secho(f"{tracks_not_found} tracks not found.", fg='yellow')
|
click.secho(f"{tracks_not_found} tracks not found.", fg="yellow")
|
||||||
self.append(pl)
|
self.append(pl)
|
||||||
|
|
||||||
def handle_txt(self, filepath: Union[str, os.PathLike]):
|
def handle_txt(self, filepath: Union[str, os.PathLike]):
|
||||||
|
|
|
@ -3,8 +3,7 @@ import os
|
||||||
import re
|
import re
|
||||||
import shutil
|
import shutil
|
||||||
import subprocess
|
import subprocess
|
||||||
import sys
|
from pprint import pformat
|
||||||
from pprint import pformat, pprint
|
|
||||||
from tempfile import gettempdir
|
from tempfile import gettempdir
|
||||||
from typing import Any, Callable, Optional, Tuple, Union
|
from typing import Any, Callable, Optional, Tuple, Union
|
||||||
|
|
||||||
|
@ -33,11 +32,11 @@ from .metadata import TrackMetadata
|
||||||
from .utils import (
|
from .utils import (
|
||||||
clean_format,
|
clean_format,
|
||||||
decrypt_mqa_file,
|
decrypt_mqa_file,
|
||||||
|
ext,
|
||||||
get_quality_id,
|
get_quality_id,
|
||||||
safe_get,
|
safe_get,
|
||||||
tidal_cover_url,
|
tidal_cover_url,
|
||||||
tqdm_download,
|
tqdm_download,
|
||||||
ext,
|
|
||||||
)
|
)
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
@ -314,9 +313,8 @@ class Track:
|
||||||
formatter = self.meta.get_formatter()
|
formatter = self.meta.get_formatter()
|
||||||
logger.debug("Track meta formatter %s", pformat(formatter))
|
logger.debug("Track meta formatter %s", pformat(formatter))
|
||||||
filename = clean_format(self.file_format, formatter)
|
filename = clean_format(self.file_format, formatter)
|
||||||
self.final_path = (
|
self.final_path = os.path.join(self.folder, filename)[:250].strip() + ext(
|
||||||
os.path.join(self.folder, filename)[:250].strip()
|
self.quality, self.client.source
|
||||||
+ ext(self.quality, self.client.source)
|
|
||||||
)
|
)
|
||||||
|
|
||||||
logger.debug("Formatted path: %s", self.final_path)
|
logger.debug("Formatted path: %s", self.final_path)
|
||||||
|
@ -404,11 +402,11 @@ class Track:
|
||||||
logger.debug("Tagging file with %s container", self.container)
|
logger.debug("Tagging file with %s container", self.container)
|
||||||
audio = FLAC(self.final_path)
|
audio = FLAC(self.final_path)
|
||||||
elif self.quality <= 1:
|
elif self.quality <= 1:
|
||||||
if self.client.source == 'tidal':
|
if self.client.source == "tidal":
|
||||||
self.container = 'AAC'
|
self.container = "AAC"
|
||||||
audio = MP4(self.final_path)
|
audio = MP4(self.final_path)
|
||||||
else:
|
else:
|
||||||
self.container = 'MP3'
|
self.container = "MP3"
|
||||||
try:
|
try:
|
||||||
audio = ID3(self.final_path)
|
audio = ID3(self.final_path)
|
||||||
except ID3NoHeaderError:
|
except ID3NoHeaderError:
|
||||||
|
@ -425,7 +423,9 @@ class Track:
|
||||||
|
|
||||||
if embed_cover and cover is None:
|
if embed_cover and cover is None:
|
||||||
assert hasattr(self, "cover_path")
|
assert hasattr(self, "cover_path")
|
||||||
cover = Tracklist.get_cover_obj(self.cover_path, self.quality, self.client.source)
|
cover = Tracklist.get_cover_obj(
|
||||||
|
self.cover_path, self.quality, self.client.source
|
||||||
|
)
|
||||||
|
|
||||||
if isinstance(audio, FLAC):
|
if isinstance(audio, FLAC):
|
||||||
if embed_cover:
|
if embed_cover:
|
||||||
|
@ -436,7 +436,7 @@ class Track:
|
||||||
audio.add(cover)
|
audio.add(cover)
|
||||||
audio.save(self.final_path, "v2_version=3")
|
audio.save(self.final_path, "v2_version=3")
|
||||||
elif isinstance(audio, MP4):
|
elif isinstance(audio, MP4):
|
||||||
audio['covr'] = [cover]
|
audio["covr"] = [cover]
|
||||||
audio.save()
|
audio.save()
|
||||||
else:
|
else:
|
||||||
raise ValueError(f"Unknown container type: {audio}")
|
raise ValueError(f"Unknown container type: {audio}")
|
||||||
|
@ -616,7 +616,9 @@ class Tracklist(list):
|
||||||
return cls(client=client, **info)
|
return cls(client=client, **info)
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def get_cover_obj(cover_path: str, quality: int, source: str) -> Union[Picture, APIC]:
|
def get_cover_obj(
|
||||||
|
cover_path: str, quality: int, source: str
|
||||||
|
) -> Union[Picture, APIC]:
|
||||||
"""Given the path to an image and a quality id, return an initialized
|
"""Given the path to an image and a quality id, return an initialized
|
||||||
cover object that can be used for every track in the album.
|
cover object that can be used for every track in the album.
|
||||||
|
|
||||||
|
@ -626,6 +628,7 @@ class Tracklist(list):
|
||||||
:type quality: int
|
:type quality: int
|
||||||
:rtype: Union[Picture, APIC]
|
:rtype: Union[Picture, APIC]
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def flac_mp3_cover_obj(cover):
|
def flac_mp3_cover_obj(cover):
|
||||||
cover_obj = cover()
|
cover_obj = cover()
|
||||||
cover_obj.type = 3
|
cover_obj.type = 3
|
||||||
|
@ -637,7 +640,7 @@ class Tracklist(list):
|
||||||
|
|
||||||
if quality > 1:
|
if quality > 1:
|
||||||
cover = Picture
|
cover = Picture
|
||||||
elif source == 'tidal':
|
elif source == "tidal":
|
||||||
cover = MP4Cover
|
cover = MP4Cover
|
||||||
else:
|
else:
|
||||||
cover = APIC
|
cover = APIC
|
||||||
|
@ -654,7 +657,7 @@ class Tracklist(list):
|
||||||
return flac_mp3_cover_obj(cover)
|
return flac_mp3_cover_obj(cover)
|
||||||
|
|
||||||
elif cover is MP4Cover:
|
elif cover is MP4Cover:
|
||||||
with open(cover_path, 'rb') as img:
|
with open(cover_path, "rb") as img:
|
||||||
return cover(img.read(), imageformat=MP4Cover.FORMAT_JPEG)
|
return cover(img.read(), imageformat=MP4Cover.FORMAT_JPEG)
|
||||||
|
|
||||||
raise InvalidQuality(f"Quality {quality} not allowed")
|
raise InvalidQuality(f"Quality {quality} not allowed")
|
||||||
|
|
|
@ -1,8 +1,6 @@
|
||||||
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 (
|
||||||
|
@ -124,7 +122,7 @@ class TrackMetadata:
|
||||||
self.year = self.date[:4]
|
self.year = self.date[:4]
|
||||||
|
|
||||||
self.copyright = resp.get("copyright")
|
self.copyright = resp.get("copyright")
|
||||||
self.albumartist = safe_get(resp, 'artist', 'name')
|
self.albumartist = safe_get(resp, "artist", "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)
|
self.explicit = resp.get("explicit", False)
|
||||||
|
@ -133,9 +131,9 @@ class TrackMetadata:
|
||||||
elif self.__source == "deezer":
|
elif self.__source == "deezer":
|
||||||
self.album = resp.get("title")
|
self.album = resp.get("title")
|
||||||
self.tracktotal = resp.get("track_total")
|
self.tracktotal = resp.get("track_total")
|
||||||
self.genre = safe_get(resp, 'genres', 'data')
|
self.genre = safe_get(resp, "genres", "data")
|
||||||
self.date = resp.get("release_date")
|
self.date = resp.get("release_date")
|
||||||
self.albumartist = safe_get(resp, 'artist', 'name')
|
self.albumartist = safe_get(resp, "artist", "name")
|
||||||
self.label = resp.get("label")
|
self.label = resp.get("label")
|
||||||
# either 0 or 1
|
# either 0 or 1
|
||||||
self.explicit = bool(resp.get("parental_warning"))
|
self.explicit = bool(resp.get("parental_warning"))
|
||||||
|
@ -156,23 +154,23 @@ class TrackMetadata:
|
||||||
self._mod_title(track.get("version"), track.get("work"))
|
self._mod_title(track.get("version"), track.get("work"))
|
||||||
self.composer = track.get("composer", {}).get("name")
|
self.composer = track.get("composer", {}).get("name")
|
||||||
|
|
||||||
self.tracknumber = track.get('track_number', 1)
|
self.tracknumber = track.get("track_number", 1)
|
||||||
self.discnumber = track.get("media_number", 1)
|
self.discnumber = track.get("media_number", 1)
|
||||||
self.artist = safe_get(track, 'performer', 'name')
|
self.artist = safe_get(track, "performer", "name")
|
||||||
if self.artist is None:
|
if self.artist is None:
|
||||||
self.artist = self.get('albumartist')
|
self.artist = self.get("albumartist")
|
||||||
|
|
||||||
elif self.__source == "tidal":
|
elif self.__source == "tidal":
|
||||||
self.title = track.get("title").strip()
|
self.title = track.get("title").strip()
|
||||||
self._mod_title(track.get("version"), None)
|
self._mod_title(track.get("version"), None)
|
||||||
self.tracknumber = track.get('trackNumber', 1)
|
self.tracknumber = track.get("trackNumber", 1)
|
||||||
self.discnumber = track.get("volumeNumber")
|
self.discnumber = track.get("volumeNumber")
|
||||||
self.artist = track.get("artist", {}).get("name")
|
self.artist = track.get("artist", {}).get("name")
|
||||||
|
|
||||||
elif self.__source == "deezer":
|
elif self.__source == "deezer":
|
||||||
self.title = track.get("title").strip()
|
self.title = track.get("title").strip()
|
||||||
self._mod_title(track.get("version"), None)
|
self._mod_title(track.get("version"), None)
|
||||||
self.tracknumber = track.get('track_position', 1)
|
self.tracknumber = track.get("track_position", 1)
|
||||||
self.discnumber = track.get("disk_number")
|
self.discnumber = track.get("disk_number")
|
||||||
self.artist = track.get("artist", {}).get("name")
|
self.artist = track.get("artist", {}).get("name")
|
||||||
|
|
||||||
|
@ -377,8 +375,8 @@ class TrackMetadata:
|
||||||
for k, v in MP4_KEY.items():
|
for k, v in MP4_KEY.items():
|
||||||
if k == "tracknumber":
|
if k == "tracknumber":
|
||||||
text = [(self.tracknumber, self.tracktotal)]
|
text = [(self.tracknumber, self.tracktotal)]
|
||||||
elif k == 'discnumber':
|
elif k == "discnumber":
|
||||||
text = [(self.discnumber, self.get('disctotal', 1))]
|
text = [(self.discnumber, self.get("disctotal", 1))]
|
||||||
else:
|
else:
|
||||||
text = getattr(self, k)
|
text = getattr(self, k)
|
||||||
|
|
||||||
|
|
|
@ -210,9 +210,9 @@ def decrypt_mqa_file(in_path, out_path, encryption_key):
|
||||||
|
|
||||||
def ext(quality: int, source: str):
|
def ext(quality: int, source: str):
|
||||||
if quality <= 1:
|
if quality <= 1:
|
||||||
if source == 'tidal':
|
if source == "tidal":
|
||||||
return '.m4a'
|
return ".m4a"
|
||||||
else:
|
else:
|
||||||
return '.mp3'
|
return ".mp3"
|
||||||
else:
|
else:
|
||||||
return '.flac'
|
return ".flac"
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue