♻️ Refactoring of items to make it less complex.
This commit is contained in:
+1
-1
@@ -190,7 +190,7 @@ def download(
|
|||||||
media_type = MediaType.Mix
|
media_type = MediaType.Mix
|
||||||
|
|
||||||
dl.items(
|
dl.items(
|
||||||
id_media=id_item,
|
media_id=id_item,
|
||||||
media_type=media_type,
|
media_type=media_type,
|
||||||
path_base=settings.data.download_base_path,
|
path_base=settings.data.download_base_path,
|
||||||
file_template=file_template,
|
file_template=file_template,
|
||||||
|
|||||||
+39
-29
@@ -135,12 +135,21 @@ class Download:
|
|||||||
return tmp_path_file_decrypted
|
return tmp_path_file_decrypted
|
||||||
|
|
||||||
def instantiate_media(
|
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:
|
) -> Track | Video:
|
||||||
if media_type == MediaType.Track:
|
if media_type == MediaType.Track:
|
||||||
media = Track(session, id_media)
|
media = Track(session, id_media)
|
||||||
elif media_type == MediaType.Video:
|
elif media_type == MediaType.Video:
|
||||||
media = Video(session, id_media)
|
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:
|
else:
|
||||||
raise MediaUnknown
|
raise MediaUnknown
|
||||||
|
|
||||||
@@ -158,7 +167,7 @@ class Download:
|
|||||||
progress_gui: ProgressBars = None,
|
progress_gui: ProgressBars = None,
|
||||||
progress: Progress = None,
|
progress: Progress = None,
|
||||||
) -> (bool, str):
|
) -> (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:
|
if media_id and media_type:
|
||||||
media = self.instantiate_media(self.session, media_type, media_id)
|
media = self.instantiate_media(self.session, media_type, media_id)
|
||||||
elif not media:
|
elif not media:
|
||||||
@@ -267,68 +276,69 @@ class Download:
|
|||||||
self,
|
self,
|
||||||
path_base: str,
|
path_base: str,
|
||||||
fn_logger: Logger | WrapperLogger,
|
fn_logger: Logger | WrapperLogger,
|
||||||
id_media: str = None,
|
media_id: str = None,
|
||||||
media_type: MediaType = None,
|
media_type: MediaType = None,
|
||||||
file_template: str = None,
|
file_template: str = None,
|
||||||
list_media: Album | Playlist | UserPlaylist | Mix = None,
|
media: Album | Playlist | UserPlaylist | Mix = None,
|
||||||
video_download: bool = False,
|
video_download: bool = False,
|
||||||
progress_gui: ProgressBars = None,
|
progress_gui: ProgressBars = None,
|
||||||
progress: Progress = None,
|
progress: Progress = None,
|
||||||
download_delay: bool = True,
|
download_delay: bool = True,
|
||||||
):
|
):
|
||||||
if not list_media:
|
# If no media instance is provided, we need to create the media instance.
|
||||||
if media_type == MediaType.Album:
|
if media_id and media_type:
|
||||||
list_media = Album(self.session, id_media)
|
media = self.instantiate_media(self.session, media_type, media_id)
|
||||||
elif media_type == MediaType.Playlist:
|
elif not media:
|
||||||
list_media = Playlist(self.session, id_media)
|
raise MediaMissing
|
||||||
elif media_type == MediaType.Mix:
|
|
||||||
list_media = Mix(self.session, id_media)
|
|
||||||
else:
|
|
||||||
raise MediaUnknown
|
|
||||||
|
|
||||||
if file_template:
|
# Create file name and path
|
||||||
file_name_relative = format_path_media(file_template, list_media)
|
file_name_relative = format_path_media(file_template, media)
|
||||||
path_file = path_base
|
|
||||||
else:
|
|
||||||
file_name_relative = file_template
|
|
||||||
path_file = format_path_media(path_base, list_media)
|
|
||||||
|
|
||||||
# TODO: Extend with pagination support: Iterate through `items` and `tracks`until len(returned list) == 0
|
# TODO: Extend with pagination support: Iterate through `items` and `tracks`until len(returned list) == 0
|
||||||
if isinstance(list_media, Mix):
|
# Get the items and name of the list.
|
||||||
items = list_media.items()
|
if isinstance(media, Mix):
|
||||||
list_media_name = list_media.title[:30]
|
items = media.items()
|
||||||
|
list_media_name = media.title[:20]
|
||||||
elif video_download:
|
elif video_download:
|
||||||
items = list_media.items(limit=100)
|
items = media.items(limit=100)
|
||||||
list_media_name = list_media.name[:30]
|
list_media_name = media.name[:20]
|
||||||
else:
|
else:
|
||||||
items = list_media.tracks(limit=999)
|
items = media.tracks(limit=999)
|
||||||
list_media_name = list_media.name[:30]
|
list_media_name = media.name[:20]
|
||||||
|
|
||||||
|
# Determine where to redirect the progress information.
|
||||||
if progress_gui is None:
|
if progress_gui is None:
|
||||||
progress_stdout: bool = True
|
progress_stdout: bool = True
|
||||||
else:
|
else:
|
||||||
progress_stdout: bool = False
|
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:
|
while not progress.finished:
|
||||||
for media in items:
|
for media in items:
|
||||||
Progress()
|
|
||||||
# TODO: Handle return value of `track` method.
|
# TODO: Handle return value of `track` method.
|
||||||
|
# Download the item.
|
||||||
status_download, result_path_file = self.item(
|
status_download, result_path_file = self.item(
|
||||||
path_base=path_file,
|
path_base=path_base,
|
||||||
file_template=file_name_relative,
|
file_template=file_name_relative,
|
||||||
media=media,
|
media=media,
|
||||||
progress_gui=progress_gui,
|
progress_gui=progress_gui,
|
||||||
progress=progress,
|
progress=progress,
|
||||||
fn_logger=fn_logger,
|
fn_logger=fn_logger,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
# Advance progress bar.
|
||||||
progress.advance(p_task1)
|
progress.advance(p_task1)
|
||||||
|
|
||||||
if not progress_stdout:
|
if not progress_stdout:
|
||||||
# progress_gui.list_item.emit(progress.tasks[p_task1].percentage)
|
# progress_gui.list_item.emit(progress.tasks[p_task1].percentage)
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
# If a file was downloaded and the download delay is enabled, wait until the next download.
|
||||||
if download_delay and status_download:
|
if download_delay and status_download:
|
||||||
time_sleep: float = round(random.SystemRandom().uniform(2, 5), 1)
|
time_sleep: float = round(random.SystemRandom().uniform(2, 5), 1)
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -449,7 +449,7 @@ class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow):
|
|||||||
dl.items(
|
dl.items(
|
||||||
path_base=self.settings.data.download_base_path,
|
path_base=self.settings.data.download_base_path,
|
||||||
file_template=file_template,
|
file_template=file_template,
|
||||||
list_media=media,
|
media=media,
|
||||||
video_download=self.settings.data.video_download,
|
video_download=self.settings.data.video_download,
|
||||||
progress_gui=data_pb,
|
progress_gui=data_pb,
|
||||||
progress=progress,
|
progress=progress,
|
||||||
|
|||||||
Reference in New Issue
Block a user