👷 Fixed video and list download.
This commit is contained in:
+15
-11
@@ -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
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user