From 9321ac03da2aee9e45cf833f503e3b36060eb9ee Mon Sep 17 00:00:00 2001 From: Rikrdoga Date: Fri, 17 Oct 2025 14:05:48 -0600 Subject: [PATCH 1/8] feat: Add 'Download Full Album' from track context menu --- tidal_dl_ng/gui.py | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/tidal_dl_ng/gui.py b/tidal_dl_ng/gui.py index d27f2b6..744cc06 100644 --- a/tidal_dl_ng/gui.py +++ b/tidal_dl_ng/gui.py @@ -583,6 +583,11 @@ class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow): # We build the menu. menu = QtWidgets.QMenu() + + media = get_results_media_item(index, self.proxy_tr_results, self.model_tr_results) + if isinstance(media, Track) and media.album: + menu.addAction("Download Full Album", lambda: self.thread_download_album_from_track(point)) + menu.addAction("Copy Share URL", lambda: self.on_copy_url_share(self.tr_results, point)) menu.exec(self.tr_results.mapToGlobal(point)) @@ -1699,6 +1704,39 @@ class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow): event.accept() + def thread_download_album_from_track(self, point: QtCore.QPoint) -> None: + """Starts the download of the full album from a selected track in a new thread. + + Args: + point (QPoint): The point in the tree where the user clicked. + """ + self.thread_it(self.on_download_album_from_track, point) + + + def on_download_album_from_track(self, point: QtCore.QPoint) -> None: + """Gets the album from a selected track and adds it to the download queue.""" + index: QtCore.QModelIndex = self.tr_results.indexAt(point) + media_track: Track = get_results_media_item(index, self.proxy_tr_results, self.model_tr_results) + + # Ensure we have a track and an album object with an ID + if isinstance(media_track, Track) and media_track.album and media_track.album.id: + try: + # Use the album ID from the track to fetch the FULL album object from TIDAL + full_album_object = self.tidal.session.album(media_track.album.id) + + # Convert the full album object into a queue item + queue_dl_item: QueueDownloadItem | None = self.media_to_queue_download_model(full_album_object) + + if queue_dl_item: + # Add the item to the download queue + self.queue_download_media(queue_dl_item) + else: + logger_gui.warning(f"Failed to create a queue item for album ID: {full_album_object.id}") + except Exception as e: + logger_gui.error(f"Could not fetch the full album from TIDAL. Error: {e}") + else: + logger_gui.warning("Could not retrieve album information from the selected track.") + # TODO: Comment with Google Docstrings. def gui_activate(tidal: Tidal | None = None): From 240255088406d2e43b8e055a432c3063ad075fdc Mon Sep 17 00:00:00 2001 From: Trubo <78948819+truubo@users.noreply.github.com> Date: Sun, 19 Oct 2025 18:16:19 -0500 Subject: [PATCH 2/8] Add a checkbox to settings that toggles the explicit symbol in track titles --- tidal_dl_ng/dialog.py | 1 + tidal_dl_ng/download.py | 2 +- tidal_dl_ng/model/cfg.py | 2 + tidal_dl_ng/ui/dialog_settings.py | 376 +++++++++++++++++------------- tidal_dl_ng/ui/dialog_settings.ui | 10 +- 5 files changed, 222 insertions(+), 169 deletions(-) diff --git a/tidal_dl_ng/dialog.py b/tidal_dl_ng/dialog.py index b17c151..dcedf2e 100644 --- a/tidal_dl_ng/dialog.py +++ b/tidal_dl_ng/dialog.py @@ -180,6 +180,7 @@ class DialogPreferences(QtWidgets.QDialog): "video_convert_mp4", "extract_flac", "metadata_cover_embed", + "mark_explicit", "cover_album_file", "skip_existing", "symlink_to_track", diff --git a/tidal_dl_ng/download.py b/tidal_dl_ng/download.py index 4ac2b14..53e865d 100644 --- a/tidal_dl_ng/download.py +++ b/tidal_dl_ng/download.py @@ -1229,7 +1229,7 @@ class Download: target_upc: dict[str, str] = METADATA_LOOKUP_UPC[metadata_target_upc] explicit: bool = track.explicit if hasattr(track, "explicit") else False title = name_builder_title(track) - title += METADATA_EXPLICIT if explicit else "" + title += METADATA_EXPLICIT if explicit and self.settings.data.mark_explicit else "" # `None` values are not allowed. m: Metadata = Metadata( diff --git a/tidal_dl_ng/model/cfg.py b/tidal_dl_ng/model/cfg.py index bee2876..a21c60d 100644 --- a/tidal_dl_ng/model/cfg.py +++ b/tidal_dl_ng/model/cfg.py @@ -35,6 +35,7 @@ class Settings: path_binary_ffmpeg: str = "" metadata_cover_dimension: CoverDimensions = CoverDimensions.Px320 metadata_cover_embed: bool = True + mark_explicit: bool = True cover_album_file: bool = True extract_flac: bool = True downloads_simultaneous_per_track_max: int = 20 @@ -94,6 +95,7 @@ class HelpSettings: "The dimensions of the cover image embedded into the track. Possible values: 320x320, 640x640x 1280x1280." ) metadata_cover_embed: str = "Embed album cover into file." + mark_explicit: str = "Mark explicit tracks and albums with 'E' in track title." cover_album_file: str = "Save cover to 'cover.jpg', if an album is downloaded." extract_flac: str = "Extract FLAC audio tracks from MP4 containers and save them as `*.flac` (uses FFmpeg)." downloads_simultaneous_per_track_max: str = "Maximum number of simultaneous chunk downloads per track." diff --git a/tidal_dl_ng/ui/dialog_settings.py b/tidal_dl_ng/ui/dialog_settings.py index 3098817..89a4cf1 100644 --- a/tidal_dl_ng/ui/dialog_settings.py +++ b/tidal_dl_ng/ui/dialog_settings.py @@ -1,32 +1,29 @@ +# -*- coding: utf-8 -*- + ################################################################################ ## Form generated from reading UI file 'dialog_settings.ui' ## -## Created by: Qt User Interface Compiler version 6.8.1 +## Created by: Qt User Interface Compiler version 6.10.0 ## ## WARNING! All changes made in this file will be lost when recompiling UI file! ################################################################################ -from PySide6.QtCore import QCoreApplication, QMetaObject, Qt -from PySide6.QtWidgets import ( - QCheckBox, - QComboBox, - QDialogButtonBox, - QGroupBox, - QHBoxLayout, - QLabel, - QLayout, - QLineEdit, - QPushButton, - QSizePolicy, - QSpinBox, - QVBoxLayout, -) +from PySide6.QtCore import (QCoreApplication, QDate, QDateTime, QLocale, + QMetaObject, QObject, QPoint, QRect, + QSize, QTime, QUrl, Qt) +from PySide6.QtGui import (QBrush, QColor, QConicalGradient, QCursor, + QFont, QFontDatabase, QGradient, QIcon, + QImage, QKeySequence, QLinearGradient, QPainter, + QPalette, QPixmap, QRadialGradient, QTransform) +from PySide6.QtWidgets import (QAbstractButton, QApplication, QCheckBox, QComboBox, + QDialog, QDialogButtonBox, QGroupBox, QHBoxLayout, + QLabel, QLayout, QLineEdit, QPushButton, + QSizePolicy, QSpinBox, QVBoxLayout, QWidget) - -class Ui_DialogSettings: +class Ui_DialogSettings(object): def setupUi(self, DialogSettings): if not DialogSettings.objectName(): - DialogSettings.setObjectName("DialogSettings") + DialogSettings.setObjectName(u"DialogSettings") DialogSettings.resize(640, 800) sizePolicy = QSizePolicy(QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Expanding) sizePolicy.setHorizontalStretch(100) @@ -35,13 +32,13 @@ class Ui_DialogSettings: DialogSettings.setSizePolicy(sizePolicy) DialogSettings.setSizeGripEnabled(True) self.lv_dialog_settings = QVBoxLayout(DialogSettings) - self.lv_dialog_settings.setObjectName("lv_dialog_settings") + self.lv_dialog_settings.setObjectName(u"lv_dialog_settings") self.lv_dialog_settings.setContentsMargins(0, 0, 0, 0) self.lv_main = QVBoxLayout() - self.lv_main.setObjectName("lv_main") + self.lv_main.setObjectName(u"lv_main") self.lv_main.setContentsMargins(12, 12, 12, 12) self.gb_flags = QGroupBox(DialogSettings) - self.gb_flags.setObjectName("gb_flags") + self.gb_flags.setObjectName(u"gb_flags") sizePolicy1 = QSizePolicy(QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Fixed) sizePolicy1.setHorizontalStretch(100) sizePolicy1.setVerticalStretch(100) @@ -50,39 +47,42 @@ class Ui_DialogSettings: self.gb_flags.setFlat(False) self.gb_flags.setCheckable(False) self.lv_flags = QVBoxLayout(self.gb_flags) - self.lv_flags.setObjectName("lv_flags") + self.lv_flags.setObjectName(u"lv_flags") self.lh_flags_1 = QHBoxLayout() - self.lh_flags_1.setObjectName("lh_flags_1") + self.lh_flags_1.setObjectName(u"lh_flags_1") self.lv_flag_video_download = QVBoxLayout() - self.lv_flag_video_download.setObjectName("lv_flag_video_download") + self.lv_flag_video_download.setObjectName(u"lv_flag_video_download") self.cb_video_download = QCheckBox(self.gb_flags) - self.cb_video_download.setObjectName("cb_video_download") + self.cb_video_download.setObjectName(u"cb_video_download") sizePolicy1.setHeightForWidth(self.cb_video_download.sizePolicy().hasHeightForWidth()) self.cb_video_download.setSizePolicy(sizePolicy1) self.lv_flag_video_download.addWidget(self.cb_video_download) + self.lh_flags_1.addLayout(self.lv_flag_video_download) self.lv_flag_video_convert = QVBoxLayout() - self.lv_flag_video_convert.setObjectName("lv_flag_video_convert") + self.lv_flag_video_convert.setObjectName(u"lv_flag_video_convert") self.cb_video_convert_mp4 = QCheckBox(self.gb_flags) - self.cb_video_convert_mp4.setObjectName("cb_video_convert_mp4") + self.cb_video_convert_mp4.setObjectName(u"cb_video_convert_mp4") sizePolicy1.setHeightForWidth(self.cb_video_convert_mp4.sizePolicy().hasHeightForWidth()) self.cb_video_convert_mp4.setSizePolicy(sizePolicy1) self.lv_flag_video_convert.addWidget(self.cb_video_convert_mp4) + self.lh_flags_1.addLayout(self.lv_flag_video_convert) + self.lv_flags.addLayout(self.lh_flags_1) self.lh_flags_2 = QHBoxLayout() - self.lh_flags_2.setObjectName("lh_flags_2") + self.lh_flags_2.setObjectName(u"lh_flags_2") self.lv_flag_lyrics_embed = QVBoxLayout() - self.lv_flag_lyrics_embed.setObjectName("lv_flag_lyrics_embed") + self.lv_flag_lyrics_embed.setObjectName(u"lv_flag_lyrics_embed") self.cb_lyrics_embed = QCheckBox(self.gb_flags) - self.cb_lyrics_embed.setObjectName("cb_lyrics_embed") + self.cb_lyrics_embed.setObjectName(u"cb_lyrics_embed") sizePolicy2 = QSizePolicy(QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Fixed) sizePolicy2.setHorizontalStretch(0) sizePolicy2.setVerticalStretch(0) @@ -91,124 +91,144 @@ class Ui_DialogSettings: self.lv_flag_lyrics_embed.addWidget(self.cb_lyrics_embed) + self.lh_flags_2.addLayout(self.lv_flag_lyrics_embed) self.lv_flag_lyrics_file = QVBoxLayout() - self.lv_flag_lyrics_file.setObjectName("lv_flag_lyrics_file") + self.lv_flag_lyrics_file.setObjectName(u"lv_flag_lyrics_file") self.cb_lyrics_file = QCheckBox(self.gb_flags) - self.cb_lyrics_file.setObjectName("cb_lyrics_file") + self.cb_lyrics_file.setObjectName(u"cb_lyrics_file") sizePolicy1.setHeightForWidth(self.cb_lyrics_file.sizePolicy().hasHeightForWidth()) self.cb_lyrics_file.setSizePolicy(sizePolicy1) self.lv_flag_lyrics_file.addWidget(self.cb_lyrics_file) + self.lh_flags_2.addLayout(self.lv_flag_lyrics_file) + self.lv_flags.addLayout(self.lh_flags_2) self.lh_flag_3 = QHBoxLayout() - self.lh_flag_3.setObjectName("lh_flag_3") + self.lh_flag_3.setObjectName(u"lh_flag_3") self.lv_flag_download_delay = QVBoxLayout() - self.lv_flag_download_delay.setObjectName("lv_flag_download_delay") + self.lv_flag_download_delay.setObjectName(u"lv_flag_download_delay") self.cb_download_delay = QCheckBox(self.gb_flags) - self.cb_download_delay.setObjectName("cb_download_delay") + self.cb_download_delay.setObjectName(u"cb_download_delay") sizePolicy1.setHeightForWidth(self.cb_download_delay.sizePolicy().hasHeightForWidth()) self.cb_download_delay.setSizePolicy(sizePolicy1) self.lv_flag_download_delay.addWidget(self.cb_download_delay) + self.lh_flag_3.addLayout(self.lv_flag_download_delay) self.lv_flag_extract_flac = QVBoxLayout() - self.lv_flag_extract_flac.setObjectName("lv_flag_extract_flac") + self.lv_flag_extract_flac.setObjectName(u"lv_flag_extract_flac") self.cb_extract_flac = QCheckBox(self.gb_flags) - self.cb_extract_flac.setObjectName("cb_extract_flac") + self.cb_extract_flac.setObjectName(u"cb_extract_flac") sizePolicy2.setHeightForWidth(self.cb_extract_flac.sizePolicy().hasHeightForWidth()) self.cb_extract_flac.setSizePolicy(sizePolicy2) self.lv_flag_extract_flac.addWidget(self.cb_extract_flac) + self.lh_flag_3.addLayout(self.lv_flag_extract_flac) + self.lv_flags.addLayout(self.lh_flag_3) self.lh_flags_4 = QHBoxLayout() - self.lh_flags_4.setObjectName("lh_flags_4") + self.lh_flags_4.setObjectName(u"lh_flags_4") self.lv_flag_metadata_cover_embed = QVBoxLayout() - self.lv_flag_metadata_cover_embed.setObjectName("lv_flag_metadata_cover_embed") + self.lv_flag_metadata_cover_embed.setObjectName(u"lv_flag_metadata_cover_embed") self.cb_metadata_cover_embed = QCheckBox(self.gb_flags) - self.cb_metadata_cover_embed.setObjectName("cb_metadata_cover_embed") + self.cb_metadata_cover_embed.setObjectName(u"cb_metadata_cover_embed") self.lv_flag_metadata_cover_embed.addWidget(self.cb_metadata_cover_embed) + self.lh_flags_4.addLayout(self.lv_flag_metadata_cover_embed) self.lv_flag_cover_album_file = QVBoxLayout() - self.lv_flag_cover_album_file.setObjectName("lv_flag_cover_album_file") + self.lv_flag_cover_album_file.setObjectName(u"lv_flag_cover_album_file") self.cb_cover_album_file = QCheckBox(self.gb_flags) - self.cb_cover_album_file.setObjectName("cb_cover_album_file") + self.cb_cover_album_file.setObjectName(u"cb_cover_album_file") self.lv_flag_cover_album_file.addWidget(self.cb_cover_album_file) + self.lh_flags_4.addLayout(self.lv_flag_cover_album_file) + self.lv_flags.addLayout(self.lh_flags_4) self.horizontalLayout = QHBoxLayout() - self.horizontalLayout.setObjectName("horizontalLayout") + self.horizontalLayout.setObjectName(u"horizontalLayout") self.lv_flag_skip_existing = QVBoxLayout() - self.lv_flag_skip_existing.setObjectName("lv_flag_skip_existing") + self.lv_flag_skip_existing.setObjectName(u"lv_flag_skip_existing") self.cb_skip_existing = QCheckBox(self.gb_flags) - self.cb_skip_existing.setObjectName("cb_skip_existing") + self.cb_skip_existing.setObjectName(u"cb_skip_existing") self.lv_flag_skip_existing.addWidget(self.cb_skip_existing) + self.horizontalLayout.addLayout(self.lv_flag_skip_existing) self.lv_symlink_to_track = QVBoxLayout() - self.lv_symlink_to_track.setObjectName("lv_symlink_to_track") + self.lv_symlink_to_track.setObjectName(u"lv_symlink_to_track") self.cb_symlink_to_track = QCheckBox(self.gb_flags) - self.cb_symlink_to_track.setObjectName("cb_symlink_to_track") + self.cb_symlink_to_track.setObjectName(u"cb_symlink_to_track") self.lv_symlink_to_track.addWidget(self.cb_symlink_to_track) + self.horizontalLayout.addLayout(self.lv_symlink_to_track) + self.lv_flags.addLayout(self.horizontalLayout) self.horizontalLayout_12 = QHBoxLayout() - self.horizontalLayout_12.setObjectName("horizontalLayout_12") + self.horizontalLayout_12.setObjectName(u"horizontalLayout_12") self.lv_playlist_create = QVBoxLayout() - self.lv_playlist_create.setObjectName("lv_playlist_create") + self.lv_playlist_create.setObjectName(u"lv_playlist_create") self.cb_playlist_create = QCheckBox(self.gb_flags) - self.cb_playlist_create.setObjectName("cb_playlist_create") + self.cb_playlist_create.setObjectName(u"cb_playlist_create") self.lv_playlist_create.addWidget(self.cb_playlist_create) + self.horizontalLayout_12.addLayout(self.lv_playlist_create) - self.verticalLayout_4 = QVBoxLayout() - self.verticalLayout_4.setObjectName("verticalLayout_4") + self.lv_mark_explicit = QVBoxLayout() + self.lv_mark_explicit.setObjectName(u"lv_mark_explicit") + self.cb_mark_explicit = QCheckBox(self.gb_flags) + self.cb_mark_explicit.setObjectName(u"cb_mark_explicit") + + self.lv_mark_explicit.addWidget(self.cb_mark_explicit) + + + self.horizontalLayout_12.addLayout(self.lv_mark_explicit) - self.horizontalLayout_12.addLayout(self.verticalLayout_4) self.lv_flags.addLayout(self.horizontalLayout_12) + self.lv_main.addWidget(self.gb_flags) self.gb_choices = QGroupBox(DialogSettings) - self.gb_choices.setObjectName("gb_choices") + self.gb_choices.setObjectName(u"gb_choices") sizePolicy3 = QSizePolicy(QSizePolicy.Policy.Preferred, QSizePolicy.Policy.Fixed) sizePolicy3.setHorizontalStretch(0) sizePolicy3.setVerticalStretch(0) sizePolicy3.setHeightForWidth(self.gb_choices.sizePolicy().hasHeightForWidth()) self.gb_choices.setSizePolicy(sizePolicy3) self.lv_choices = QVBoxLayout(self.gb_choices) - self.lv_choices.setObjectName("lv_choices") + self.lv_choices.setObjectName(u"lv_choices") self.lh_choices_quality_audio = QHBoxLayout() - self.lh_choices_quality_audio.setObjectName("lh_choices_quality_audio") + self.lh_choices_quality_audio.setObjectName(u"lh_choices_quality_audio") self.l_icon_quality_audio = QLabel(self.gb_choices) - self.l_icon_quality_audio.setObjectName("l_icon_quality_audio") + self.l_icon_quality_audio.setObjectName(u"l_icon_quality_audio") sizePolicy4 = QSizePolicy(QSizePolicy.Policy.Fixed, QSizePolicy.Policy.Fixed) sizePolicy4.setHorizontalStretch(0) sizePolicy4.setVerticalStretch(0) @@ -218,14 +238,14 @@ class Ui_DialogSettings: self.lh_choices_quality_audio.addWidget(self.l_icon_quality_audio) self.l_quality_audio = QLabel(self.gb_choices) - self.l_quality_audio.setObjectName("l_quality_audio") + self.l_quality_audio.setObjectName(u"l_quality_audio") sizePolicy4.setHeightForWidth(self.l_quality_audio.sizePolicy().hasHeightForWidth()) self.l_quality_audio.setSizePolicy(sizePolicy4) self.lh_choices_quality_audio.addWidget(self.l_quality_audio) self.c_quality_audio = QComboBox(self.gb_choices) - self.c_quality_audio.setObjectName("c_quality_audio") + self.c_quality_audio.setObjectName(u"c_quality_audio") self.lh_choices_quality_audio.addWidget(self.c_quality_audio) @@ -234,23 +254,23 @@ class Ui_DialogSettings: self.lv_choices.addLayout(self.lh_choices_quality_audio) self.lh_choices_quality_video = QHBoxLayout() - self.lh_choices_quality_video.setObjectName("lh_choices_quality_video") + self.lh_choices_quality_video.setObjectName(u"lh_choices_quality_video") self.l_icon_quality_video = QLabel(self.gb_choices) - self.l_icon_quality_video.setObjectName("l_icon_quality_video") + self.l_icon_quality_video.setObjectName(u"l_icon_quality_video") sizePolicy4.setHeightForWidth(self.l_icon_quality_video.sizePolicy().hasHeightForWidth()) self.l_icon_quality_video.setSizePolicy(sizePolicy4) self.lh_choices_quality_video.addWidget(self.l_icon_quality_video) self.l_quality_video = QLabel(self.gb_choices) - self.l_quality_video.setObjectName("l_quality_video") + self.l_quality_video.setObjectName(u"l_quality_video") sizePolicy4.setHeightForWidth(self.l_quality_video.sizePolicy().hasHeightForWidth()) self.l_quality_video.setSizePolicy(sizePolicy4) self.lh_choices_quality_video.addWidget(self.l_quality_video) self.c_quality_video = QComboBox(self.gb_choices) - self.c_quality_video.setObjectName("c_quality_video") + self.c_quality_video.setObjectName(u"c_quality_video") self.lh_choices_quality_video.addWidget(self.c_quality_video) @@ -259,24 +279,24 @@ class Ui_DialogSettings: self.lv_choices.addLayout(self.lh_choices_quality_video) self.lh_choices_cover_dimension = QHBoxLayout() - self.lh_choices_cover_dimension.setObjectName("lh_choices_cover_dimension") + self.lh_choices_cover_dimension.setObjectName(u"lh_choices_cover_dimension") self.lh_choices_cover_dimension.setSizeConstraint(QLayout.SizeConstraint.SetDefaultConstraint) self.l_icon_metadata_cover_dimension = QLabel(self.gb_choices) - self.l_icon_metadata_cover_dimension.setObjectName("l_icon_metadata_cover_dimension") + self.l_icon_metadata_cover_dimension.setObjectName(u"l_icon_metadata_cover_dimension") sizePolicy4.setHeightForWidth(self.l_icon_metadata_cover_dimension.sizePolicy().hasHeightForWidth()) self.l_icon_metadata_cover_dimension.setSizePolicy(sizePolicy4) self.lh_choices_cover_dimension.addWidget(self.l_icon_metadata_cover_dimension) self.l_metadata_cover_dimension = QLabel(self.gb_choices) - self.l_metadata_cover_dimension.setObjectName("l_metadata_cover_dimension") + self.l_metadata_cover_dimension.setObjectName(u"l_metadata_cover_dimension") sizePolicy4.setHeightForWidth(self.l_metadata_cover_dimension.sizePolicy().hasHeightForWidth()) self.l_metadata_cover_dimension.setSizePolicy(sizePolicy4) self.lh_choices_cover_dimension.addWidget(self.l_metadata_cover_dimension) self.c_metadata_cover_dimension = QComboBox(self.gb_choices) - self.c_metadata_cover_dimension.setObjectName("c_metadata_cover_dimension") + self.c_metadata_cover_dimension.setObjectName(u"c_metadata_cover_dimension") sizePolicy5 = QSizePolicy(QSizePolicy.Policy.Preferred, QSizePolicy.Policy.Fixed) sizePolicy5.setHorizontalStretch(10) sizePolicy5.setVerticalStretch(0) @@ -289,119 +309,126 @@ class Ui_DialogSettings: self.lv_choices.addLayout(self.lh_choices_cover_dimension) + self.lv_main.addWidget(self.gb_choices) self.gb_numbers = QGroupBox(DialogSettings) - self.gb_numbers.setObjectName("gb_numbers") + self.gb_numbers.setObjectName(u"gb_numbers") self.verticalLayout_8 = QVBoxLayout(self.gb_numbers) - self.verticalLayout_8.setObjectName("verticalLayout_8") + self.verticalLayout_8.setObjectName(u"verticalLayout_8") self.horizontalLayout_9 = QHBoxLayout() - self.horizontalLayout_9.setObjectName("horizontalLayout_9") + self.horizontalLayout_9.setObjectName(u"horizontalLayout_9") self.l_album_track_num_pad_min = QLabel(self.gb_numbers) - self.l_album_track_num_pad_min.setObjectName("l_album_track_num_pad_min") + self.l_album_track_num_pad_min.setObjectName(u"l_album_track_num_pad_min") self.horizontalLayout_9.addWidget(self.l_album_track_num_pad_min) self.l_icon_album_track_num_pad_min = QLabel(self.gb_numbers) - self.l_icon_album_track_num_pad_min.setObjectName("l_icon_album_track_num_pad_min") + self.l_icon_album_track_num_pad_min.setObjectName(u"l_icon_album_track_num_pad_min") self.horizontalLayout_9.addWidget(self.l_icon_album_track_num_pad_min) self.sb_album_track_num_pad_min = QSpinBox(self.gb_numbers) - self.sb_album_track_num_pad_min.setObjectName("sb_album_track_num_pad_min") + self.sb_album_track_num_pad_min.setObjectName(u"sb_album_track_num_pad_min") self.sb_album_track_num_pad_min.setMaximum(4) self.horizontalLayout_9.addWidget(self.sb_album_track_num_pad_min) + self.verticalLayout_8.addLayout(self.horizontalLayout_9) self.horizontalLayout_11 = QHBoxLayout() - self.horizontalLayout_11.setObjectName("horizontalLayout_11") + self.horizontalLayout_11.setObjectName(u"horizontalLayout_11") self.l_downloads_concurrent_max = QLabel(self.gb_numbers) - self.l_downloads_concurrent_max.setObjectName("l_downloads_concurrent_max") + self.l_downloads_concurrent_max.setObjectName(u"l_downloads_concurrent_max") self.horizontalLayout_11.addWidget(self.l_downloads_concurrent_max) self.l_icon_downloads_concurrent_max = QLabel(self.gb_numbers) - self.l_icon_downloads_concurrent_max.setObjectName("l_icon_downloads_concurrent_max") + self.l_icon_downloads_concurrent_max.setObjectName(u"l_icon_downloads_concurrent_max") self.horizontalLayout_11.addWidget(self.l_icon_downloads_concurrent_max) self.sb_downloads_concurrent_max = QSpinBox(self.gb_numbers) - self.sb_downloads_concurrent_max.setObjectName("sb_downloads_concurrent_max") + self.sb_downloads_concurrent_max.setObjectName(u"sb_downloads_concurrent_max") self.sb_downloads_concurrent_max.setMinimum(1) self.sb_downloads_concurrent_max.setMaximum(5) self.horizontalLayout_11.addWidget(self.sb_downloads_concurrent_max) + self.verticalLayout_8.addLayout(self.horizontalLayout_11) + self.lv_main.addWidget(self.gb_numbers) self.gb_path = QGroupBox(DialogSettings) - self.gb_path.setObjectName("gb_path") + self.gb_path.setObjectName(u"gb_path") self.horizontalLayout_2 = QHBoxLayout(self.gb_path) - self.horizontalLayout_2.setObjectName("horizontalLayout_2") + self.horizontalLayout_2.setObjectName(u"horizontalLayout_2") self.verticalLayout_2 = QVBoxLayout() - self.verticalLayout_2.setObjectName("verticalLayout_2") + self.verticalLayout_2.setObjectName(u"verticalLayout_2") self.lh_path_base = QHBoxLayout() - self.lh_path_base.setObjectName("lh_path_base") + self.lh_path_base.setObjectName(u"lh_path_base") self.l_icon_download_base_path = QLabel(self.gb_path) - self.l_icon_download_base_path.setObjectName("l_icon_download_base_path") + self.l_icon_download_base_path.setObjectName(u"l_icon_download_base_path") sizePolicy4.setHeightForWidth(self.l_icon_download_base_path.sizePolicy().hasHeightForWidth()) self.l_icon_download_base_path.setSizePolicy(sizePolicy4) self.lh_path_base.addWidget(self.l_icon_download_base_path) self.l_download_base_path = QLabel(self.gb_path) - self.l_download_base_path.setObjectName("l_download_base_path") + self.l_download_base_path.setObjectName(u"l_download_base_path") sizePolicy3.setHeightForWidth(self.l_download_base_path.sizePolicy().hasHeightForWidth()) self.l_download_base_path.setSizePolicy(sizePolicy3) self.lh_path_base.addWidget(self.l_download_base_path) + self.verticalLayout_2.addLayout(self.lh_path_base) self.lh_path_fmt_track = QHBoxLayout() - self.lh_path_fmt_track.setObjectName("lh_path_fmt_track") + self.lh_path_fmt_track.setObjectName(u"lh_path_fmt_track") self.l_icon_format_track = QLabel(self.gb_path) - self.l_icon_format_track.setObjectName("l_icon_format_track") + self.l_icon_format_track.setObjectName(u"l_icon_format_track") sizePolicy4.setHeightForWidth(self.l_icon_format_track.sizePolicy().hasHeightForWidth()) self.l_icon_format_track.setSizePolicy(sizePolicy4) self.lh_path_fmt_track.addWidget(self.l_icon_format_track) self.l_format_track = QLabel(self.gb_path) - self.l_format_track.setObjectName("l_format_track") + self.l_format_track.setObjectName(u"l_format_track") sizePolicy3.setHeightForWidth(self.l_format_track.sizePolicy().hasHeightForWidth()) self.l_format_track.setSizePolicy(sizePolicy3) self.lh_path_fmt_track.addWidget(self.l_format_track) + self.verticalLayout_2.addLayout(self.lh_path_fmt_track) self.lh_path_fmt_video = QHBoxLayout() - self.lh_path_fmt_video.setObjectName("lh_path_fmt_video") + self.lh_path_fmt_video.setObjectName(u"lh_path_fmt_video") self.l_icon_format_video = QLabel(self.gb_path) - self.l_icon_format_video.setObjectName("l_icon_format_video") + self.l_icon_format_video.setObjectName(u"l_icon_format_video") sizePolicy4.setHeightForWidth(self.l_icon_format_video.sizePolicy().hasHeightForWidth()) self.l_icon_format_video.setSizePolicy(sizePolicy4) self.lh_path_fmt_video.addWidget(self.l_icon_format_video) self.l_format_video = QLabel(self.gb_path) - self.l_format_video.setObjectName("l_format_video") + self.l_format_video.setObjectName(u"l_format_video") sizePolicy3.setHeightForWidth(self.l_format_video.sizePolicy().hasHeightForWidth()) self.l_format_video.setSizePolicy(sizePolicy3) self.lh_path_fmt_video.addWidget(self.l_format_video) + self.verticalLayout_2.addLayout(self.lh_path_fmt_video) self.lh_path_fmt_album = QHBoxLayout() - self.lh_path_fmt_album.setObjectName("lh_path_fmt_album") + self.lh_path_fmt_album.setObjectName(u"lh_path_fmt_album") self.l_icon_format_album = QLabel(self.gb_path) - self.l_icon_format_album.setObjectName("l_icon_format_album") + self.l_icon_format_album.setObjectName(u"l_icon_format_album") sizePolicy6 = QSizePolicy(QSizePolicy.Policy.Fixed, QSizePolicy.Policy.Preferred) sizePolicy6.setHorizontalStretch(0) sizePolicy6.setVerticalStretch(0) @@ -411,76 +438,81 @@ class Ui_DialogSettings: self.lh_path_fmt_album.addWidget(self.l_icon_format_album) self.l_format_album = QLabel(self.gb_path) - self.l_format_album.setObjectName("l_format_album") + self.l_format_album.setObjectName(u"l_format_album") sizePolicy3.setHeightForWidth(self.l_format_album.sizePolicy().hasHeightForWidth()) self.l_format_album.setSizePolicy(sizePolicy3) self.lh_path_fmt_album.addWidget(self.l_format_album) + self.verticalLayout_2.addLayout(self.lh_path_fmt_album) self.lh_fpath_mt_playlist = QHBoxLayout() - self.lh_fpath_mt_playlist.setObjectName("lh_fpath_mt_playlist") + self.lh_fpath_mt_playlist.setObjectName(u"lh_fpath_mt_playlist") self.l_icon_format_playlist = QLabel(self.gb_path) - self.l_icon_format_playlist.setObjectName("l_icon_format_playlist") + self.l_icon_format_playlist.setObjectName(u"l_icon_format_playlist") sizePolicy4.setHeightForWidth(self.l_icon_format_playlist.sizePolicy().hasHeightForWidth()) self.l_icon_format_playlist.setSizePolicy(sizePolicy4) self.lh_fpath_mt_playlist.addWidget(self.l_icon_format_playlist) self.l_format_playlist = QLabel(self.gb_path) - self.l_format_playlist.setObjectName("l_format_playlist") + self.l_format_playlist.setObjectName(u"l_format_playlist") sizePolicy3.setHeightForWidth(self.l_format_playlist.sizePolicy().hasHeightForWidth()) self.l_format_playlist.setSizePolicy(sizePolicy3) self.lh_fpath_mt_playlist.addWidget(self.l_format_playlist) + self.verticalLayout_2.addLayout(self.lh_fpath_mt_playlist) self.lh_path_fmt_mix = QHBoxLayout() - self.lh_path_fmt_mix.setObjectName("lh_path_fmt_mix") + self.lh_path_fmt_mix.setObjectName(u"lh_path_fmt_mix") self.l_icon_format_mix = QLabel(self.gb_path) - self.l_icon_format_mix.setObjectName("l_icon_format_mix") + self.l_icon_format_mix.setObjectName(u"l_icon_format_mix") sizePolicy6.setHeightForWidth(self.l_icon_format_mix.sizePolicy().hasHeightForWidth()) self.l_icon_format_mix.setSizePolicy(sizePolicy6) self.lh_path_fmt_mix.addWidget(self.l_icon_format_mix) self.l_format_mix = QLabel(self.gb_path) - self.l_format_mix.setObjectName("l_format_mix") + self.l_format_mix.setObjectName(u"l_format_mix") sizePolicy3.setHeightForWidth(self.l_format_mix.sizePolicy().hasHeightForWidth()) self.l_format_mix.setSizePolicy(sizePolicy3) self.lh_path_fmt_mix.addWidget(self.l_format_mix) + self.verticalLayout_2.addLayout(self.lh_path_fmt_mix) self.lh_path_binary_ffmpeg = QHBoxLayout() - self.lh_path_binary_ffmpeg.setObjectName("lh_path_binary_ffmpeg") + self.lh_path_binary_ffmpeg.setObjectName(u"lh_path_binary_ffmpeg") self.l_icon_path_binary_ffmpeg = QLabel(self.gb_path) - self.l_icon_path_binary_ffmpeg.setObjectName("l_icon_path_binary_ffmpeg") + self.l_icon_path_binary_ffmpeg.setObjectName(u"l_icon_path_binary_ffmpeg") sizePolicy4.setHeightForWidth(self.l_icon_path_binary_ffmpeg.sizePolicy().hasHeightForWidth()) self.l_icon_path_binary_ffmpeg.setSizePolicy(sizePolicy4) self.lh_path_binary_ffmpeg.addWidget(self.l_icon_path_binary_ffmpeg) self.l_path_binary_ffmpeg = QLabel(self.gb_path) - self.l_path_binary_ffmpeg.setObjectName("l_path_binary_ffmpeg") + self.l_path_binary_ffmpeg.setObjectName(u"l_path_binary_ffmpeg") sizePolicy3.setHeightForWidth(self.l_path_binary_ffmpeg.sizePolicy().hasHeightForWidth()) self.l_path_binary_ffmpeg.setSizePolicy(sizePolicy3) self.lh_path_binary_ffmpeg.addWidget(self.l_path_binary_ffmpeg) + self.verticalLayout_2.addLayout(self.lh_path_binary_ffmpeg) + self.horizontalLayout_2.addLayout(self.verticalLayout_2) self.verticalLayout = QVBoxLayout() - self.verticalLayout.setObjectName("verticalLayout") + self.verticalLayout.setObjectName(u"verticalLayout") self.horizontalLayout_10 = QHBoxLayout() - self.horizontalLayout_10.setObjectName("horizontalLayout_10") + self.horizontalLayout_10.setObjectName(u"horizontalLayout_10") self.le_download_base_path = QLineEdit(self.gb_path) - self.le_download_base_path.setObjectName("le_download_base_path") + self.le_download_base_path.setObjectName(u"le_download_base_path") sizePolicy2.setHeightForWidth(self.le_download_base_path.sizePolicy().hasHeightForWidth()) self.le_download_base_path.setSizePolicy(sizePolicy2) self.le_download_base_path.setDragEnabled(True) @@ -488,63 +520,69 @@ class Ui_DialogSettings: self.horizontalLayout_10.addWidget(self.le_download_base_path) self.pb_download_base_path = QPushButton(self.gb_path) - self.pb_download_base_path.setObjectName("pb_download_base_path") + self.pb_download_base_path.setObjectName(u"pb_download_base_path") self.horizontalLayout_10.addWidget(self.pb_download_base_path) + self.verticalLayout.addLayout(self.horizontalLayout_10) self.horizontalLayout_7 = QHBoxLayout() - self.horizontalLayout_7.setObjectName("horizontalLayout_7") + self.horizontalLayout_7.setObjectName(u"horizontalLayout_7") self.le_format_track = QLineEdit(self.gb_path) - self.le_format_track.setObjectName("le_format_track") + self.le_format_track.setObjectName(u"le_format_track") self.horizontalLayout_7.addWidget(self.le_format_track) + self.verticalLayout.addLayout(self.horizontalLayout_7) self.horizontalLayout_5 = QHBoxLayout() - self.horizontalLayout_5.setObjectName("horizontalLayout_5") + self.horizontalLayout_5.setObjectName(u"horizontalLayout_5") self.le_format_video = QLineEdit(self.gb_path) - self.le_format_video.setObjectName("le_format_video") + self.le_format_video.setObjectName(u"le_format_video") self.horizontalLayout_5.addWidget(self.le_format_video) + self.verticalLayout.addLayout(self.horizontalLayout_5) self.horizontalLayout_6 = QHBoxLayout() - self.horizontalLayout_6.setObjectName("horizontalLayout_6") + self.horizontalLayout_6.setObjectName(u"horizontalLayout_6") self.le_format_album = QLineEdit(self.gb_path) - self.le_format_album.setObjectName("le_format_album") + self.le_format_album.setObjectName(u"le_format_album") self.horizontalLayout_6.addWidget(self.le_format_album) + self.verticalLayout.addLayout(self.horizontalLayout_6) self.horizontalLayout_4 = QHBoxLayout() - self.horizontalLayout_4.setObjectName("horizontalLayout_4") + self.horizontalLayout_4.setObjectName(u"horizontalLayout_4") self.le_format_playlist = QLineEdit(self.gb_path) - self.le_format_playlist.setObjectName("le_format_playlist") + self.le_format_playlist.setObjectName(u"le_format_playlist") sizePolicy2.setHeightForWidth(self.le_format_playlist.sizePolicy().hasHeightForWidth()) self.le_format_playlist.setSizePolicy(sizePolicy2) self.horizontalLayout_4.addWidget(self.le_format_playlist) + self.verticalLayout.addLayout(self.horizontalLayout_4) self.horizontalLayout_8 = QHBoxLayout() - self.horizontalLayout_8.setObjectName("horizontalLayout_8") + self.horizontalLayout_8.setObjectName(u"horizontalLayout_8") self.le_format_mix = QLineEdit(self.gb_path) - self.le_format_mix.setObjectName("le_format_mix") + self.le_format_mix.setObjectName(u"le_format_mix") self.horizontalLayout_8.addWidget(self.le_format_mix) + self.verticalLayout.addLayout(self.horizontalLayout_8) self.horizontalLayout_3 = QHBoxLayout() - self.horizontalLayout_3.setObjectName("horizontalLayout_3") + self.horizontalLayout_3.setObjectName(u"horizontalLayout_3") self.le_path_binary_ffmpeg = QLineEdit(self.gb_path) - self.le_path_binary_ffmpeg.setObjectName("le_path_binary_ffmpeg") + self.le_path_binary_ffmpeg.setObjectName(u"le_path_binary_ffmpeg") sizePolicy2.setHeightForWidth(self.le_path_binary_ffmpeg.sizePolicy().hasHeightForWidth()) self.le_path_binary_ffmpeg.setSizePolicy(sizePolicy2) self.le_path_binary_ffmpeg.setDragEnabled(True) @@ -552,12 +590,14 @@ class Ui_DialogSettings: self.horizontalLayout_3.addWidget(self.le_path_binary_ffmpeg) self.pb_path_binary_ffmpeg = QPushButton(self.gb_path) - self.pb_path_binary_ffmpeg.setObjectName("pb_path_binary_ffmpeg") + self.pb_path_binary_ffmpeg.setObjectName(u"pb_path_binary_ffmpeg") self.horizontalLayout_3.addWidget(self.pb_path_binary_ffmpeg) + self.verticalLayout.addLayout(self.horizontalLayout_3) + self.horizontalLayout_2.addLayout(self.verticalLayout) self.horizontalLayout_2.setStretch(1, 50) @@ -565,67 +605,69 @@ class Ui_DialogSettings: self.lv_main.addWidget(self.gb_path) self.bb_dialog = QDialogButtonBox(DialogSettings) - self.bb_dialog.setObjectName("bb_dialog") + self.bb_dialog.setObjectName(u"bb_dialog") self.bb_dialog.setOrientation(Qt.Orientation.Horizontal) - self.bb_dialog.setStandardButtons(QDialogButtonBox.StandardButton.Cancel | QDialogButtonBox.StandardButton.Ok) + self.bb_dialog.setStandardButtons(QDialogButtonBox.StandardButton.Cancel|QDialogButtonBox.StandardButton.Ok) self.lv_main.addWidget(self.bb_dialog) + self.lv_dialog_settings.addLayout(self.lv_main) + self.retranslateUi(DialogSettings) self.bb_dialog.accepted.connect(DialogSettings.accept) self.bb_dialog.rejected.connect(DialogSettings.reject) QMetaObject.connectSlotsByName(DialogSettings) - # setupUi def retranslateUi(self, DialogSettings): - DialogSettings.setWindowTitle(QCoreApplication.translate("DialogSettings", "Preferences", None)) - self.gb_flags.setTitle(QCoreApplication.translate("DialogSettings", "Flags", None)) - self.cb_video_download.setText(QCoreApplication.translate("DialogSettings", "CheckBox", None)) - self.cb_video_convert_mp4.setText(QCoreApplication.translate("DialogSettings", "CheckBox", None)) - # if QT_CONFIG(whatsthis) + DialogSettings.setWindowTitle(QCoreApplication.translate("DialogSettings", u"Preferences", None)) + self.gb_flags.setTitle(QCoreApplication.translate("DialogSettings", u"Flags", None)) + self.cb_video_download.setText(QCoreApplication.translate("DialogSettings", u"CheckBox", None)) + self.cb_video_convert_mp4.setText(QCoreApplication.translate("DialogSettings", u"CheckBox", None)) +#if QT_CONFIG(whatsthis) self.cb_lyrics_embed.setWhatsThis("") - # endif // QT_CONFIG(whatsthis) - self.cb_lyrics_embed.setText(QCoreApplication.translate("DialogSettings", "CheckBox", None)) - self.cb_lyrics_file.setText(QCoreApplication.translate("DialogSettings", "CheckBox", None)) - self.cb_download_delay.setText(QCoreApplication.translate("DialogSettings", "CheckBox", None)) - self.cb_extract_flac.setText(QCoreApplication.translate("DialogSettings", "CheckBox", None)) - self.cb_metadata_cover_embed.setText(QCoreApplication.translate("DialogSettings", "CheckBox", None)) - self.cb_cover_album_file.setText(QCoreApplication.translate("DialogSettings", "CheckBox", None)) - self.cb_skip_existing.setText(QCoreApplication.translate("DialogSettings", "CheckBox", None)) - self.cb_symlink_to_track.setText(QCoreApplication.translate("DialogSettings", "CheckBox", None)) - self.cb_playlist_create.setText(QCoreApplication.translate("DialogSettings", "CheckBox", None)) - self.gb_choices.setTitle(QCoreApplication.translate("DialogSettings", "Choices", None)) - self.l_icon_quality_audio.setText(QCoreApplication.translate("DialogSettings", "TextLabel", None)) - self.l_quality_audio.setText(QCoreApplication.translate("DialogSettings", "TextLabel", None)) - self.l_icon_quality_video.setText(QCoreApplication.translate("DialogSettings", "TextLabel", None)) - self.l_quality_video.setText(QCoreApplication.translate("DialogSettings", "TextLabel", None)) - self.l_icon_metadata_cover_dimension.setText(QCoreApplication.translate("DialogSettings", "TextLabel", None)) - self.l_metadata_cover_dimension.setText(QCoreApplication.translate("DialogSettings", "TextLabel", None)) - self.gb_numbers.setTitle(QCoreApplication.translate("DialogSettings", "Numbers", None)) - self.l_album_track_num_pad_min.setText(QCoreApplication.translate("DialogSettings", "TextLabel", None)) - self.l_icon_album_track_num_pad_min.setText(QCoreApplication.translate("DialogSettings", "TextLabel", None)) - self.l_downloads_concurrent_max.setText(QCoreApplication.translate("DialogSettings", "TextLabel", None)) - self.l_icon_downloads_concurrent_max.setText(QCoreApplication.translate("DialogSettings", "TextLabel", None)) - self.gb_path.setTitle(QCoreApplication.translate("DialogSettings", "Path", None)) - self.l_icon_download_base_path.setText(QCoreApplication.translate("DialogSettings", "TextLabel", None)) - self.l_download_base_path.setText(QCoreApplication.translate("DialogSettings", "TextLabel", None)) - self.l_icon_format_track.setText(QCoreApplication.translate("DialogSettings", "TextLabel", None)) - self.l_format_track.setText(QCoreApplication.translate("DialogSettings", "TextLabel", None)) - self.l_icon_format_video.setText(QCoreApplication.translate("DialogSettings", "TextLabel", None)) - self.l_format_video.setText(QCoreApplication.translate("DialogSettings", "TextLabel", None)) - self.l_icon_format_album.setText(QCoreApplication.translate("DialogSettings", "TextLabel", None)) - self.l_format_album.setText(QCoreApplication.translate("DialogSettings", "TextLabel", None)) - self.l_icon_format_playlist.setText(QCoreApplication.translate("DialogSettings", "TextLabel", None)) - self.l_format_playlist.setText(QCoreApplication.translate("DialogSettings", "TextLabel", None)) - self.l_icon_format_mix.setText(QCoreApplication.translate("DialogSettings", "TextLabel", None)) - self.l_format_mix.setText(QCoreApplication.translate("DialogSettings", "TextLabel", None)) - self.l_icon_path_binary_ffmpeg.setText(QCoreApplication.translate("DialogSettings", "TextLabel", None)) - self.l_path_binary_ffmpeg.setText(QCoreApplication.translate("DialogSettings", "TextLabel", None)) - self.pb_download_base_path.setText(QCoreApplication.translate("DialogSettings", "...", None)) - self.pb_path_binary_ffmpeg.setText(QCoreApplication.translate("DialogSettings", "...", None)) - +#endif // QT_CONFIG(whatsthis) + self.cb_lyrics_embed.setText(QCoreApplication.translate("DialogSettings", u"CheckBox", None)) + self.cb_lyrics_file.setText(QCoreApplication.translate("DialogSettings", u"CheckBox", None)) + self.cb_download_delay.setText(QCoreApplication.translate("DialogSettings", u"CheckBox", None)) + self.cb_extract_flac.setText(QCoreApplication.translate("DialogSettings", u"CheckBox", None)) + self.cb_metadata_cover_embed.setText(QCoreApplication.translate("DialogSettings", u"CheckBox", None)) + self.cb_cover_album_file.setText(QCoreApplication.translate("DialogSettings", u"CheckBox", None)) + self.cb_skip_existing.setText(QCoreApplication.translate("DialogSettings", u"CheckBox", None)) + self.cb_symlink_to_track.setText(QCoreApplication.translate("DialogSettings", u"CheckBox", None)) + self.cb_playlist_create.setText(QCoreApplication.translate("DialogSettings", u"CheckBox", None)) + self.cb_mark_explicit.setText(QCoreApplication.translate("DialogSettings", u"CheckBox", None)) + self.gb_choices.setTitle(QCoreApplication.translate("DialogSettings", u"Choices", None)) + self.l_icon_quality_audio.setText(QCoreApplication.translate("DialogSettings", u"TextLabel", None)) + self.l_quality_audio.setText(QCoreApplication.translate("DialogSettings", u"TextLabel", None)) + self.l_icon_quality_video.setText(QCoreApplication.translate("DialogSettings", u"TextLabel", None)) + self.l_quality_video.setText(QCoreApplication.translate("DialogSettings", u"TextLabel", None)) + self.l_icon_metadata_cover_dimension.setText(QCoreApplication.translate("DialogSettings", u"TextLabel", None)) + self.l_metadata_cover_dimension.setText(QCoreApplication.translate("DialogSettings", u"TextLabel", None)) + self.gb_numbers.setTitle(QCoreApplication.translate("DialogSettings", u"Numbers", None)) + self.l_album_track_num_pad_min.setText(QCoreApplication.translate("DialogSettings", u"TextLabel", None)) + self.l_icon_album_track_num_pad_min.setText(QCoreApplication.translate("DialogSettings", u"TextLabel", None)) + self.l_downloads_concurrent_max.setText(QCoreApplication.translate("DialogSettings", u"TextLabel", None)) + self.l_icon_downloads_concurrent_max.setText(QCoreApplication.translate("DialogSettings", u"TextLabel", None)) + self.gb_path.setTitle(QCoreApplication.translate("DialogSettings", u"Path", None)) + self.l_icon_download_base_path.setText(QCoreApplication.translate("DialogSettings", u"TextLabel", None)) + self.l_download_base_path.setText(QCoreApplication.translate("DialogSettings", u"TextLabel", None)) + self.l_icon_format_track.setText(QCoreApplication.translate("DialogSettings", u"TextLabel", None)) + self.l_format_track.setText(QCoreApplication.translate("DialogSettings", u"TextLabel", None)) + self.l_icon_format_video.setText(QCoreApplication.translate("DialogSettings", u"TextLabel", None)) + self.l_format_video.setText(QCoreApplication.translate("DialogSettings", u"TextLabel", None)) + self.l_icon_format_album.setText(QCoreApplication.translate("DialogSettings", u"TextLabel", None)) + self.l_format_album.setText(QCoreApplication.translate("DialogSettings", u"TextLabel", None)) + self.l_icon_format_playlist.setText(QCoreApplication.translate("DialogSettings", u"TextLabel", None)) + self.l_format_playlist.setText(QCoreApplication.translate("DialogSettings", u"TextLabel", None)) + self.l_icon_format_mix.setText(QCoreApplication.translate("DialogSettings", u"TextLabel", None)) + self.l_format_mix.setText(QCoreApplication.translate("DialogSettings", u"TextLabel", None)) + self.l_icon_path_binary_ffmpeg.setText(QCoreApplication.translate("DialogSettings", u"TextLabel", None)) + self.l_path_binary_ffmpeg.setText(QCoreApplication.translate("DialogSettings", u"TextLabel", None)) + self.pb_download_base_path.setText(QCoreApplication.translate("DialogSettings", u"...", None)) + self.pb_path_binary_ffmpeg.setText(QCoreApplication.translate("DialogSettings", u"...", None)) # retranslateUi + diff --git a/tidal_dl_ng/ui/dialog_settings.ui b/tidal_dl_ng/ui/dialog_settings.ui index 5287e38..95c6b52 100644 --- a/tidal_dl_ng/ui/dialog_settings.ui +++ b/tidal_dl_ng/ui/dialog_settings.ui @@ -250,7 +250,15 @@ - + + + + + CheckBox + + + + From 0176892a3b989bbfd329ff4e71731c90779741d0 Mon Sep 17 00:00:00 2001 From: Trubo <78948819+truubo@users.noreply.github.com> Date: Sun, 19 Oct 2025 18:28:18 -0500 Subject: [PATCH 3/8] Quick help text change --- tidal_dl_ng/model/cfg.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tidal_dl_ng/model/cfg.py b/tidal_dl_ng/model/cfg.py index a21c60d..349f4a3 100644 --- a/tidal_dl_ng/model/cfg.py +++ b/tidal_dl_ng/model/cfg.py @@ -95,7 +95,7 @@ class HelpSettings: "The dimensions of the cover image embedded into the track. Possible values: 320x320, 640x640x 1280x1280." ) metadata_cover_embed: str = "Embed album cover into file." - mark_explicit: str = "Mark explicit tracks and albums with 'E' in track title." + mark_explicit: str = "Mark explicit tracks with 'E' in track title." cover_album_file: str = "Save cover to 'cover.jpg', if an album is downloaded." extract_flac: str = "Extract FLAC audio tracks from MP4 containers and save them as `*.flac` (uses FFmpeg)." downloads_simultaneous_per_track_max: str = "Maximum number of simultaneous chunk downloads per track." From 2b932e84b4cdb9f9c09635f23b4914e860d185b6 Mon Sep 17 00:00:00 2001 From: Robert Honz Date: Mon, 20 Oct 2025 08:06:25 +0200 Subject: [PATCH 4/8] =?UTF-8?q?fix(download):=20=F0=9F=90=9B=20update=20so?= =?UTF-8?q?rting=20method=20for=20track=20paths?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Changed sorting method from `os.path.getctime` to `x.stat().st_birthtime` for better accuracy in track creation time. * This improves the reliability of track order when not dealing with albums. --- tidal_dl_ng/download.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tidal_dl_ng/download.py b/tidal_dl_ng/download.py index 4ac2b14..cf9e260 100644 --- a/tidal_dl_ng/download.py +++ b/tidal_dl_ng/download.py @@ -1560,7 +1560,7 @@ class Download: path_tracks.sort() elif not is_album: # If it is not an album sort by creation time - path_tracks.sort(key=lambda x: os.path.getctime(x)) + path_tracks.sort(key=lambda x: x.stat().st_birthtime) # Write data to m3u file with path_playlist.open(mode="w", encoding="utf-8") as f: From ffbd7849a11c7ef1c39294c8e92686edb6775c71 Mon Sep 17 00:00:00 2001 From: Robert Honz Date: Mon, 20 Oct 2025 08:12:34 +0200 Subject: [PATCH 5/8] =?UTF-8?q?fix(download):=20=F0=9F=90=9B=20handle=20mi?= =?UTF-8?q?ssing=20`st=5Fbirthtime`=20attribute=20in=20track=20sorting?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Updated the sorting method for track paths to check for the presence of `st_birthtime`. * If `st_birthtime` is not available, fallback to using `st_ctime` for sorting. --- tidal_dl_ng/download.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/tidal_dl_ng/download.py b/tidal_dl_ng/download.py index cf9e260..f6ddf48 100644 --- a/tidal_dl_ng/download.py +++ b/tidal_dl_ng/download.py @@ -1560,7 +1560,9 @@ class Download: path_tracks.sort() elif not is_album: # If it is not an album sort by creation time - path_tracks.sort(key=lambda x: x.stat().st_birthtime) + path_tracks.sort( + key=lambda x: x.stat().st_birthtime if hasattr(x.stat(), "st_birthtime") else x.stat().st_ctime + ) # Write data to m3u file with path_playlist.open(mode="w", encoding="utf-8") as f: From 8c361249ed8b3caa504192dd37bd354ed04b20b7 Mon Sep 17 00:00:00 2001 From: Robert Honz Date: Mon, 20 Oct 2025 08:20:20 +0200 Subject: [PATCH 6/8] =?UTF-8?q?fix(cfg):=20=F0=9F=90=9B=20update=20`mark?= =?UTF-8?q?=5Fexplicit`=20default=20value=20and=20improve=20help=20text?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Set default value of `mark_explicit` to `False`. * Update help text to clarify that marking explicit tracks applies only to metadata. --- tidal_dl_ng/model/cfg.py | 4 +- tidal_dl_ng/ui/dialog_settings.py | 369 ++++++++++++++---------------- 2 files changed, 168 insertions(+), 205 deletions(-) diff --git a/tidal_dl_ng/model/cfg.py b/tidal_dl_ng/model/cfg.py index 349f4a3..44db92f 100644 --- a/tidal_dl_ng/model/cfg.py +++ b/tidal_dl_ng/model/cfg.py @@ -35,7 +35,7 @@ class Settings: path_binary_ffmpeg: str = "" metadata_cover_dimension: CoverDimensions = CoverDimensions.Px320 metadata_cover_embed: bool = True - mark_explicit: bool = True + mark_explicit: bool = False cover_album_file: bool = True extract_flac: bool = True downloads_simultaneous_per_track_max: int = 20 @@ -95,7 +95,7 @@ class HelpSettings: "The dimensions of the cover image embedded into the track. Possible values: 320x320, 640x640x 1280x1280." ) metadata_cover_embed: str = "Embed album cover into file." - mark_explicit: str = "Mark explicit tracks with 'E' in track title." + mark_explicit: str = "Mark explicit tracks with '🅴' in track title (only applies to metadata)." cover_album_file: str = "Save cover to 'cover.jpg', if an album is downloaded." extract_flac: str = "Extract FLAC audio tracks from MP4 containers and save them as `*.flac` (uses FFmpeg)." downloads_simultaneous_per_track_max: str = "Maximum number of simultaneous chunk downloads per track." diff --git a/tidal_dl_ng/ui/dialog_settings.py b/tidal_dl_ng/ui/dialog_settings.py index 89a4cf1..9ec2738 100644 --- a/tidal_dl_ng/ui/dialog_settings.py +++ b/tidal_dl_ng/ui/dialog_settings.py @@ -1,5 +1,3 @@ -# -*- coding: utf-8 -*- - ################################################################################ ## Form generated from reading UI file 'dialog_settings.ui' ## @@ -8,22 +6,27 @@ ## WARNING! All changes made in this file will be lost when recompiling UI file! ################################################################################ -from PySide6.QtCore import (QCoreApplication, QDate, QDateTime, QLocale, - QMetaObject, QObject, QPoint, QRect, - QSize, QTime, QUrl, Qt) -from PySide6.QtGui import (QBrush, QColor, QConicalGradient, QCursor, - QFont, QFontDatabase, QGradient, QIcon, - QImage, QKeySequence, QLinearGradient, QPainter, - QPalette, QPixmap, QRadialGradient, QTransform) -from PySide6.QtWidgets import (QAbstractButton, QApplication, QCheckBox, QComboBox, - QDialog, QDialogButtonBox, QGroupBox, QHBoxLayout, - QLabel, QLayout, QLineEdit, QPushButton, - QSizePolicy, QSpinBox, QVBoxLayout, QWidget) +from PySide6.QtCore import QCoreApplication, QMetaObject, Qt +from PySide6.QtWidgets import ( + QCheckBox, + QComboBox, + QDialogButtonBox, + QGroupBox, + QHBoxLayout, + QLabel, + QLayout, + QLineEdit, + QPushButton, + QSizePolicy, + QSpinBox, + QVBoxLayout, +) -class Ui_DialogSettings(object): + +class Ui_DialogSettings: def setupUi(self, DialogSettings): if not DialogSettings.objectName(): - DialogSettings.setObjectName(u"DialogSettings") + DialogSettings.setObjectName("DialogSettings") DialogSettings.resize(640, 800) sizePolicy = QSizePolicy(QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Expanding) sizePolicy.setHorizontalStretch(100) @@ -32,13 +35,13 @@ class Ui_DialogSettings(object): DialogSettings.setSizePolicy(sizePolicy) DialogSettings.setSizeGripEnabled(True) self.lv_dialog_settings = QVBoxLayout(DialogSettings) - self.lv_dialog_settings.setObjectName(u"lv_dialog_settings") + self.lv_dialog_settings.setObjectName("lv_dialog_settings") self.lv_dialog_settings.setContentsMargins(0, 0, 0, 0) self.lv_main = QVBoxLayout() - self.lv_main.setObjectName(u"lv_main") + self.lv_main.setObjectName("lv_main") self.lv_main.setContentsMargins(12, 12, 12, 12) self.gb_flags = QGroupBox(DialogSettings) - self.gb_flags.setObjectName(u"gb_flags") + self.gb_flags.setObjectName("gb_flags") sizePolicy1 = QSizePolicy(QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Fixed) sizePolicy1.setHorizontalStretch(100) sizePolicy1.setVerticalStretch(100) @@ -47,42 +50,39 @@ class Ui_DialogSettings(object): self.gb_flags.setFlat(False) self.gb_flags.setCheckable(False) self.lv_flags = QVBoxLayout(self.gb_flags) - self.lv_flags.setObjectName(u"lv_flags") + self.lv_flags.setObjectName("lv_flags") self.lh_flags_1 = QHBoxLayout() - self.lh_flags_1.setObjectName(u"lh_flags_1") + self.lh_flags_1.setObjectName("lh_flags_1") self.lv_flag_video_download = QVBoxLayout() - self.lv_flag_video_download.setObjectName(u"lv_flag_video_download") + self.lv_flag_video_download.setObjectName("lv_flag_video_download") self.cb_video_download = QCheckBox(self.gb_flags) - self.cb_video_download.setObjectName(u"cb_video_download") + self.cb_video_download.setObjectName("cb_video_download") sizePolicy1.setHeightForWidth(self.cb_video_download.sizePolicy().hasHeightForWidth()) self.cb_video_download.setSizePolicy(sizePolicy1) self.lv_flag_video_download.addWidget(self.cb_video_download) - self.lh_flags_1.addLayout(self.lv_flag_video_download) self.lv_flag_video_convert = QVBoxLayout() - self.lv_flag_video_convert.setObjectName(u"lv_flag_video_convert") + self.lv_flag_video_convert.setObjectName("lv_flag_video_convert") self.cb_video_convert_mp4 = QCheckBox(self.gb_flags) - self.cb_video_convert_mp4.setObjectName(u"cb_video_convert_mp4") + self.cb_video_convert_mp4.setObjectName("cb_video_convert_mp4") sizePolicy1.setHeightForWidth(self.cb_video_convert_mp4.sizePolicy().hasHeightForWidth()) self.cb_video_convert_mp4.setSizePolicy(sizePolicy1) self.lv_flag_video_convert.addWidget(self.cb_video_convert_mp4) - self.lh_flags_1.addLayout(self.lv_flag_video_convert) - self.lv_flags.addLayout(self.lh_flags_1) self.lh_flags_2 = QHBoxLayout() - self.lh_flags_2.setObjectName(u"lh_flags_2") + self.lh_flags_2.setObjectName("lh_flags_2") self.lv_flag_lyrics_embed = QVBoxLayout() - self.lv_flag_lyrics_embed.setObjectName(u"lv_flag_lyrics_embed") + self.lv_flag_lyrics_embed.setObjectName("lv_flag_lyrics_embed") self.cb_lyrics_embed = QCheckBox(self.gb_flags) - self.cb_lyrics_embed.setObjectName(u"cb_lyrics_embed") + self.cb_lyrics_embed.setObjectName("cb_lyrics_embed") sizePolicy2 = QSizePolicy(QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Fixed) sizePolicy2.setHorizontalStretch(0) sizePolicy2.setVerticalStretch(0) @@ -91,144 +91,128 @@ class Ui_DialogSettings(object): self.lv_flag_lyrics_embed.addWidget(self.cb_lyrics_embed) - self.lh_flags_2.addLayout(self.lv_flag_lyrics_embed) self.lv_flag_lyrics_file = QVBoxLayout() - self.lv_flag_lyrics_file.setObjectName(u"lv_flag_lyrics_file") + self.lv_flag_lyrics_file.setObjectName("lv_flag_lyrics_file") self.cb_lyrics_file = QCheckBox(self.gb_flags) - self.cb_lyrics_file.setObjectName(u"cb_lyrics_file") + self.cb_lyrics_file.setObjectName("cb_lyrics_file") sizePolicy1.setHeightForWidth(self.cb_lyrics_file.sizePolicy().hasHeightForWidth()) self.cb_lyrics_file.setSizePolicy(sizePolicy1) self.lv_flag_lyrics_file.addWidget(self.cb_lyrics_file) - self.lh_flags_2.addLayout(self.lv_flag_lyrics_file) - self.lv_flags.addLayout(self.lh_flags_2) self.lh_flag_3 = QHBoxLayout() - self.lh_flag_3.setObjectName(u"lh_flag_3") + self.lh_flag_3.setObjectName("lh_flag_3") self.lv_flag_download_delay = QVBoxLayout() - self.lv_flag_download_delay.setObjectName(u"lv_flag_download_delay") + self.lv_flag_download_delay.setObjectName("lv_flag_download_delay") self.cb_download_delay = QCheckBox(self.gb_flags) - self.cb_download_delay.setObjectName(u"cb_download_delay") + self.cb_download_delay.setObjectName("cb_download_delay") sizePolicy1.setHeightForWidth(self.cb_download_delay.sizePolicy().hasHeightForWidth()) self.cb_download_delay.setSizePolicy(sizePolicy1) self.lv_flag_download_delay.addWidget(self.cb_download_delay) - self.lh_flag_3.addLayout(self.lv_flag_download_delay) self.lv_flag_extract_flac = QVBoxLayout() - self.lv_flag_extract_flac.setObjectName(u"lv_flag_extract_flac") + self.lv_flag_extract_flac.setObjectName("lv_flag_extract_flac") self.cb_extract_flac = QCheckBox(self.gb_flags) - self.cb_extract_flac.setObjectName(u"cb_extract_flac") + self.cb_extract_flac.setObjectName("cb_extract_flac") sizePolicy2.setHeightForWidth(self.cb_extract_flac.sizePolicy().hasHeightForWidth()) self.cb_extract_flac.setSizePolicy(sizePolicy2) self.lv_flag_extract_flac.addWidget(self.cb_extract_flac) - self.lh_flag_3.addLayout(self.lv_flag_extract_flac) - self.lv_flags.addLayout(self.lh_flag_3) self.lh_flags_4 = QHBoxLayout() - self.lh_flags_4.setObjectName(u"lh_flags_4") + self.lh_flags_4.setObjectName("lh_flags_4") self.lv_flag_metadata_cover_embed = QVBoxLayout() - self.lv_flag_metadata_cover_embed.setObjectName(u"lv_flag_metadata_cover_embed") + self.lv_flag_metadata_cover_embed.setObjectName("lv_flag_metadata_cover_embed") self.cb_metadata_cover_embed = QCheckBox(self.gb_flags) - self.cb_metadata_cover_embed.setObjectName(u"cb_metadata_cover_embed") + self.cb_metadata_cover_embed.setObjectName("cb_metadata_cover_embed") self.lv_flag_metadata_cover_embed.addWidget(self.cb_metadata_cover_embed) - self.lh_flags_4.addLayout(self.lv_flag_metadata_cover_embed) self.lv_flag_cover_album_file = QVBoxLayout() - self.lv_flag_cover_album_file.setObjectName(u"lv_flag_cover_album_file") + self.lv_flag_cover_album_file.setObjectName("lv_flag_cover_album_file") self.cb_cover_album_file = QCheckBox(self.gb_flags) - self.cb_cover_album_file.setObjectName(u"cb_cover_album_file") + self.cb_cover_album_file.setObjectName("cb_cover_album_file") self.lv_flag_cover_album_file.addWidget(self.cb_cover_album_file) - self.lh_flags_4.addLayout(self.lv_flag_cover_album_file) - self.lv_flags.addLayout(self.lh_flags_4) self.horizontalLayout = QHBoxLayout() - self.horizontalLayout.setObjectName(u"horizontalLayout") + self.horizontalLayout.setObjectName("horizontalLayout") self.lv_flag_skip_existing = QVBoxLayout() - self.lv_flag_skip_existing.setObjectName(u"lv_flag_skip_existing") + self.lv_flag_skip_existing.setObjectName("lv_flag_skip_existing") self.cb_skip_existing = QCheckBox(self.gb_flags) - self.cb_skip_existing.setObjectName(u"cb_skip_existing") + self.cb_skip_existing.setObjectName("cb_skip_existing") self.lv_flag_skip_existing.addWidget(self.cb_skip_existing) - self.horizontalLayout.addLayout(self.lv_flag_skip_existing) self.lv_symlink_to_track = QVBoxLayout() - self.lv_symlink_to_track.setObjectName(u"lv_symlink_to_track") + self.lv_symlink_to_track.setObjectName("lv_symlink_to_track") self.cb_symlink_to_track = QCheckBox(self.gb_flags) - self.cb_symlink_to_track.setObjectName(u"cb_symlink_to_track") + self.cb_symlink_to_track.setObjectName("cb_symlink_to_track") self.lv_symlink_to_track.addWidget(self.cb_symlink_to_track) - self.horizontalLayout.addLayout(self.lv_symlink_to_track) - self.lv_flags.addLayout(self.horizontalLayout) self.horizontalLayout_12 = QHBoxLayout() - self.horizontalLayout_12.setObjectName(u"horizontalLayout_12") + self.horizontalLayout_12.setObjectName("horizontalLayout_12") self.lv_playlist_create = QVBoxLayout() - self.lv_playlist_create.setObjectName(u"lv_playlist_create") + self.lv_playlist_create.setObjectName("lv_playlist_create") self.cb_playlist_create = QCheckBox(self.gb_flags) - self.cb_playlist_create.setObjectName(u"cb_playlist_create") + self.cb_playlist_create.setObjectName("cb_playlist_create") self.lv_playlist_create.addWidget(self.cb_playlist_create) - self.horizontalLayout_12.addLayout(self.lv_playlist_create) self.lv_mark_explicit = QVBoxLayout() - self.lv_mark_explicit.setObjectName(u"lv_mark_explicit") + self.lv_mark_explicit.setObjectName("lv_mark_explicit") self.cb_mark_explicit = QCheckBox(self.gb_flags) - self.cb_mark_explicit.setObjectName(u"cb_mark_explicit") + self.cb_mark_explicit.setObjectName("cb_mark_explicit") self.lv_mark_explicit.addWidget(self.cb_mark_explicit) - self.horizontalLayout_12.addLayout(self.lv_mark_explicit) - self.lv_flags.addLayout(self.horizontalLayout_12) - self.lv_main.addWidget(self.gb_flags) self.gb_choices = QGroupBox(DialogSettings) - self.gb_choices.setObjectName(u"gb_choices") + self.gb_choices.setObjectName("gb_choices") sizePolicy3 = QSizePolicy(QSizePolicy.Policy.Preferred, QSizePolicy.Policy.Fixed) sizePolicy3.setHorizontalStretch(0) sizePolicy3.setVerticalStretch(0) sizePolicy3.setHeightForWidth(self.gb_choices.sizePolicy().hasHeightForWidth()) self.gb_choices.setSizePolicy(sizePolicy3) self.lv_choices = QVBoxLayout(self.gb_choices) - self.lv_choices.setObjectName(u"lv_choices") + self.lv_choices.setObjectName("lv_choices") self.lh_choices_quality_audio = QHBoxLayout() - self.lh_choices_quality_audio.setObjectName(u"lh_choices_quality_audio") + self.lh_choices_quality_audio.setObjectName("lh_choices_quality_audio") self.l_icon_quality_audio = QLabel(self.gb_choices) - self.l_icon_quality_audio.setObjectName(u"l_icon_quality_audio") + self.l_icon_quality_audio.setObjectName("l_icon_quality_audio") sizePolicy4 = QSizePolicy(QSizePolicy.Policy.Fixed, QSizePolicy.Policy.Fixed) sizePolicy4.setHorizontalStretch(0) sizePolicy4.setVerticalStretch(0) @@ -238,14 +222,14 @@ class Ui_DialogSettings(object): self.lh_choices_quality_audio.addWidget(self.l_icon_quality_audio) self.l_quality_audio = QLabel(self.gb_choices) - self.l_quality_audio.setObjectName(u"l_quality_audio") + self.l_quality_audio.setObjectName("l_quality_audio") sizePolicy4.setHeightForWidth(self.l_quality_audio.sizePolicy().hasHeightForWidth()) self.l_quality_audio.setSizePolicy(sizePolicy4) self.lh_choices_quality_audio.addWidget(self.l_quality_audio) self.c_quality_audio = QComboBox(self.gb_choices) - self.c_quality_audio.setObjectName(u"c_quality_audio") + self.c_quality_audio.setObjectName("c_quality_audio") self.lh_choices_quality_audio.addWidget(self.c_quality_audio) @@ -254,23 +238,23 @@ class Ui_DialogSettings(object): self.lv_choices.addLayout(self.lh_choices_quality_audio) self.lh_choices_quality_video = QHBoxLayout() - self.lh_choices_quality_video.setObjectName(u"lh_choices_quality_video") + self.lh_choices_quality_video.setObjectName("lh_choices_quality_video") self.l_icon_quality_video = QLabel(self.gb_choices) - self.l_icon_quality_video.setObjectName(u"l_icon_quality_video") + self.l_icon_quality_video.setObjectName("l_icon_quality_video") sizePolicy4.setHeightForWidth(self.l_icon_quality_video.sizePolicy().hasHeightForWidth()) self.l_icon_quality_video.setSizePolicy(sizePolicy4) self.lh_choices_quality_video.addWidget(self.l_icon_quality_video) self.l_quality_video = QLabel(self.gb_choices) - self.l_quality_video.setObjectName(u"l_quality_video") + self.l_quality_video.setObjectName("l_quality_video") sizePolicy4.setHeightForWidth(self.l_quality_video.sizePolicy().hasHeightForWidth()) self.l_quality_video.setSizePolicy(sizePolicy4) self.lh_choices_quality_video.addWidget(self.l_quality_video) self.c_quality_video = QComboBox(self.gb_choices) - self.c_quality_video.setObjectName(u"c_quality_video") + self.c_quality_video.setObjectName("c_quality_video") self.lh_choices_quality_video.addWidget(self.c_quality_video) @@ -279,24 +263,24 @@ class Ui_DialogSettings(object): self.lv_choices.addLayout(self.lh_choices_quality_video) self.lh_choices_cover_dimension = QHBoxLayout() - self.lh_choices_cover_dimension.setObjectName(u"lh_choices_cover_dimension") + self.lh_choices_cover_dimension.setObjectName("lh_choices_cover_dimension") self.lh_choices_cover_dimension.setSizeConstraint(QLayout.SizeConstraint.SetDefaultConstraint) self.l_icon_metadata_cover_dimension = QLabel(self.gb_choices) - self.l_icon_metadata_cover_dimension.setObjectName(u"l_icon_metadata_cover_dimension") + self.l_icon_metadata_cover_dimension.setObjectName("l_icon_metadata_cover_dimension") sizePolicy4.setHeightForWidth(self.l_icon_metadata_cover_dimension.sizePolicy().hasHeightForWidth()) self.l_icon_metadata_cover_dimension.setSizePolicy(sizePolicy4) self.lh_choices_cover_dimension.addWidget(self.l_icon_metadata_cover_dimension) self.l_metadata_cover_dimension = QLabel(self.gb_choices) - self.l_metadata_cover_dimension.setObjectName(u"l_metadata_cover_dimension") + self.l_metadata_cover_dimension.setObjectName("l_metadata_cover_dimension") sizePolicy4.setHeightForWidth(self.l_metadata_cover_dimension.sizePolicy().hasHeightForWidth()) self.l_metadata_cover_dimension.setSizePolicy(sizePolicy4) self.lh_choices_cover_dimension.addWidget(self.l_metadata_cover_dimension) self.c_metadata_cover_dimension = QComboBox(self.gb_choices) - self.c_metadata_cover_dimension.setObjectName(u"c_metadata_cover_dimension") + self.c_metadata_cover_dimension.setObjectName("c_metadata_cover_dimension") sizePolicy5 = QSizePolicy(QSizePolicy.Policy.Preferred, QSizePolicy.Policy.Fixed) sizePolicy5.setHorizontalStretch(10) sizePolicy5.setVerticalStretch(0) @@ -309,126 +293,119 @@ class Ui_DialogSettings(object): self.lv_choices.addLayout(self.lh_choices_cover_dimension) - self.lv_main.addWidget(self.gb_choices) self.gb_numbers = QGroupBox(DialogSettings) - self.gb_numbers.setObjectName(u"gb_numbers") + self.gb_numbers.setObjectName("gb_numbers") self.verticalLayout_8 = QVBoxLayout(self.gb_numbers) - self.verticalLayout_8.setObjectName(u"verticalLayout_8") + self.verticalLayout_8.setObjectName("verticalLayout_8") self.horizontalLayout_9 = QHBoxLayout() - self.horizontalLayout_9.setObjectName(u"horizontalLayout_9") + self.horizontalLayout_9.setObjectName("horizontalLayout_9") self.l_album_track_num_pad_min = QLabel(self.gb_numbers) - self.l_album_track_num_pad_min.setObjectName(u"l_album_track_num_pad_min") + self.l_album_track_num_pad_min.setObjectName("l_album_track_num_pad_min") self.horizontalLayout_9.addWidget(self.l_album_track_num_pad_min) self.l_icon_album_track_num_pad_min = QLabel(self.gb_numbers) - self.l_icon_album_track_num_pad_min.setObjectName(u"l_icon_album_track_num_pad_min") + self.l_icon_album_track_num_pad_min.setObjectName("l_icon_album_track_num_pad_min") self.horizontalLayout_9.addWidget(self.l_icon_album_track_num_pad_min) self.sb_album_track_num_pad_min = QSpinBox(self.gb_numbers) - self.sb_album_track_num_pad_min.setObjectName(u"sb_album_track_num_pad_min") + self.sb_album_track_num_pad_min.setObjectName("sb_album_track_num_pad_min") self.sb_album_track_num_pad_min.setMaximum(4) self.horizontalLayout_9.addWidget(self.sb_album_track_num_pad_min) - self.verticalLayout_8.addLayout(self.horizontalLayout_9) self.horizontalLayout_11 = QHBoxLayout() - self.horizontalLayout_11.setObjectName(u"horizontalLayout_11") + self.horizontalLayout_11.setObjectName("horizontalLayout_11") self.l_downloads_concurrent_max = QLabel(self.gb_numbers) - self.l_downloads_concurrent_max.setObjectName(u"l_downloads_concurrent_max") + self.l_downloads_concurrent_max.setObjectName("l_downloads_concurrent_max") self.horizontalLayout_11.addWidget(self.l_downloads_concurrent_max) self.l_icon_downloads_concurrent_max = QLabel(self.gb_numbers) - self.l_icon_downloads_concurrent_max.setObjectName(u"l_icon_downloads_concurrent_max") + self.l_icon_downloads_concurrent_max.setObjectName("l_icon_downloads_concurrent_max") self.horizontalLayout_11.addWidget(self.l_icon_downloads_concurrent_max) self.sb_downloads_concurrent_max = QSpinBox(self.gb_numbers) - self.sb_downloads_concurrent_max.setObjectName(u"sb_downloads_concurrent_max") + self.sb_downloads_concurrent_max.setObjectName("sb_downloads_concurrent_max") self.sb_downloads_concurrent_max.setMinimum(1) self.sb_downloads_concurrent_max.setMaximum(5) self.horizontalLayout_11.addWidget(self.sb_downloads_concurrent_max) - self.verticalLayout_8.addLayout(self.horizontalLayout_11) - self.lv_main.addWidget(self.gb_numbers) self.gb_path = QGroupBox(DialogSettings) - self.gb_path.setObjectName(u"gb_path") + self.gb_path.setObjectName("gb_path") self.horizontalLayout_2 = QHBoxLayout(self.gb_path) - self.horizontalLayout_2.setObjectName(u"horizontalLayout_2") + self.horizontalLayout_2.setObjectName("horizontalLayout_2") self.verticalLayout_2 = QVBoxLayout() - self.verticalLayout_2.setObjectName(u"verticalLayout_2") + self.verticalLayout_2.setObjectName("verticalLayout_2") self.lh_path_base = QHBoxLayout() - self.lh_path_base.setObjectName(u"lh_path_base") + self.lh_path_base.setObjectName("lh_path_base") self.l_icon_download_base_path = QLabel(self.gb_path) - self.l_icon_download_base_path.setObjectName(u"l_icon_download_base_path") + self.l_icon_download_base_path.setObjectName("l_icon_download_base_path") sizePolicy4.setHeightForWidth(self.l_icon_download_base_path.sizePolicy().hasHeightForWidth()) self.l_icon_download_base_path.setSizePolicy(sizePolicy4) self.lh_path_base.addWidget(self.l_icon_download_base_path) self.l_download_base_path = QLabel(self.gb_path) - self.l_download_base_path.setObjectName(u"l_download_base_path") + self.l_download_base_path.setObjectName("l_download_base_path") sizePolicy3.setHeightForWidth(self.l_download_base_path.sizePolicy().hasHeightForWidth()) self.l_download_base_path.setSizePolicy(sizePolicy3) self.lh_path_base.addWidget(self.l_download_base_path) - self.verticalLayout_2.addLayout(self.lh_path_base) self.lh_path_fmt_track = QHBoxLayout() - self.lh_path_fmt_track.setObjectName(u"lh_path_fmt_track") + self.lh_path_fmt_track.setObjectName("lh_path_fmt_track") self.l_icon_format_track = QLabel(self.gb_path) - self.l_icon_format_track.setObjectName(u"l_icon_format_track") + self.l_icon_format_track.setObjectName("l_icon_format_track") sizePolicy4.setHeightForWidth(self.l_icon_format_track.sizePolicy().hasHeightForWidth()) self.l_icon_format_track.setSizePolicy(sizePolicy4) self.lh_path_fmt_track.addWidget(self.l_icon_format_track) self.l_format_track = QLabel(self.gb_path) - self.l_format_track.setObjectName(u"l_format_track") + self.l_format_track.setObjectName("l_format_track") sizePolicy3.setHeightForWidth(self.l_format_track.sizePolicy().hasHeightForWidth()) self.l_format_track.setSizePolicy(sizePolicy3) self.lh_path_fmt_track.addWidget(self.l_format_track) - self.verticalLayout_2.addLayout(self.lh_path_fmt_track) self.lh_path_fmt_video = QHBoxLayout() - self.lh_path_fmt_video.setObjectName(u"lh_path_fmt_video") + self.lh_path_fmt_video.setObjectName("lh_path_fmt_video") self.l_icon_format_video = QLabel(self.gb_path) - self.l_icon_format_video.setObjectName(u"l_icon_format_video") + self.l_icon_format_video.setObjectName("l_icon_format_video") sizePolicy4.setHeightForWidth(self.l_icon_format_video.sizePolicy().hasHeightForWidth()) self.l_icon_format_video.setSizePolicy(sizePolicy4) self.lh_path_fmt_video.addWidget(self.l_icon_format_video) self.l_format_video = QLabel(self.gb_path) - self.l_format_video.setObjectName(u"l_format_video") + self.l_format_video.setObjectName("l_format_video") sizePolicy3.setHeightForWidth(self.l_format_video.sizePolicy().hasHeightForWidth()) self.l_format_video.setSizePolicy(sizePolicy3) self.lh_path_fmt_video.addWidget(self.l_format_video) - self.verticalLayout_2.addLayout(self.lh_path_fmt_video) self.lh_path_fmt_album = QHBoxLayout() - self.lh_path_fmt_album.setObjectName(u"lh_path_fmt_album") + self.lh_path_fmt_album.setObjectName("lh_path_fmt_album") self.l_icon_format_album = QLabel(self.gb_path) - self.l_icon_format_album.setObjectName(u"l_icon_format_album") + self.l_icon_format_album.setObjectName("l_icon_format_album") sizePolicy6 = QSizePolicy(QSizePolicy.Policy.Fixed, QSizePolicy.Policy.Preferred) sizePolicy6.setHorizontalStretch(0) sizePolicy6.setVerticalStretch(0) @@ -438,81 +415,76 @@ class Ui_DialogSettings(object): self.lh_path_fmt_album.addWidget(self.l_icon_format_album) self.l_format_album = QLabel(self.gb_path) - self.l_format_album.setObjectName(u"l_format_album") + self.l_format_album.setObjectName("l_format_album") sizePolicy3.setHeightForWidth(self.l_format_album.sizePolicy().hasHeightForWidth()) self.l_format_album.setSizePolicy(sizePolicy3) self.lh_path_fmt_album.addWidget(self.l_format_album) - self.verticalLayout_2.addLayout(self.lh_path_fmt_album) self.lh_fpath_mt_playlist = QHBoxLayout() - self.lh_fpath_mt_playlist.setObjectName(u"lh_fpath_mt_playlist") + self.lh_fpath_mt_playlist.setObjectName("lh_fpath_mt_playlist") self.l_icon_format_playlist = QLabel(self.gb_path) - self.l_icon_format_playlist.setObjectName(u"l_icon_format_playlist") + self.l_icon_format_playlist.setObjectName("l_icon_format_playlist") sizePolicy4.setHeightForWidth(self.l_icon_format_playlist.sizePolicy().hasHeightForWidth()) self.l_icon_format_playlist.setSizePolicy(sizePolicy4) self.lh_fpath_mt_playlist.addWidget(self.l_icon_format_playlist) self.l_format_playlist = QLabel(self.gb_path) - self.l_format_playlist.setObjectName(u"l_format_playlist") + self.l_format_playlist.setObjectName("l_format_playlist") sizePolicy3.setHeightForWidth(self.l_format_playlist.sizePolicy().hasHeightForWidth()) self.l_format_playlist.setSizePolicy(sizePolicy3) self.lh_fpath_mt_playlist.addWidget(self.l_format_playlist) - self.verticalLayout_2.addLayout(self.lh_fpath_mt_playlist) self.lh_path_fmt_mix = QHBoxLayout() - self.lh_path_fmt_mix.setObjectName(u"lh_path_fmt_mix") + self.lh_path_fmt_mix.setObjectName("lh_path_fmt_mix") self.l_icon_format_mix = QLabel(self.gb_path) - self.l_icon_format_mix.setObjectName(u"l_icon_format_mix") + self.l_icon_format_mix.setObjectName("l_icon_format_mix") sizePolicy6.setHeightForWidth(self.l_icon_format_mix.sizePolicy().hasHeightForWidth()) self.l_icon_format_mix.setSizePolicy(sizePolicy6) self.lh_path_fmt_mix.addWidget(self.l_icon_format_mix) self.l_format_mix = QLabel(self.gb_path) - self.l_format_mix.setObjectName(u"l_format_mix") + self.l_format_mix.setObjectName("l_format_mix") sizePolicy3.setHeightForWidth(self.l_format_mix.sizePolicy().hasHeightForWidth()) self.l_format_mix.setSizePolicy(sizePolicy3) self.lh_path_fmt_mix.addWidget(self.l_format_mix) - self.verticalLayout_2.addLayout(self.lh_path_fmt_mix) self.lh_path_binary_ffmpeg = QHBoxLayout() - self.lh_path_binary_ffmpeg.setObjectName(u"lh_path_binary_ffmpeg") + self.lh_path_binary_ffmpeg.setObjectName("lh_path_binary_ffmpeg") self.l_icon_path_binary_ffmpeg = QLabel(self.gb_path) - self.l_icon_path_binary_ffmpeg.setObjectName(u"l_icon_path_binary_ffmpeg") + self.l_icon_path_binary_ffmpeg.setObjectName("l_icon_path_binary_ffmpeg") sizePolicy4.setHeightForWidth(self.l_icon_path_binary_ffmpeg.sizePolicy().hasHeightForWidth()) self.l_icon_path_binary_ffmpeg.setSizePolicy(sizePolicy4) self.lh_path_binary_ffmpeg.addWidget(self.l_icon_path_binary_ffmpeg) self.l_path_binary_ffmpeg = QLabel(self.gb_path) - self.l_path_binary_ffmpeg.setObjectName(u"l_path_binary_ffmpeg") + self.l_path_binary_ffmpeg.setObjectName("l_path_binary_ffmpeg") sizePolicy3.setHeightForWidth(self.l_path_binary_ffmpeg.sizePolicy().hasHeightForWidth()) self.l_path_binary_ffmpeg.setSizePolicy(sizePolicy3) self.lh_path_binary_ffmpeg.addWidget(self.l_path_binary_ffmpeg) - self.verticalLayout_2.addLayout(self.lh_path_binary_ffmpeg) - self.horizontalLayout_2.addLayout(self.verticalLayout_2) self.verticalLayout = QVBoxLayout() - self.verticalLayout.setObjectName(u"verticalLayout") + self.verticalLayout.setObjectName("verticalLayout") self.horizontalLayout_10 = QHBoxLayout() - self.horizontalLayout_10.setObjectName(u"horizontalLayout_10") + self.horizontalLayout_10.setObjectName("horizontalLayout_10") self.le_download_base_path = QLineEdit(self.gb_path) - self.le_download_base_path.setObjectName(u"le_download_base_path") + self.le_download_base_path.setObjectName("le_download_base_path") sizePolicy2.setHeightForWidth(self.le_download_base_path.sizePolicy().hasHeightForWidth()) self.le_download_base_path.setSizePolicy(sizePolicy2) self.le_download_base_path.setDragEnabled(True) @@ -520,69 +492,63 @@ class Ui_DialogSettings(object): self.horizontalLayout_10.addWidget(self.le_download_base_path) self.pb_download_base_path = QPushButton(self.gb_path) - self.pb_download_base_path.setObjectName(u"pb_download_base_path") + self.pb_download_base_path.setObjectName("pb_download_base_path") self.horizontalLayout_10.addWidget(self.pb_download_base_path) - self.verticalLayout.addLayout(self.horizontalLayout_10) self.horizontalLayout_7 = QHBoxLayout() - self.horizontalLayout_7.setObjectName(u"horizontalLayout_7") + self.horizontalLayout_7.setObjectName("horizontalLayout_7") self.le_format_track = QLineEdit(self.gb_path) - self.le_format_track.setObjectName(u"le_format_track") + self.le_format_track.setObjectName("le_format_track") self.horizontalLayout_7.addWidget(self.le_format_track) - self.verticalLayout.addLayout(self.horizontalLayout_7) self.horizontalLayout_5 = QHBoxLayout() - self.horizontalLayout_5.setObjectName(u"horizontalLayout_5") + self.horizontalLayout_5.setObjectName("horizontalLayout_5") self.le_format_video = QLineEdit(self.gb_path) - self.le_format_video.setObjectName(u"le_format_video") + self.le_format_video.setObjectName("le_format_video") self.horizontalLayout_5.addWidget(self.le_format_video) - self.verticalLayout.addLayout(self.horizontalLayout_5) self.horizontalLayout_6 = QHBoxLayout() - self.horizontalLayout_6.setObjectName(u"horizontalLayout_6") + self.horizontalLayout_6.setObjectName("horizontalLayout_6") self.le_format_album = QLineEdit(self.gb_path) - self.le_format_album.setObjectName(u"le_format_album") + self.le_format_album.setObjectName("le_format_album") self.horizontalLayout_6.addWidget(self.le_format_album) - self.verticalLayout.addLayout(self.horizontalLayout_6) self.horizontalLayout_4 = QHBoxLayout() - self.horizontalLayout_4.setObjectName(u"horizontalLayout_4") + self.horizontalLayout_4.setObjectName("horizontalLayout_4") self.le_format_playlist = QLineEdit(self.gb_path) - self.le_format_playlist.setObjectName(u"le_format_playlist") + self.le_format_playlist.setObjectName("le_format_playlist") sizePolicy2.setHeightForWidth(self.le_format_playlist.sizePolicy().hasHeightForWidth()) self.le_format_playlist.setSizePolicy(sizePolicy2) self.horizontalLayout_4.addWidget(self.le_format_playlist) - self.verticalLayout.addLayout(self.horizontalLayout_4) self.horizontalLayout_8 = QHBoxLayout() - self.horizontalLayout_8.setObjectName(u"horizontalLayout_8") + self.horizontalLayout_8.setObjectName("horizontalLayout_8") self.le_format_mix = QLineEdit(self.gb_path) - self.le_format_mix.setObjectName(u"le_format_mix") + self.le_format_mix.setObjectName("le_format_mix") self.horizontalLayout_8.addWidget(self.le_format_mix) - self.verticalLayout.addLayout(self.horizontalLayout_8) self.horizontalLayout_3 = QHBoxLayout() - self.horizontalLayout_3.setObjectName(u"horizontalLayout_3") + self.horizontalLayout_3.setObjectName("horizontalLayout_3") self.le_path_binary_ffmpeg = QLineEdit(self.gb_path) - self.le_path_binary_ffmpeg.setObjectName(u"le_path_binary_ffmpeg") + self.le_path_binary_ffmpeg.setObjectName("le_path_binary_ffmpeg") sizePolicy2.setHeightForWidth(self.le_path_binary_ffmpeg.sizePolicy().hasHeightForWidth()) self.le_path_binary_ffmpeg.setSizePolicy(sizePolicy2) self.le_path_binary_ffmpeg.setDragEnabled(True) @@ -590,14 +556,12 @@ class Ui_DialogSettings(object): self.horizontalLayout_3.addWidget(self.le_path_binary_ffmpeg) self.pb_path_binary_ffmpeg = QPushButton(self.gb_path) - self.pb_path_binary_ffmpeg.setObjectName(u"pb_path_binary_ffmpeg") + self.pb_path_binary_ffmpeg.setObjectName("pb_path_binary_ffmpeg") self.horizontalLayout_3.addWidget(self.pb_path_binary_ffmpeg) - self.verticalLayout.addLayout(self.horizontalLayout_3) - self.horizontalLayout_2.addLayout(self.verticalLayout) self.horizontalLayout_2.setStretch(1, 50) @@ -605,69 +569,68 @@ class Ui_DialogSettings(object): self.lv_main.addWidget(self.gb_path) self.bb_dialog = QDialogButtonBox(DialogSettings) - self.bb_dialog.setObjectName(u"bb_dialog") + self.bb_dialog.setObjectName("bb_dialog") self.bb_dialog.setOrientation(Qt.Orientation.Horizontal) - self.bb_dialog.setStandardButtons(QDialogButtonBox.StandardButton.Cancel|QDialogButtonBox.StandardButton.Ok) + self.bb_dialog.setStandardButtons(QDialogButtonBox.StandardButton.Cancel | QDialogButtonBox.StandardButton.Ok) self.lv_main.addWidget(self.bb_dialog) - self.lv_dialog_settings.addLayout(self.lv_main) - self.retranslateUi(DialogSettings) self.bb_dialog.accepted.connect(DialogSettings.accept) self.bb_dialog.rejected.connect(DialogSettings.reject) QMetaObject.connectSlotsByName(DialogSettings) + # setupUi def retranslateUi(self, DialogSettings): - DialogSettings.setWindowTitle(QCoreApplication.translate("DialogSettings", u"Preferences", None)) - self.gb_flags.setTitle(QCoreApplication.translate("DialogSettings", u"Flags", None)) - self.cb_video_download.setText(QCoreApplication.translate("DialogSettings", u"CheckBox", None)) - self.cb_video_convert_mp4.setText(QCoreApplication.translate("DialogSettings", u"CheckBox", None)) -#if QT_CONFIG(whatsthis) + DialogSettings.setWindowTitle(QCoreApplication.translate("DialogSettings", "Preferences", None)) + self.gb_flags.setTitle(QCoreApplication.translate("DialogSettings", "Flags", None)) + self.cb_video_download.setText(QCoreApplication.translate("DialogSettings", "CheckBox", None)) + self.cb_video_convert_mp4.setText(QCoreApplication.translate("DialogSettings", "CheckBox", None)) + # if QT_CONFIG(whatsthis) self.cb_lyrics_embed.setWhatsThis("") -#endif // QT_CONFIG(whatsthis) - self.cb_lyrics_embed.setText(QCoreApplication.translate("DialogSettings", u"CheckBox", None)) - self.cb_lyrics_file.setText(QCoreApplication.translate("DialogSettings", u"CheckBox", None)) - self.cb_download_delay.setText(QCoreApplication.translate("DialogSettings", u"CheckBox", None)) - self.cb_extract_flac.setText(QCoreApplication.translate("DialogSettings", u"CheckBox", None)) - self.cb_metadata_cover_embed.setText(QCoreApplication.translate("DialogSettings", u"CheckBox", None)) - self.cb_cover_album_file.setText(QCoreApplication.translate("DialogSettings", u"CheckBox", None)) - self.cb_skip_existing.setText(QCoreApplication.translate("DialogSettings", u"CheckBox", None)) - self.cb_symlink_to_track.setText(QCoreApplication.translate("DialogSettings", u"CheckBox", None)) - self.cb_playlist_create.setText(QCoreApplication.translate("DialogSettings", u"CheckBox", None)) - self.cb_mark_explicit.setText(QCoreApplication.translate("DialogSettings", u"CheckBox", None)) - self.gb_choices.setTitle(QCoreApplication.translate("DialogSettings", u"Choices", None)) - self.l_icon_quality_audio.setText(QCoreApplication.translate("DialogSettings", u"TextLabel", None)) - self.l_quality_audio.setText(QCoreApplication.translate("DialogSettings", u"TextLabel", None)) - self.l_icon_quality_video.setText(QCoreApplication.translate("DialogSettings", u"TextLabel", None)) - self.l_quality_video.setText(QCoreApplication.translate("DialogSettings", u"TextLabel", None)) - self.l_icon_metadata_cover_dimension.setText(QCoreApplication.translate("DialogSettings", u"TextLabel", None)) - self.l_metadata_cover_dimension.setText(QCoreApplication.translate("DialogSettings", u"TextLabel", None)) - self.gb_numbers.setTitle(QCoreApplication.translate("DialogSettings", u"Numbers", None)) - self.l_album_track_num_pad_min.setText(QCoreApplication.translate("DialogSettings", u"TextLabel", None)) - self.l_icon_album_track_num_pad_min.setText(QCoreApplication.translate("DialogSettings", u"TextLabel", None)) - self.l_downloads_concurrent_max.setText(QCoreApplication.translate("DialogSettings", u"TextLabel", None)) - self.l_icon_downloads_concurrent_max.setText(QCoreApplication.translate("DialogSettings", u"TextLabel", None)) - self.gb_path.setTitle(QCoreApplication.translate("DialogSettings", u"Path", None)) - self.l_icon_download_base_path.setText(QCoreApplication.translate("DialogSettings", u"TextLabel", None)) - self.l_download_base_path.setText(QCoreApplication.translate("DialogSettings", u"TextLabel", None)) - self.l_icon_format_track.setText(QCoreApplication.translate("DialogSettings", u"TextLabel", None)) - self.l_format_track.setText(QCoreApplication.translate("DialogSettings", u"TextLabel", None)) - self.l_icon_format_video.setText(QCoreApplication.translate("DialogSettings", u"TextLabel", None)) - self.l_format_video.setText(QCoreApplication.translate("DialogSettings", u"TextLabel", None)) - self.l_icon_format_album.setText(QCoreApplication.translate("DialogSettings", u"TextLabel", None)) - self.l_format_album.setText(QCoreApplication.translate("DialogSettings", u"TextLabel", None)) - self.l_icon_format_playlist.setText(QCoreApplication.translate("DialogSettings", u"TextLabel", None)) - self.l_format_playlist.setText(QCoreApplication.translate("DialogSettings", u"TextLabel", None)) - self.l_icon_format_mix.setText(QCoreApplication.translate("DialogSettings", u"TextLabel", None)) - self.l_format_mix.setText(QCoreApplication.translate("DialogSettings", u"TextLabel", None)) - self.l_icon_path_binary_ffmpeg.setText(QCoreApplication.translate("DialogSettings", u"TextLabel", None)) - self.l_path_binary_ffmpeg.setText(QCoreApplication.translate("DialogSettings", u"TextLabel", None)) - self.pb_download_base_path.setText(QCoreApplication.translate("DialogSettings", u"...", None)) - self.pb_path_binary_ffmpeg.setText(QCoreApplication.translate("DialogSettings", u"...", None)) - # retranslateUi + # endif // QT_CONFIG(whatsthis) + self.cb_lyrics_embed.setText(QCoreApplication.translate("DialogSettings", "CheckBox", None)) + self.cb_lyrics_file.setText(QCoreApplication.translate("DialogSettings", "CheckBox", None)) + self.cb_download_delay.setText(QCoreApplication.translate("DialogSettings", "CheckBox", None)) + self.cb_extract_flac.setText(QCoreApplication.translate("DialogSettings", "CheckBox", None)) + self.cb_metadata_cover_embed.setText(QCoreApplication.translate("DialogSettings", "CheckBox", None)) + self.cb_cover_album_file.setText(QCoreApplication.translate("DialogSettings", "CheckBox", None)) + self.cb_skip_existing.setText(QCoreApplication.translate("DialogSettings", "CheckBox", None)) + self.cb_symlink_to_track.setText(QCoreApplication.translate("DialogSettings", "CheckBox", None)) + self.cb_playlist_create.setText(QCoreApplication.translate("DialogSettings", "CheckBox", None)) + self.cb_mark_explicit.setText(QCoreApplication.translate("DialogSettings", "CheckBox", None)) + self.gb_choices.setTitle(QCoreApplication.translate("DialogSettings", "Choices", None)) + self.l_icon_quality_audio.setText(QCoreApplication.translate("DialogSettings", "TextLabel", None)) + self.l_quality_audio.setText(QCoreApplication.translate("DialogSettings", "TextLabel", None)) + self.l_icon_quality_video.setText(QCoreApplication.translate("DialogSettings", "TextLabel", None)) + self.l_quality_video.setText(QCoreApplication.translate("DialogSettings", "TextLabel", None)) + self.l_icon_metadata_cover_dimension.setText(QCoreApplication.translate("DialogSettings", "TextLabel", None)) + self.l_metadata_cover_dimension.setText(QCoreApplication.translate("DialogSettings", "TextLabel", None)) + self.gb_numbers.setTitle(QCoreApplication.translate("DialogSettings", "Numbers", None)) + self.l_album_track_num_pad_min.setText(QCoreApplication.translate("DialogSettings", "TextLabel", None)) + self.l_icon_album_track_num_pad_min.setText(QCoreApplication.translate("DialogSettings", "TextLabel", None)) + self.l_downloads_concurrent_max.setText(QCoreApplication.translate("DialogSettings", "TextLabel", None)) + self.l_icon_downloads_concurrent_max.setText(QCoreApplication.translate("DialogSettings", "TextLabel", None)) + self.gb_path.setTitle(QCoreApplication.translate("DialogSettings", "Path", None)) + self.l_icon_download_base_path.setText(QCoreApplication.translate("DialogSettings", "TextLabel", None)) + self.l_download_base_path.setText(QCoreApplication.translate("DialogSettings", "TextLabel", None)) + self.l_icon_format_track.setText(QCoreApplication.translate("DialogSettings", "TextLabel", None)) + self.l_format_track.setText(QCoreApplication.translate("DialogSettings", "TextLabel", None)) + self.l_icon_format_video.setText(QCoreApplication.translate("DialogSettings", "TextLabel", None)) + self.l_format_video.setText(QCoreApplication.translate("DialogSettings", "TextLabel", None)) + self.l_icon_format_album.setText(QCoreApplication.translate("DialogSettings", "TextLabel", None)) + self.l_format_album.setText(QCoreApplication.translate("DialogSettings", "TextLabel", None)) + self.l_icon_format_playlist.setText(QCoreApplication.translate("DialogSettings", "TextLabel", None)) + self.l_format_playlist.setText(QCoreApplication.translate("DialogSettings", "TextLabel", None)) + self.l_icon_format_mix.setText(QCoreApplication.translate("DialogSettings", "TextLabel", None)) + self.l_format_mix.setText(QCoreApplication.translate("DialogSettings", "TextLabel", None)) + self.l_icon_path_binary_ffmpeg.setText(QCoreApplication.translate("DialogSettings", "TextLabel", None)) + self.l_path_binary_ffmpeg.setText(QCoreApplication.translate("DialogSettings", "TextLabel", None)) + self.pb_download_base_path.setText(QCoreApplication.translate("DialogSettings", "...", None)) + self.pb_path_binary_ffmpeg.setText(QCoreApplication.translate("DialogSettings", "...", None)) + # retranslateUi From aaca12cacc7cbb3e20c3c709db15164ee2330d39 Mon Sep 17 00:00:00 2001 From: Robert Honz Date: Mon, 20 Oct 2025 09:37:01 +0200 Subject: [PATCH 7/8] =?UTF-8?q?fix(gui):=20=F0=9F=90=9B=20improve=20album?= =?UTF-8?q?=20download=20action=20and=20update=20docstring?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Refactored the menu action for downloading the full album from a track. * Enhanced the docstring for `on_download_album_from_track` to clarify its functionality and error handling. --- tidal_dl_ng/gui.py | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/tidal_dl_ng/gui.py b/tidal_dl_ng/gui.py index 744cc06..d0ee637 100644 --- a/tidal_dl_ng/gui.py +++ b/tidal_dl_ng/gui.py @@ -583,11 +583,11 @@ class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow): # We build the menu. menu = QtWidgets.QMenu() - media = get_results_media_item(index, self.proxy_tr_results, self.model_tr_results) + if isinstance(media, Track) and media.album: - menu.addAction("Download Full Album", lambda: self.thread_download_album_from_track(point)) - + menu.addAction("Download Full Album", lambda: self.thread_download_album_from_track(point)) + menu.addAction("Copy Share URL", lambda: self.on_copy_url_share(self.tr_results, point)) menu.exec(self.tr_results.mapToGlobal(point)) @@ -1712,9 +1712,14 @@ class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow): """ self.thread_it(self.on_download_album_from_track, point) - def on_download_album_from_track(self, point: QtCore.QPoint) -> None: - """Gets the album from a selected track and adds it to the download queue.""" + """Adds the album associated with a selected track to the download queue. + + This method retrieves the album from a track selected in the results tree and attempts to add it to the download queue. If the album cannot be retrieved or an error occurs, a warning or error is logged. + + Args: + point (QtCore.QPoint): The point in the results tree where the user clicked. + """ index: QtCore.QModelIndex = self.tr_results.indexAt(point) media_track: Track = get_results_media_item(index, self.proxy_tr_results, self.model_tr_results) From 0afd65c89b9033a5a9505dc193699396666e16f2 Mon Sep 17 00:00:00 2001 From: Robert Honz Date: Mon, 20 Oct 2025 10:41:08 +0200 Subject: [PATCH 8/8] =?UTF-8?q?=F0=9F=8C=9F=20Version=20bumped=20to=20v0.3?= =?UTF-8?q?0.0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 4b7f2b7..0a5edae 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,7 +1,7 @@ [project] name = "tidal-dl-ng" authors = [{ name = "Robert Honz", email = "" }] -version = "0.29.0" +version = "0.30.0" description = "TIDAL Medial Downloader Next Generation!" readme = "README.md" license = "AGPL-3.0-only"