summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobert Honz <exislow+github@gmail.com>2024-01-14 17:58:54 +0100
committerRobert Honz <exislow+github@gmail.com>2024-01-14 17:58:54 +0100
commit949f843e1f26aa50f6ed764515e087c526e1bd6b (patch)
treed5b25dfab4597c563ab8cd2f6b14acffb343b479
parent825130bd612e00dba18e7d558d9bd84737b6ba9f (diff)
downloadtidal-dl-ng-949f843e1f26aa50f6ed764515e087c526e1bd6b.tar.gz
♻️ Refactoring of `items` to make it less complex.
-rw-r--r--tidal_dl_ng/cli.py2
-rw-r--r--tidal_dl_ng/download.py68
-rw-r--r--tidal_dl_ng/gui.py2
3 files changed, 41 insertions, 31 deletions
diff --git a/tidal_dl_ng/cli.py b/tidal_dl_ng/cli.py
index 6f7925e..19d9240 100644
--- a/tidal_dl_ng/cli.py
+++ b/tidal_dl_ng/cli.py
@@ -190,7 +190,7 @@ def download(
media_type = MediaType.Mix
dl.items(
- id_media=id_item,
+ media_id=id_item,
media_type=media_type,
path_base=settings.data.download_base_path,
file_template=file_template,
diff --git a/tidal_dl_ng/download.py b/tidal_dl_ng/download.py
index 44ef1bc..6ee17d6 100644
--- a/tidal_dl_ng/download.py
+++ b/tidal_dl_ng/download.py
@@ -135,12 +135,21 @@ class Download:
return tmp_path_file_decrypted
def instantiate_media(
- self, session: Session, media_type: type[MediaType.Track, MediaType.Video], id_media: str
+ self,
+ session: Session,
+ media_type: type[MediaType.Track, MediaType.Video, MediaType.Album, MediaType.Playlist, MediaType.Mix],
+ id_media: str,
) -> Track | Video:
if media_type == MediaType.Track:
media = Track(session, id_media)
elif media_type == MediaType.Video:
media = Video(session, id_media)
+ elif media_type == MediaType.Album:
+ media = Album(self.session, id_media)
+ elif media_type == MediaType.Playlist:
+ media = Playlist(self.session, id_media)
+ elif media_type == MediaType.Mix:
+ media = Mix(self.session, id_media)
else:
raise MediaUnknown
@@ -158,7 +167,7 @@ class Download:
progress_gui: ProgressBars = None,
progress: Progress = None,
) -> (bool, str):
- # If only a media_id is provided, we need to create the media instance.
+ # If no media instance is provided, we need to create the media instance.
if media_id and media_type:
media = self.instantiate_media(self.session, media_type, media_id)
elif not media:
@@ -267,68 +276,69 @@ class Download:
self,
path_base: str,
fn_logger: Logger | WrapperLogger,
- id_media: str = None,
+ media_id: str = None,
media_type: MediaType = None,
file_template: str = None,
- list_media: Album | Playlist | UserPlaylist | Mix = None,
+ media: Album | Playlist | UserPlaylist | Mix = None,
video_download: bool = False,
progress_gui: ProgressBars = None,
progress: Progress = None,
download_delay: bool = True,
):
- if not list_media:
- if media_type == MediaType.Album:
- list_media = Album(self.session, id_media)
- elif media_type == MediaType.Playlist:
- list_media = Playlist(self.session, id_media)
- elif media_type == MediaType.Mix:
- list_media = Mix(self.session, id_media)
- else:
- raise MediaUnknown
+ # If no media instance is provided, we need to create the media instance.
+ if media_id and media_type:
+ media = self.instantiate_media(self.session, media_type, media_id)
+ elif not media:
+ raise MediaMissing
- if file_template:
- file_name_relative = format_path_media(file_template, list_media)
- path_file = path_base
- else:
- file_name_relative = file_template
- path_file = format_path_media(path_base, list_media)
+ # Create file name and path
+ file_name_relative = format_path_media(file_template, media)
# TODO: Extend with pagination support: Iterate through `items` and `tracks`until len(returned list) == 0
- if isinstance(list_media, Mix):
- items = list_media.items()
- list_media_name = list_media.title[:30]
+ # Get the items and name of the list.
+ if isinstance(media, Mix):
+ items = media.items()
+ list_media_name = media.title[:20]
elif video_download:
- items = list_media.items(limit=100)
- list_media_name = list_media.name[:30]
+ items = media.items(limit=100)
+ list_media_name = media.name[:20]
else:
- items = list_media.tracks(limit=999)
- list_media_name = list_media.name[:30]
+ items = media.tracks(limit=999)
+ list_media_name = media.name[:20]
+ # Determine where to redirect the progress information.
if progress_gui is None:
progress_stdout: bool = True
else:
progress_stdout: bool = False
- p_task1 = progress.add_task(f"[green]List '{list_media_name}'", total=len(items), visible=progress_stdout)
+ # Create the list progress task.
+ p_task1: TaskID = progress.add_task(
+ f"[green]List '{list_media_name}'", total=len(items), visible=progress_stdout
+ )
+ # Iterate through list items
while not progress.finished:
for media in items:
- Progress()
# TODO: Handle return value of `track` method.
+ # Download the item.
status_download, result_path_file = self.item(
- path_base=path_file,
+ path_base=path_base,
file_template=file_name_relative,
media=media,
progress_gui=progress_gui,
progress=progress,
fn_logger=fn_logger,
)
+
+ # Advance progress bar.
progress.advance(p_task1)
if not progress_stdout:
# progress_gui.list_item.emit(progress.tasks[p_task1].percentage)
pass
+ # If a file was downloaded and the download delay is enabled, wait until the next download.
if download_delay and status_download:
time_sleep: float = round(random.SystemRandom().uniform(2, 5), 1)
diff --git a/tidal_dl_ng/gui.py b/tidal_dl_ng/gui.py
index 216faee..403b482 100644
--- a/tidal_dl_ng/gui.py
+++ b/tidal_dl_ng/gui.py
@@ -449,7 +449,7 @@ class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow):
dl.items(
path_base=self.settings.data.download_base_path,
file_template=file_template,
- list_media=media,
+ media=media,
video_download=self.settings.data.video_download,
progress_gui=data_pb,
progress=progress,