From 64597bc2f6ffefe2766d1390ab8293123d717fa4 Mon Sep 17 00:00:00 2001 From: Joshua Cantara <1975723+joshuacant@users.noreply.github.com> Date: Mon, 1 Sep 2025 13:18:50 -0400 Subject: [PATCH 1/5] double click a result row to download it --- tidal_dl_ng/gui.py | 1 + 1 file changed, 1 insertion(+) diff --git a/tidal_dl_ng/gui.py b/tidal_dl_ng/gui.py index 6263c76..e871f3b 100644 --- a/tidal_dl_ng/gui.py +++ b/tidal_dl_ng/gui.py @@ -1113,6 +1113,7 @@ class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow): # Results self.tr_results.expanded.connect(self.on_tr_results_expanded) self.tr_results.clicked.connect(self.on_result_item_clicked) + self.tr_results.doubleClicked.connect(lambda: self.thread_it(self.on_download_results)) # Download Queue self.tr_queue_download.itemClicked.connect(self.on_queue_download_item_clicked) From 4c0d78b5edc120f3ff5a651eb1e4700bad9c611c Mon Sep 17 00:00:00 2001 From: Joshua Cantara <1975723+joshuacant@users.noreply.github.com> Date: Mon, 1 Sep 2025 14:49:24 -0400 Subject: [PATCH 2/5] save and restore main window position and size --- tidal_dl_ng/gui.py | 15 ++++++++++++++- tidal_dl_ng/model/cfg.py | 4 ++++ 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/tidal_dl_ng/gui.py b/tidal_dl_ng/gui.py index e871f3b..2747f83 100644 --- a/tidal_dl_ng/gui.py +++ b/tidal_dl_ng/gui.py @@ -151,7 +151,6 @@ class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow): """ super().__init__() self.setupUi(self) - # self.setGeometry(50, 50, 500, 300) self.setWindowTitle("TIDAL Downloader Next Generation!") # Logging redirect. @@ -160,6 +159,12 @@ class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow): self.settings = Settings() + self.setGeometry( + self.settings.data.window_x, + self.settings.data.window_y, + self.settings.data.window_w, + self.settings.data.window_h, + ) self._init_threads() self._init_gui() self._init_tree_results_model(self.model_tr_results) @@ -1672,6 +1677,14 @@ class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow): Args: event (QtGui.QCloseEvent): The close event. """ + + # Save the main window size and position + self.settings.data.window_x = self.x() + self.settings.data.window_y = self.y() + self.settings.data.window_w = self.width() + self.settings.data.window_h = self.height() + self.settings.save() + self.shutdown = True handling_app: HandlingApp = HandlingApp() diff --git a/tidal_dl_ng/model/cfg.py b/tidal_dl_ng/model/cfg.py index 438e8dd..7fd3278 100644 --- a/tidal_dl_ng/model/cfg.py +++ b/tidal_dl_ng/model/cfg.py @@ -46,6 +46,10 @@ class Settings: playlist_create: bool = False metadata_replay_gain: bool = True metadata_write_url: bool = True + window_x: int = 50 + window_y: int = 50 + window_w: int = 1200 + window_h: int = 800 @dataclass_json From 3462f5a26ac034ece862ba41012dcf081159d8d1 Mon Sep 17 00:00:00 2001 From: Joshua Cantara <1975723+joshuacant@users.noreply.github.com> Date: Mon, 1 Sep 2025 15:34:29 -0400 Subject: [PATCH 3/5] set column widths dynamically based on window width --- tidal_dl_ng/gui.py | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/tidal_dl_ng/gui.py b/tidal_dl_ng/gui.py index 2747f83..aebb135 100644 --- a/tidal_dl_ng/gui.py +++ b/tidal_dl_ng/gui.py @@ -360,9 +360,15 @@ class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow): ## Styling tree.sortByColumn(0, QtCore.Qt.SortOrder.AscendingOrder) tree.setColumnHidden(1, True) - tree.setColumnWidth(2, 150) - tree.setColumnWidth(3, 150) - tree.setColumnWidth(4, 150) + normal_width = max(150, (self.width() * 0.13)) # 12% for normal fields + narrow_width = max(90, (self.width() * 0.06)) # 6% for shorter fields + skinny_width = max(60, (self.width() * 0.03)) # 3% for very short fields + tree.setColumnWidth(2, normal_width) # artist + tree.setColumnWidth(3, normal_width) # title + tree.setColumnWidth(4, normal_width) # album + tree.setColumnWidth(5, skinny_width) # duration + tree.setColumnWidth(6, narrow_width) # quality + tree.setColumnWidth(7, narrow_width) # date header.setSectionResizeMode(0, QtWidgets.QHeaderView.ResizeToContents) # Connect the contextmenu tree.setContextMenuPolicy(QtCore.Qt.CustomContextMenu) From f54d3dedcf52d937ea56072d7e3db7d9f44662e5 Mon Sep 17 00:00:00 2001 From: Joshua Cantara <1975723+joshuacant@users.noreply.github.com> Date: Mon, 8 Sep 2025 09:49:21 -0400 Subject: [PATCH 4/5] add help strings for new settings --- tidal_dl_ng/model/cfg.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/tidal_dl_ng/model/cfg.py b/tidal_dl_ng/model/cfg.py index 7fd3278..f566215 100644 --- a/tidal_dl_ng/model/cfg.py +++ b/tidal_dl_ng/model/cfg.py @@ -105,6 +105,10 @@ class HelpSettings: playlist_create: str = "Creates a '_playlist.m3u8' file for downloaded albums, playlists and mixes." metadata_replay_gain: str = "Replay gain information will be written to metadata." metadata_write_url: str = "URL of the media file will be written to metadata." + window_x: str = "X-Coordinate of saved window location." + window_y: str = "Y-Coordinate of saved window location." + window_w: str = "Width of saved window size." + window_h: str = "Height of saved window size." @dataclass_json From 060c185920c05d497c2772f9797e305abefeedb2 Mon Sep 17 00:00:00 2001 From: Joshua Cantara <1975723+joshuacant@users.noreply.github.com> Date: Mon, 8 Sep 2025 09:59:29 -0400 Subject: [PATCH 5/5] move window size and position restore into the correct function --- tidal_dl_ng/gui.py | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/tidal_dl_ng/gui.py b/tidal_dl_ng/gui.py index aebb135..1f8228d 100644 --- a/tidal_dl_ng/gui.py +++ b/tidal_dl_ng/gui.py @@ -158,13 +158,6 @@ class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow): # XStream.stderr().messageWritten.connect(self._log_output) self.settings = Settings() - - self.setGeometry( - self.settings.data.window_x, - self.settings.data.window_y, - self.settings.data.window_w, - self.settings.data.window_h, - ) self._init_threads() self._init_gui() self._init_tree_results_model(self.model_tr_results) @@ -185,6 +178,12 @@ class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow): def _init_gui(self) -> None: """Initialize GUI-specific variables and state.""" + self.setGeometry( + self.settings.data.window_x, + self.settings.data.window_y, + self.settings.data.window_w, + self.settings.data.window_h, + ) self.spinners: dict[QtWidgets.QWidget, QtWaitingSpinner] = {} def init_tidal(self, tidal: Tidal | None = None):