mirror of
https://github.com/nathom/streamrip.git
synced 2025-05-13 14:44:49 -04:00
Add ability to choose whether to embed cover
This commit is contained in:
parent
b9274a7039
commit
4c82858b57
2 changed files with 27 additions and 16 deletions
|
@ -128,9 +128,8 @@ class MusicDL(list):
|
||||||
"keep_cover": self.config.session["keep_cover"],
|
"keep_cover": self.config.session["keep_cover"],
|
||||||
"large_cover": self.config.session["metadata"]["large_cover"],
|
"large_cover": self.config.session["metadata"]["large_cover"],
|
||||||
"folder_format": self.config.session["path_format"]["folder"],
|
"folder_format": self.config.session["path_format"]["folder"],
|
||||||
"track_format": self.config.session["path_format"]["track"]
|
"track_format": self.config.session["path_format"]["track"],
|
||||||
# TODO: fully implement this
|
"embed_cover": self.config.session["metadata"]["embed_cover"],
|
||||||
# "embed_cover": self.config.session["metadata"]["embed_cover"],
|
|
||||||
}
|
}
|
||||||
logger.debug("Arguments from config: %s", arguments)
|
logger.debug("Arguments from config: %s", arguments)
|
||||||
for item in self:
|
for item in self:
|
||||||
|
|
|
@ -2,9 +2,7 @@ import logging
|
||||||
import os
|
import os
|
||||||
import re
|
import re
|
||||||
import shutil
|
import shutil
|
||||||
# import sys
|
|
||||||
from pprint import pformat
|
from pprint import pformat
|
||||||
# from pprint import 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
|
||||||
|
|
||||||
|
@ -251,8 +249,10 @@ class Track:
|
||||||
|
|
||||||
assert hasattr(self, "cover_url"), "must set cover_url attribute"
|
assert hasattr(self, "cover_url"), "must set cover_url attribute"
|
||||||
|
|
||||||
self.cover_path = os.path.join(self.folder, f"cover{hash(self.id)}.jpg")
|
self.cover_path = os.path.join(self.folder, f"cover{hash(self.meta.album)}.jpg")
|
||||||
logger.debug(f"Downloading cover from {self.cover_url}")
|
logger.debug(f"Downloading cover from {self.cover_url}")
|
||||||
|
click.secho(f"\nDownloading cover art for {self!s}", fg='blue')
|
||||||
|
|
||||||
if not os.path.exists(self.cover_path):
|
if not os.path.exists(self.cover_path):
|
||||||
tqdm_download(self.cover_url, self.cover_path)
|
tqdm_download(self.cover_url, self.cover_path)
|
||||||
else:
|
else:
|
||||||
|
@ -324,7 +324,7 @@ class Track:
|
||||||
self,
|
self,
|
||||||
album_meta: dict = None,
|
album_meta: dict = None,
|
||||||
cover: Union[Picture, APIC] = None,
|
cover: Union[Picture, APIC] = None,
|
||||||
embed_cover: bool = False,
|
embed_cover: bool = True,
|
||||||
):
|
):
|
||||||
"""Tag the track using the stored metadata.
|
"""Tag the track using the stored metadata.
|
||||||
|
|
||||||
|
@ -336,6 +336,8 @@ class Track:
|
||||||
:type album_meta: dict
|
:type album_meta: dict
|
||||||
:param cover: initialized mutagen cover object
|
:param cover: initialized mutagen cover object
|
||||||
:type cover: Union[Picture, APIC]
|
:type cover: Union[Picture, APIC]
|
||||||
|
:param embed_cover: Embed cover art into file
|
||||||
|
:type embed_cover: bool
|
||||||
"""
|
"""
|
||||||
assert isinstance(self.meta, TrackMetadata), "meta must be TrackMetadata"
|
assert isinstance(self.meta, TrackMetadata), "meta must be TrackMetadata"
|
||||||
if not self._is_downloaded:
|
if not self._is_downloaded:
|
||||||
|
@ -374,14 +376,16 @@ class Track:
|
||||||
for k, v in self.meta.tags(self.container):
|
for k, v in self.meta.tags(self.container):
|
||||||
audio[k] = v
|
audio[k] = v
|
||||||
|
|
||||||
if cover is None:
|
if embed_cover and cover is None:
|
||||||
assert hasattr(self, "cover")
|
assert hasattr(self, "cover")
|
||||||
cover = self.cover
|
cover = self.cover
|
||||||
|
|
||||||
if isinstance(audio, FLAC):
|
if isinstance(audio, FLAC):
|
||||||
|
if embed_cover:
|
||||||
audio.add_picture(cover)
|
audio.add_picture(cover)
|
||||||
audio.save()
|
audio.save()
|
||||||
elif isinstance(audio, ID3):
|
elif isinstance(audio, ID3):
|
||||||
|
if embed_cover:
|
||||||
audio.add(cover)
|
audio.add(cover)
|
||||||
audio.save(self.final_path, "v2_version=3")
|
audio.save(self.final_path, "v2_version=3")
|
||||||
else:
|
else:
|
||||||
|
@ -843,7 +847,8 @@ class Album(Tracklist):
|
||||||
else:
|
else:
|
||||||
tqdm_download(self.cover_urls["small"], cover_path)
|
tqdm_download(self.cover_urls["small"], cover_path)
|
||||||
|
|
||||||
if self.client.source != "deezer":
|
embed_cover = kwargs.get('embed_cover', True) # embed by default
|
||||||
|
if self.client.source != "deezer" and embed_cover:
|
||||||
cover = self.get_cover_obj(cover_path, quality)
|
cover = self.get_cover_obj(cover_path, quality)
|
||||||
|
|
||||||
for track in self:
|
for track in self:
|
||||||
|
@ -856,7 +861,7 @@ class Album(Tracklist):
|
||||||
track_format=kwargs.get("track_format", TRACK_FORMAT),
|
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)
|
track.tag(cover=cover, embed_cover=embed_cover)
|
||||||
|
|
||||||
if not kwargs.get("keep_cover", True):
|
if not kwargs.get("keep_cover", True):
|
||||||
logger.debug(f"Removing cover at {cover_path}")
|
logger.debug(f"Removing cover at {cover_path}")
|
||||||
|
@ -969,7 +974,6 @@ class Playlist(Tracklist):
|
||||||
:param kwargs:
|
:param kwargs:
|
||||||
"""
|
"""
|
||||||
self.meta = self.client.get(self.id, "playlist")
|
self.meta = self.client.get(self.id, "playlist")
|
||||||
self.name = self.meta.get("title")
|
|
||||||
self._load_tracks(**kwargs)
|
self._load_tracks(**kwargs)
|
||||||
|
|
||||||
def _load_tracks(self, new_tracknumbers: bool = True):
|
def _load_tracks(self, new_tracknumbers: bool = True):
|
||||||
|
@ -979,6 +983,7 @@ class Playlist(Tracklist):
|
||||||
:type new_tracknumbers: bool
|
:type new_tracknumbers: bool
|
||||||
"""
|
"""
|
||||||
if self.client.source == "qobuz":
|
if self.client.source == "qobuz":
|
||||||
|
self.name = self.meta['name']
|
||||||
tracklist = self.meta["tracks"]["items"]
|
tracklist = self.meta["tracks"]["items"]
|
||||||
|
|
||||||
def gen_cover(track): # ?
|
def gen_cover(track): # ?
|
||||||
|
@ -988,6 +993,7 @@ class Playlist(Tracklist):
|
||||||
return {"track": track, "album": track["album"]}
|
return {"track": track, "album": track["album"]}
|
||||||
|
|
||||||
elif self.client.source == "tidal":
|
elif self.client.source == "tidal":
|
||||||
|
self.name = self.meta['title']
|
||||||
tracklist = self.meta["tracks"]
|
tracklist = self.meta["tracks"]
|
||||||
|
|
||||||
def gen_cover(track):
|
def gen_cover(track):
|
||||||
|
@ -1001,6 +1007,7 @@ class Playlist(Tracklist):
|
||||||
}
|
}
|
||||||
|
|
||||||
elif self.client.source == "deezer":
|
elif self.client.source == "deezer":
|
||||||
|
self.name = self.meta['title']
|
||||||
tracklist = self.meta["tracks"]
|
tracklist = self.meta["tracks"]
|
||||||
|
|
||||||
def gen_cover(track):
|
def gen_cover(track):
|
||||||
|
@ -1056,7 +1063,7 @@ class Playlist(Tracklist):
|
||||||
for track in self:
|
for track in self:
|
||||||
track.download(parent_folder=folder, quality=quality, database=database)
|
track.download(parent_folder=folder, quality=quality, database=database)
|
||||||
if self.client.source != "deezer":
|
if self.client.source != "deezer":
|
||||||
track.tag()
|
track.tag(embed_cover=kwargs.get('embed_cover', True))
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def _parse_get_resp(item: dict, client: ClientInterface):
|
def _parse_get_resp(item: dict, client: ClientInterface):
|
||||||
|
@ -1068,10 +1075,11 @@ class Playlist(Tracklist):
|
||||||
:param client:
|
:param client:
|
||||||
:type client: ClientInterface
|
:type client: ClientInterface
|
||||||
"""
|
"""
|
||||||
|
print(item.keys())
|
||||||
if client.source == "qobuz":
|
if client.source == "qobuz":
|
||||||
return {
|
return {
|
||||||
"name": item.get("name"),
|
"name": item["name"],
|
||||||
"id": item.get("id"),
|
"id": item['id'],
|
||||||
}
|
}
|
||||||
elif client.source == "tidal":
|
elif client.source == "tidal":
|
||||||
return {
|
return {
|
||||||
|
@ -1086,6 +1094,10 @@ class Playlist(Tracklist):
|
||||||
|
|
||||||
raise InvalidSourceError(client.source)
|
raise InvalidSourceError(client.source)
|
||||||
|
|
||||||
|
@property
|
||||||
|
def title(self):
|
||||||
|
return self.name
|
||||||
|
|
||||||
def __repr__(self) -> str:
|
def __repr__(self) -> str:
|
||||||
"""Return a string representation of this Playlist object.
|
"""Return a string representation of this Playlist object.
|
||||||
Useful for pprint and json.dumps.
|
Useful for pprint and json.dumps.
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue