👷 Fixed video and list download.

This commit is contained in:
Robert Honz
2024-04-21 22:42:19 +02:00
parent 2ff0aa2ee3
commit f31d69e0ae
2 changed files with 44 additions and 18 deletions
+15 -11
View File
@@ -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.
+29 -7
View File
@@ -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