download tracks between fetching

This commit is contained in:
oskvr37
2025-02-07 19:18:55 +01:00
parent 43c756904e
commit 2ee04ced61
+54 -64
View File
@@ -7,7 +7,7 @@ from .url import UrlGroup
from ..ctx import Context, passContext
from typing import List, Union, Literal
from typing import List, Literal
from tiddl.download import downloadTrackStream
from tiddl.utils import (
@@ -118,20 +118,33 @@ def DownloadCommand(
)
except Exception as e:
click.echo(
f"{click.style('', 'yellow')} Cant set metadata to {click.style(file_name, 'yellow')}. {e}"
f"{click.style('', 'yellow')} Cant set metadata to {click.style(file_name, 'yellow')}: {e}"
)
def downloadAlbum(album: Album):
click.echo(f"★ Album {album.title}")
cover_data = Cover(album.cover).content if album.cover else b""
all_items: List[
Union[AlbumItemsCredits.VideoItem, AlbumItemsCredits.TrackItem]
] = []
offset = 0
while True:
album_items = api.getAlbumItemsCredits(album.id, offset=offset)
all_items.extend(album_items.items)
for item in album_items.items:
if isinstance(item.item, Track):
track = item.item
file_name = formatTrack(
template=template or ctx.obj.config.template.album,
track=track,
album_artist=album.artist.name,
)
downloadTrack(
track=track,
file_name=file_name,
cover_data=cover_data,
credits=item.credits,
)
if (
album_items.limit + album_items.offset
@@ -141,25 +154,6 @@ def DownloadCommand(
offset += album_items.limit
cover_data = Cover(album.cover).content if album.cover else b""
for item in all_items:
if isinstance(item.item, Track):
track = item.item
file_name = formatTrack(
template=template or ctx.obj.config.template.album,
track=track,
album_artist=album.artist.name,
)
downloadTrack(
track=track,
file_name=file_name,
cover_data=cover_data,
credits=item.credits,
)
def handleResource(resource: TidalResource):
match resource.type:
case "track":
@@ -182,71 +176,67 @@ def DownloadCommand(
case "artist":
def getAllAlbums(singles: bool):
all_albums: List[Album] = []
offset = 0
while True:
items = api.getArtistAlbums(
artist_albums = api.getArtistAlbums(
resource.id,
offset=offset,
filter="EPSANDSINGLES" if singles else "ALBUMS",
)
all_albums.extend(items.items)
for album in artist_albums.items:
downloadAlbum(album)
if (
items.limit + items.offset
> items.totalNumberOfItems
artist_albums.limit + artist_albums.offset
> artist_albums.totalNumberOfItems
):
break
offset += items.limit
return all_albums
offset += artist_albums.limit
if singles_filter == "include":
albums = getAllAlbums(False) + getAllAlbums(True)
getAllAlbums(False)
getAllAlbums(True)
else:
albums = getAllAlbums(singles_filter == "only")
for album in albums:
downloadAlbum(album)
getAllAlbums(singles_filter == "only")
case "playlist":
playlist = api.getPlaylist(resource.id)
click.echo(f"★ Playlist {playlist.title}")
all_items: List[
Union[
PlaylistItems.PlaylistVideoItem,
PlaylistItems.PlaylistTrackItem,
]
] = []
offset = 0
while True:
items = api.getPlaylistItems(playlist.uuid, offset=offset)
all_items.extend(items.items)
playlist_items = api.getPlaylistItems(
playlist.uuid, offset=offset
)
if items.limit + items.offset > items.totalNumberOfItems:
for item in playlist_items.items:
if isinstance(
item.item,
PlaylistItems.PlaylistTrackItem.PlaylistTrack,
):
track = item.item
file_name = formatTrack(
template=template
or ctx.obj.config.template.playlist,
track=track,
playlist_title=playlist.title,
playlist_index=track.index // 100000,
)
downloadTrack(track=item.item, file_name=file_name)
if (
playlist_items.limit + playlist_items.offset
> playlist_items.totalNumberOfItems
):
break
offset += items.limit
for item in all_items:
if isinstance(
item.item, PlaylistItems.PlaylistTrackItem.PlaylistTrack
):
track = item.item
file_name = formatTrack(
template=template
or ctx.obj.config.template.playlist,
track=track,
playlist_title=playlist.title,
playlist_index=track.index // 100000,
)
downloadTrack(track=item.item, file_name=file_name)
offset += playlist_items.limit
for resource in ctx.obj.resources:
try: