✨ Can download artists. Fixes #102
This commit is contained in:
+17
-2
@@ -13,7 +13,12 @@ from tidal_dl_ng.config import Settings, Tidal
|
|||||||
from tidal_dl_ng.constants import CTX_TIDAL, MediaType
|
from tidal_dl_ng.constants import CTX_TIDAL, MediaType
|
||||||
from tidal_dl_ng.download import Download
|
from tidal_dl_ng.download import Download
|
||||||
from tidal_dl_ng.helper.path import get_format_template, path_file_settings
|
from tidal_dl_ng.helper.path import get_format_template, path_file_settings
|
||||||
from tidal_dl_ng.helper.tidal import get_tidal_media_id, get_tidal_media_type
|
from tidal_dl_ng.helper.tidal import (
|
||||||
|
all_artist_album_ids,
|
||||||
|
get_tidal_media_id,
|
||||||
|
get_tidal_media_type,
|
||||||
|
instantiate_media,
|
||||||
|
)
|
||||||
from tidal_dl_ng.helper.wrapper import LoggerWrapped
|
from tidal_dl_ng.helper.wrapper import LoggerWrapped
|
||||||
from tidal_dl_ng.model.cfg import HelpSettings
|
from tidal_dl_ng.model.cfg import HelpSettings
|
||||||
|
|
||||||
@@ -192,7 +197,17 @@ def download(
|
|||||||
dl.item(
|
dl.item(
|
||||||
media_id=item_id, media_type=media_type, file_template=file_template, download_delay=download_delay
|
media_id=item_id, media_type=media_type, file_template=file_template, download_delay=download_delay
|
||||||
)
|
)
|
||||||
elif media_type in [MediaType.ALBUM, MediaType.PLAYLIST, MediaType.MIX]:
|
elif media_type in [MediaType.ALBUM, MediaType.PLAYLIST, MediaType.MIX, MediaType.ARTIST]:
|
||||||
|
item_ids: [int] = []
|
||||||
|
|
||||||
|
if media_type == MediaType.ARTIST:
|
||||||
|
media = instantiate_media(ctx.obj[CTX_TIDAL].session, media_type, item_id)
|
||||||
|
media_type = MediaType.ALBUM
|
||||||
|
item_ids = item_ids + all_artist_album_ids(media)
|
||||||
|
else:
|
||||||
|
item_ids.append(item_id)
|
||||||
|
|
||||||
|
for item_id in item_ids:
|
||||||
dl.items(
|
dl.items(
|
||||||
media_id=item_id,
|
media_id=item_id,
|
||||||
media_type=media_type,
|
media_type=media_type,
|
||||||
|
|||||||
@@ -165,7 +165,7 @@ def get_format_template(
|
|||||||
|
|
||||||
if isinstance(media, Track) or media == MediaType.TRACK:
|
if isinstance(media, Track) or media == MediaType.TRACK:
|
||||||
result = settings.data.format_track
|
result = settings.data.format_track
|
||||||
elif isinstance(media, Album) or media == MediaType.ALBUM:
|
elif isinstance(media, Album) or media == MediaType.ALBUM or media == MediaType.ARTIST:
|
||||||
result = settings.data.format_album
|
result = settings.data.format_album
|
||||||
elif isinstance(media, Playlist | UserPlaylist) or media == MediaType.PLAYLIST:
|
elif isinstance(media, Playlist | UserPlaylist) or media == MediaType.PLAYLIST:
|
||||||
result = settings.data.format_playlist
|
result = settings.data.format_playlist
|
||||||
|
|||||||
@@ -92,7 +92,9 @@ def search_results_all(session: Session, needle: str, types_media: SearchTypes =
|
|||||||
return result
|
return result
|
||||||
|
|
||||||
|
|
||||||
def items_results_all(media_list: [Mix | Playlist | Album], videos_include: bool = True) -> [Track | Video | Album]:
|
def items_results_all(
|
||||||
|
media_list: [Mix | Playlist | Album | Artist], videos_include: bool = True
|
||||||
|
) -> [Track | Video | Album]:
|
||||||
result: [Track | Video | Album] = []
|
result: [Track | Video | Album] = []
|
||||||
|
|
||||||
if isinstance(media_list, Mix):
|
if isinstance(media_list, Mix):
|
||||||
@@ -107,7 +109,26 @@ def items_results_all(media_list: [Mix | Playlist | Album], videos_include: bool
|
|||||||
func_get_items_media.append(media_list.tracks)
|
func_get_items_media.append(media_list.tracks)
|
||||||
else:
|
else:
|
||||||
func_get_items_media.append(media_list.get_albums)
|
func_get_items_media.append(media_list.get_albums)
|
||||||
func_get_items_media.append(media_list.get_albums_ep_singles)
|
func_get_items_media.append(media_list.get_ep_singles)
|
||||||
|
|
||||||
|
result = paginate_media(func_get_items_media)
|
||||||
|
|
||||||
|
return result
|
||||||
|
|
||||||
|
|
||||||
|
def all_artist_album_ids(media_artist: Artist) -> [int | None]:
|
||||||
|
result: [int] = []
|
||||||
|
func_get_items_media: [Callable] = [media_artist.get_albums, media_artist.get_ep_singles]
|
||||||
|
albums: [Album] = paginate_media(func_get_items_media)
|
||||||
|
|
||||||
|
for album in albums:
|
||||||
|
result.append(album.id)
|
||||||
|
|
||||||
|
return result
|
||||||
|
|
||||||
|
|
||||||
|
def paginate_media(func_get_items_media) -> [Track | Video | Album]:
|
||||||
|
result: [Track | Video | Album] = []
|
||||||
|
|
||||||
for func_media in func_get_items_media:
|
for func_media in func_get_items_media:
|
||||||
limit: int = 100
|
limit: int = 100
|
||||||
@@ -139,7 +160,7 @@ def instantiate_media(
|
|||||||
session: Session,
|
session: Session,
|
||||||
media_type: type[MediaType.TRACK, MediaType.VIDEO, MediaType.ALBUM, MediaType.PLAYLIST, MediaType.MIX],
|
media_type: type[MediaType.TRACK, MediaType.VIDEO, MediaType.ALBUM, MediaType.PLAYLIST, MediaType.MIX],
|
||||||
id_media: str,
|
id_media: str,
|
||||||
) -> Track | Video | Album | Playlist | Mix:
|
) -> Track | Video | Album | Playlist | Mix | Artist:
|
||||||
if media_type == MediaType.TRACK:
|
if media_type == MediaType.TRACK:
|
||||||
media = session.track(id_media, with_album=True)
|
media = session.track(id_media, with_album=True)
|
||||||
elif media_type == MediaType.VIDEO:
|
elif media_type == MediaType.VIDEO:
|
||||||
|
|||||||
Reference in New Issue
Block a user