From f31d69e0ae4eac89a9a4b563a1a6d983c8ee3738 Mon Sep 17 00:00:00 2001 From: Robert Honz Date: Sun, 21 Apr 2024 22:42:19 +0200 Subject: [PATCH] =?UTF-8?q?=F0=9F=91=B7=20Fixed=20video=20and=20list=20dow?= =?UTF-8?q?nload.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tidal_dl_ng/download.py | 26 +++++++++++++++----------- tidal_dl_ng/gui.py | 36 +++++++++++++++++++++++++++++------- 2 files changed, 44 insertions(+), 18 deletions(-) diff --git a/tidal_dl_ng/download.py b/tidal_dl_ng/download.py index 7f91ffc..4a8db08 100644 --- a/tidal_dl_ng/download.py +++ b/tidal_dl_ng/download.py @@ -12,10 +12,10 @@ import requests from requests.exceptions import HTTPError from rich.progress import Progress, TaskID from tidalapi import Album, Mix, Playlist, Session, Track, UserPlaylist, Video -from tidalapi.media import AudioExtensions, Codec, Quality, StreamManifest, VideoExtensions, VideoQuality +from tidalapi.media import AudioExtensions, Codec, Quality, StreamManifest, VideoExtensions from tidal_dl_ng.config import Settings, Tidal -from tidal_dl_ng.constants import EXTENSION_LYRICS, REQUESTS_TIMEOUT_SEC, MediaType, SkipExisting +from tidal_dl_ng.constants import EXTENSION_LYRICS, REQUESTS_TIMEOUT_SEC, MediaType, QualityVideo, SkipExisting from tidal_dl_ng.helper.decryption import decrypt_file, decrypt_security_token from tidal_dl_ng.helper.exceptions import MediaMissing from tidal_dl_ng.helper.path import check_file_exists, format_path_media, path_file_sanitize @@ -179,7 +179,7 @@ class Download: video_download: bool = True, download_delay: bool = False, quality_audio: Quality | None = None, - quality_video: VideoQuality | None = None, + quality_video: QualityVideo | None = None, ) -> (bool, str): try: if media_id and media_type: @@ -213,7 +213,7 @@ class Download: if isinstance(media, Track): # If hi_res is forbidden in settings and highest track quality is hi_res, downgrade to high_lossless. - if self.settings.data.downgrade_on_hires and media.get_stream().audio_quality == Quality.hi_res: + if self.settings.data.downgrade_on_hi_res and media.get_stream().audio_quality == Quality.hi_res: quality_audio = Quality.high_lossless # If a quality is explicitly set, change it. @@ -233,7 +233,7 @@ class Download: do_flac_extract = True elif isinstance(media, Video): if quality_video: - quality_video_old = self.adjust_quality_video(quality_video) + quality_video_old: QualityVideo = self.adjust_quality_video(quality_video) file_extension = AudioExtensions.MP4 if self.settings.data.video_convert_mp4 else VideoExtensions.TS @@ -267,7 +267,7 @@ class Download: tmp_path_file = self._video_convert(tmp_path_file) # Extract FLAC from MP4 container using ffmpeg - if self.settings.data.extract_flac and do_flac_extract: + if isinstance(media, Track) and self.settings.data.extract_flac and do_flac_extract: tmp_path_file = self._extract_flac(tmp_path_file, media.isrc) # Move final file to the configured destination directory. @@ -314,10 +314,10 @@ class Download: return quality_old - def adjust_quality_video(self, quality) -> VideoQuality: - quality_old: VideoQuality = self.session.video_quality + def adjust_quality_video(self, quality) -> QualityVideo: + quality_old: QualityVideo = self.settings.data.quality_video - self.session.video_quality = quality + self.settings.data.quality_video = quality return quality_old @@ -400,7 +400,8 @@ class Download: media_type: MediaType = None, video_download: bool = False, download_delay: bool = True, - quality: Quality | None = None, + quality_audio: Quality | None = None, + quality_video: QualityVideo | None = None, ): # If no media instance is provided, we need to create the media instance. if media_id and media_type: @@ -442,7 +443,10 @@ class Download: for media in items: # Download the item. status_download, result_path_file = self.item( - media=media, file_template=file_name_relative, quality_audio=quality + media=media, + file_template=file_name_relative, + quality_audio=quality_audio, + quality_video=quality_video, ) # Advance progress bar. diff --git a/tidal_dl_ng/gui.py b/tidal_dl_ng/gui.py index ab41eb4..748db98 100644 --- a/tidal_dl_ng/gui.py +++ b/tidal_dl_ng/gui.py @@ -543,7 +543,7 @@ class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow): ) -> QueueDownloadItem | bool: result: QueueDownloadItem | False name: str = "" - quality: Quality + quality: Quality | QualityVideo | str = "" explicit: str = "" # Check if item is available on TIDAL. @@ -574,7 +574,7 @@ class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow): else: quality = self.settings.data.quality_audio elif isinstance(media, Video): - quality = media.video_quality + quality = self.settings.data.quality_video if name: result = QueueDownloadItem( @@ -799,7 +799,8 @@ class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow): result: QueueDownloadStatus item: QtWidgets.QTreeWidgetItem = items[0] media: Track | Album | Playlist | Video | Mix | Artist = get_queue_download_media(item) - quality: Quality = get_queue_download_quality(item) + tmp_quality: str = get_queue_download_quality(item) + quality: Quality | QualityVideo | None = tmp_quality if tmp_quality else None try: self.s_queue_download_item_downloading.emit(item) @@ -830,7 +831,7 @@ class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow): item.setText(0, status) def on_queue_download( - self, media: Track | Album | Playlist | Video | Mix | Artist, quality: Quality | None = None + self, media: Track | Album | Playlist | Video | Mix | Artist, quality: Quality | QualityVideo | None = None ) -> QueueDownloadStatus: result: QueueDownloadStatus items_media: [Track | Album | Playlist | Video | Mix | Artist] @@ -852,27 +853,48 @@ class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow): media: Track | Album | Playlist | Video | Mix | Artist, dl: Download, delay_track: bool = False, - quality: Quality | None = None, + quality: Quality | QualityVideo | None = None, ) -> QueueDownloadStatus: result_dl: bool path_file: str result: QueueDownloadStatus + quality_audio: Quality | None + quality_video: QualityVideo | None self.s_pb_reset.emit() self.s_statusbar_message.emit(StatusbarMessage(message="Download started...")) file_template = get_format_template(media, self.settings) if isinstance(media, Track | Video): + if isinstance(media, Track): + quality_audio = quality + quality_video = None + else: + quality_audio = None + quality_video = quality + result_dl, path_file = dl.item( - media=media, file_template=file_template, download_delay=delay_track, quality_audio=quality + media=media, + file_template=file_template, + download_delay=delay_track, + quality_audio=quality_audio, + quality_video=quality_video, ) elif isinstance(media, Album | Playlist | Mix): + if isinstance(media, Album): + quality_audio = quality + quality_video = None + else: + quality_audio = None + quality_video = None + dl.items( media=media, file_template=file_template, video_download=self.settings.data.video_download, download_delay=self.settings.data.download_delay, - quality=quality, + quality_audio=quality_audio, + quality_video=quality_video, ) # Dummy values