Implement Feature Request #25

This commit is contained in:
nathom 2021-04-06 16:46:47 -07:00
parent 8c6bf23ce4
commit 7e14479403
4 changed files with 44 additions and 36 deletions

View file

@ -21,7 +21,9 @@ if not os.path.isdir(CACHE_DIR):
@click.group(invoke_without_command=True)
@click.option("-c", "--convert", metavar="CODEC", help="alac, mp3, flac, or ogg")
@click.option("-u", "--urls", metavar="URLS", help="Url from Qobuz, Tidal, SoundCloud, or Deezer")
@click.option(
"-u", "--urls", metavar="URLS", help="Url from Qobuz, Tidal, SoundCloud, or Deezer"
)
@click.option(
"-q",
"--quality",
@ -113,7 +115,9 @@ def filter_discography(ctx, **kwargs):
@cli.command()
@click.option("-t", "--type", default="album", help="album, playlist, track, or artist")
@click.option("-s", "--source", default="qobuz", help="qobuz, tidal, soundcloud, or deezer")
@click.option(
"-s", "--source", default="qobuz", help="qobuz, tidal, soundcloud, or deezer"
)
@click.argument("QUERY", nargs=-1)
@click.pass_context
def search(ctx, **kwargs):

View file

@ -37,7 +37,7 @@ class Config:
defaults = {
"qobuz": {
"quality": 2,
"quality": 3,
"email": None,
"password": None,
"app_id": "", # Avoid NoneType error
@ -73,13 +73,12 @@ class Config:
"non_remaster": False,
},
"downloads": {"folder": DOWNLOADS_DIR},
"metadata": {
"embed_cover": True,
"large_cover": True,
"default_comment": None,
"remove_extra_tags": False,
"artwork": {
"embed": True,
"embed_size": "large",
"download_size": "original",
"keep_image": True,
},
"keep_cover": True,
"path_format": {"folder": FOLDER_FORMAT, "track": TRACK_FORMAT},
}

View file

@ -145,11 +145,12 @@ class MusicDL(list):
arguments = {
"database": self.db,
"parent_folder": self.config.session["downloads"]["folder"],
"keep_cover": self.config.session["keep_cover"],
"large_cover": self.config.session["metadata"]["large_cover"],
"folder_format": self.config.session["path_format"]["folder"],
"track_format": self.config.session["path_format"]["track"],
"embed_cover": self.config.session["metadata"]["embed_cover"],
"keep_cover": self.config.session["artwork"]["keep_image"],
"embed_cover": self.config.session["artwork"]["embed"],
"embed_cover_size": self.config.session["artwork"]["embed_size"],
"download_cover_size": self.config.session["artwork"]["download_size"],
}
logger.debug("Arguments from config: %s", arguments)
for item in self:

View file

@ -1,9 +1,9 @@
import logging
import sys
import os
import re
import shutil
import subprocess
import sys
from pprint import pformat, pprint
from tempfile import gettempdir
from typing import Any, Callable, Optional, Tuple, Union
@ -619,7 +619,7 @@ class Tracklist(list):
size_ = os.path.getsize(cover_path)
if size_ > FLAC_MAX_BLOCKSIZE:
raise TooLargeCoverArt(
"Not suitable for Picture embed: {size_ * 10 ** 6}MB"
f"Not suitable for Picture embed: {size_ / 10 ** 6} MB"
)
elif cover is None:
raise InvalidQuality(f"Quality {quality} not allowed")
@ -742,6 +742,8 @@ class Album(Tracklist):
else:
sampling_rate = None
resp["image"]["original"] = resp["image"]["large"].replace("600", "org")
return {
"id": resp.get("id"),
"title": resp.get("title"),
@ -877,27 +879,29 @@ class Album(Tracklist):
self.download_message()
downloaded_cover_size = kwargs.get("download_cover_size", "original")
embed_cover_size = kwargs.get("embed_cover_size", "large")
if os.path.isfile(cover_path):
logger.debug("Cover already downloaded: %s. Skipping", cover_path)
else:
click.secho("Downloading cover art", fg="magenta")
if kwargs.get("large_cover", True):
cover_url = self.cover_urls.get("large")
if self.client.source == "qobuz":
tqdm_download(cover_url.replace("600", "org"), cover_path)
else:
tqdm_download(cover_url, cover_path)
if os.path.getsize(cover_path) > FLAC_MAX_BLOCKSIZE: # 16.7 MB
click.secho(
"Large cover is too large to embed, embedding small cover instead.",
fg="yellow",
)
large_cover_path = cover_path.replace(".jpg", "_large") + ".jpg"
shutil.move(cover_path, large_cover_path)
tqdm_download(self.cover_urls["small"], cover_path)
if downloaded_cover_size in self.cover_urls:
tqdm_download(self.cover_urls[downloaded_cover_size], cover_path)
else:
tqdm_download(self.cover_urls["small"], cover_path)
logger.debug(
f"Cover size {downloaded_cover_size} not available, defaulting to large"
)
tqdm_download(self.cover_urls["large"], cover_path)
if (
downloaded_cover_size != embed_cover_size
or os.path.size(cover_path) > FLAC_MAX_BLOCKSIZE
):
dl_cover_path = cover_path.replace(
".jpg", f"_{downloaded_cover_size}.jpg"
)
shutil.move(cover_path, dl_cover_path)
tqdm_download(self.cover_urls[embed_cover_size], cover_path)
embed_cover = kwargs.get("embed_cover", True) # embed by default
if self.client.source != "deezer" and embed_cover:
@ -943,13 +947,13 @@ class Album(Tracklist):
def _get_formatted_folder(self, parent_folder: str, quality: int) -> str:
if quality >= 2:
self.container = 'FLAC'
self.container = "FLAC"
else:
self.bit_depth = self.sampling_rate = None
if self.client.source == 'tidal':
self.container = 'AAC'
if self.client.source == "tidal":
self.container = "AAC"
else:
self.container = 'MP3'
self.container = "MP3"
formatted_folder = clean_format(self.folder_format, self._get_formatter())
@ -1274,9 +1278,9 @@ class Artist(Tracklist):
logger.debug(f"Length of tracklist {len(self)}")
logger.debug(f"Filters: {filters}")
if 'repeats' in filters:
if "repeats" in filters:
final = self._remove_repeats(bit_depth=max, sampling_rate=min)
filters = tuple(f for f in filters if f != 'repeats')
filters = tuple(f for f in filters if f != "repeats")
else:
final = self