mirror of
https://github.com/nathom/streamrip.git
synced 2025-05-17 08:35:08 -04:00
Add option to set album tag to playlist name
This commit is contained in:
parent
b00f5278c4
commit
ac02f7902a
5 changed files with 34 additions and 8 deletions
|
@ -80,6 +80,9 @@ class Config:
|
||||||
"keep_embedded_cover": False,
|
"keep_embedded_cover": False,
|
||||||
"keep_downloaded_cover": True,
|
"keep_downloaded_cover": True,
|
||||||
},
|
},
|
||||||
|
"metadata": {
|
||||||
|
"set_playlist_to_album": False,
|
||||||
|
},
|
||||||
"path_format": {"folder": FOLDER_FORMAT, "track": TRACK_FORMAT},
|
"path_format": {"folder": FOLDER_FORMAT, "track": TRACK_FORMAT},
|
||||||
"check_for_updates": True,
|
"check_for_updates": True,
|
||||||
"lastfm": {"source": "qobuz"},
|
"lastfm": {"source": "qobuz"},
|
||||||
|
|
|
@ -2,7 +2,6 @@ import logging
|
||||||
import os
|
import os
|
||||||
import re
|
import re
|
||||||
import sys
|
import sys
|
||||||
import time
|
|
||||||
from getpass import getpass
|
from getpass import getpass
|
||||||
from hashlib import md5
|
from hashlib import md5
|
||||||
from string import Formatter
|
from string import Formatter
|
||||||
|
@ -163,6 +162,9 @@ class MusicDL(list):
|
||||||
"embed_cover": self.config.session["artwork"]["embed"],
|
"embed_cover": self.config.session["artwork"]["embed"],
|
||||||
"embed_cover_size": self.config.session["artwork"]["embed_size"],
|
"embed_cover_size": self.config.session["artwork"]["embed_size"],
|
||||||
"download_cover_size": self.config.session["artwork"]["download_size"],
|
"download_cover_size": self.config.session["artwork"]["download_size"],
|
||||||
|
"set_playlist_to_album": self.config.session["metadata"][
|
||||||
|
"set_playlist_to_album"
|
||||||
|
],
|
||||||
}
|
}
|
||||||
logger.debug("Arguments from config: %s", arguments)
|
logger.debug("Arguments from config: %s", arguments)
|
||||||
for item in self:
|
for item in self:
|
||||||
|
|
|
@ -848,7 +848,10 @@ class Album(Tracklist):
|
||||||
"bit_depth": 16,
|
"bit_depth": 16,
|
||||||
"sampling_rate": 44100,
|
"sampling_rate": 44100,
|
||||||
"tracktotal": resp.get("track_total") or resp.get("nb_tracks"),
|
"tracktotal": resp.get("track_total") or resp.get("nb_tracks"),
|
||||||
"disctotal": max(track["disk_number"] for track in resp["tracks"]),
|
"disctotal": max(
|
||||||
|
track.get("disk_number") for track in resp.get("tracks", [{}])
|
||||||
|
)
|
||||||
|
or 1,
|
||||||
"explicit": bool(resp.get("explicit_content_lyrics")),
|
"explicit": bool(resp.get("explicit_content_lyrics")),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1088,7 +1091,8 @@ class Playlist(Tracklist):
|
||||||
:type new_tracknumbers: bool
|
:type new_tracknumbers: bool
|
||||||
:param kwargs:
|
:param kwargs:
|
||||||
"""
|
"""
|
||||||
self.meta = self.client.get(id=self.id, media_type="playlist")
|
self.meta = self.client.get(self.id, media_type="playlist")
|
||||||
|
logger.debug(pformat(self.meta))
|
||||||
self._load_tracks(**kwargs)
|
self._load_tracks(**kwargs)
|
||||||
self.loaded = True
|
self.loaded = True
|
||||||
|
|
||||||
|
@ -1100,6 +1104,9 @@ class Playlist(Tracklist):
|
||||||
"""
|
"""
|
||||||
if self.client.source == "qobuz":
|
if self.client.source == "qobuz":
|
||||||
self.name = self.meta["name"]
|
self.name = self.meta["name"]
|
||||||
|
self.image = self.meta["images"]
|
||||||
|
self.creator = safe_get(self.meta, "owner", "name", default="Qobuz")
|
||||||
|
|
||||||
tracklist = self.meta["tracks"]["items"]
|
tracklist = self.meta["tracks"]["items"]
|
||||||
|
|
||||||
def gen_cover(track):
|
def gen_cover(track):
|
||||||
|
@ -1110,10 +1117,13 @@ class Playlist(Tracklist):
|
||||||
|
|
||||||
elif self.client.source == "tidal":
|
elif self.client.source == "tidal":
|
||||||
self.name = self.meta["title"]
|
self.name = self.meta["title"]
|
||||||
|
self.image = tidal_cover_url(self.meta["image"], 640)
|
||||||
|
self.creator = safe_get(self.meta, "creator", "name", default="TIDAL")
|
||||||
|
|
||||||
tracklist = self.meta["tracks"]
|
tracklist = self.meta["tracks"]
|
||||||
|
|
||||||
def gen_cover(track):
|
def gen_cover(track):
|
||||||
cover_url = tidal_cover_url(track["album"]["cover"], 320)
|
cover_url = tidal_cover_url(track["album"]["cover"], 640)
|
||||||
return cover_url
|
return cover_url
|
||||||
|
|
||||||
def meta_args(track):
|
def meta_args(track):
|
||||||
|
@ -1124,6 +1134,9 @@ class Playlist(Tracklist):
|
||||||
|
|
||||||
elif self.client.source == "deezer":
|
elif self.client.source == "deezer":
|
||||||
self.name = self.meta["title"]
|
self.name = self.meta["title"]
|
||||||
|
self.image = self.meta["picture_big"]
|
||||||
|
self.creator = safe_get(self.meta, "creator", "name", default="Deezer")
|
||||||
|
|
||||||
tracklist = self.meta["tracks"]
|
tracklist = self.meta["tracks"]
|
||||||
|
|
||||||
def gen_cover(track):
|
def gen_cover(track):
|
||||||
|
@ -1131,6 +1144,8 @@ class Playlist(Tracklist):
|
||||||
|
|
||||||
elif self.client.source == "soundcloud":
|
elif self.client.source == "soundcloud":
|
||||||
self.name = self.meta["title"]
|
self.name = self.meta["title"]
|
||||||
|
self.image = self.meta.get("artwork_url").replace("large", "t500x500")
|
||||||
|
self.creator = self.meta["user"]["username"]
|
||||||
tracklist = self.meta["tracks"]
|
tracklist = self.meta["tracks"]
|
||||||
|
|
||||||
def gen_cover(track):
|
def gen_cover(track):
|
||||||
|
@ -1185,10 +1200,16 @@ class Playlist(Tracklist):
|
||||||
logger.debug(f"Parent folder {folder}")
|
logger.debug(f"Parent folder {folder}")
|
||||||
|
|
||||||
self.download_message()
|
self.download_message()
|
||||||
|
set_playlist_to_album = kwargs.get("set_playlist_to_album", False)
|
||||||
for i, track in enumerate(self):
|
for i, track in enumerate(self):
|
||||||
|
|
||||||
if self.client.source == "soundcloud":
|
if self.client.source == "soundcloud":
|
||||||
track.load_meta()
|
track.load_meta()
|
||||||
|
|
||||||
|
if set_playlist_to_album and hasattr(self, "image"):
|
||||||
|
track["album"] = self.name
|
||||||
|
track["albumartist"] = self.creator
|
||||||
|
|
||||||
if kwargs.get("new_tracknumbers", True):
|
if kwargs.get("new_tracknumbers", True):
|
||||||
track.meta["tracknumber"] = str(i + 1)
|
track.meta["tracknumber"] = str(i + 1)
|
||||||
|
|
||||||
|
|
|
@ -40,6 +40,7 @@ class TrackMetadata:
|
||||||
* tracknumber
|
* tracknumber
|
||||||
* discnumber
|
* discnumber
|
||||||
* tracktotal
|
* tracktotal
|
||||||
|
* disctotal
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
@ -67,6 +68,7 @@ class TrackMetadata:
|
||||||
self.cover = None
|
self.cover = None
|
||||||
self.tracknumber = None
|
self.tracknumber = None
|
||||||
self.discnumber = None
|
self.discnumber = None
|
||||||
|
self.disctotal = None
|
||||||
|
|
||||||
# not included in tags
|
# not included in tags
|
||||||
self.explicit = False
|
self.explicit = False
|
||||||
|
|
|
@ -1,8 +1,6 @@
|
||||||
import base64
|
import base64
|
||||||
import logging
|
import logging
|
||||||
import logging.handlers as handlers
|
|
||||||
import os
|
import os
|
||||||
import time
|
|
||||||
from string import Formatter
|
from string import Formatter
|
||||||
from typing import Hashable, Optional, Union
|
from typing import Hashable, Optional, Union
|
||||||
|
|
||||||
|
@ -112,8 +110,8 @@ def tqdm_download(url: str, filepath: str, params: dict = None):
|
||||||
r = requests.get(url, allow_redirects=True, stream=True, params=params)
|
r = requests.get(url, allow_redirects=True, stream=True, params=params)
|
||||||
total = int(r.headers.get("content-length", 0))
|
total = int(r.headers.get("content-length", 0))
|
||||||
logger.debug(f"File size = {total}")
|
logger.debug(f"File size = {total}")
|
||||||
if total < 1000 and not url.endswith("jpg"):
|
if total < 1000 and not url.endswith("jpg") and not url.endswith("png"):
|
||||||
raise NonStreamable
|
raise NonStreamable(url)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
with open(filepath, "wb") as file, tqdm(
|
with open(filepath, "wb") as file, tqdm(
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue