mirror of
https://github.com/darkzoul5/YoutubePlaylistSync.git
synced 2026-07-03 04:23:59 +03:00
feat: add “start minimized to tray” setting
This commit is contained in:
@@ -72,11 +72,12 @@ Queue / retry:
|
||||
- Run `ytpl-sync.exe` (GUI).
|
||||
|
||||
## Tray
|
||||
|
||||
|
||||
- The app supports minimizing to tray on close if the OS provides a system tray; use the tray icon menu to quit.
|
||||
- Tray behavior settings (Settings page):
|
||||
- `close_to_tray`: close hides to tray (keeps running).
|
||||
- `minimize_to_tray`: minimize hides to tray.
|
||||
- `start_minimized_to_tray`: start hidden in tray.
|
||||
|
||||
## Data & Layout
|
||||
|
||||
|
||||
@@ -6,7 +6,8 @@
|
||||
"ui": {
|
||||
"tray": {
|
||||
"close_to_tray": true,
|
||||
"minimize_to_tray": false
|
||||
"minimize_to_tray": false,
|
||||
"start_minimized_to_tray": false
|
||||
}
|
||||
},
|
||||
"playlists": [
|
||||
|
||||
+10
-1
@@ -115,6 +115,12 @@ class MainWindow(QtWidgets.QMainWindow):
|
||||
def _minimize_to_tray_enabled(self) -> bool:
|
||||
return bool(self._tray_config().get("minimize_to_tray", False))
|
||||
|
||||
def _start_minimized_to_tray_enabled(self) -> bool:
|
||||
return bool(self._tray_config().get("start_minimized_to_tray", False))
|
||||
|
||||
def should_start_minimized_to_tray(self) -> bool:
|
||||
return self._tray is not None and self._start_minimized_to_tray_enabled()
|
||||
|
||||
def _init_tray(self) -> None:
|
||||
# Tray support is optional and platform-dependent (e.g., some Linux DEs).
|
||||
try:
|
||||
@@ -388,7 +394,10 @@ def main() -> int:
|
||||
app.setFont(f)
|
||||
|
||||
w = MainWindow()
|
||||
w.show()
|
||||
if w.should_start_minimized_to_tray():
|
||||
w.hide()
|
||||
else:
|
||||
w.show()
|
||||
return app.exec()
|
||||
|
||||
|
||||
|
||||
@@ -58,6 +58,10 @@ class SettingsPage(QtWidgets.QWidget):
|
||||
self._minimize_to_tray.setChecked(False)
|
||||
tray_form.addRow("minimize_to_tray", self._minimize_to_tray)
|
||||
|
||||
self._start_minimized_to_tray = QtWidgets.QCheckBox()
|
||||
self._start_minimized_to_tray.setChecked(False)
|
||||
tray_form.addRow("start_minimized_to_tray", self._start_minimized_to_tray)
|
||||
|
||||
tray_box = QtWidgets.QGroupBox("Tray behavior")
|
||||
tray_box.setLayout(tray_form)
|
||||
layout.addWidget(tray_box)
|
||||
@@ -90,6 +94,7 @@ class SettingsPage(QtWidgets.QWidget):
|
||||
self._download_delay.valueChanged.connect(lambda _v: self._schedule_autosave())
|
||||
self._close_to_tray.stateChanged.connect(lambda _v: self._schedule_autosave())
|
||||
self._minimize_to_tray.stateChanged.connect(lambda _v: self._schedule_autosave())
|
||||
self._start_minimized_to_tray.stateChanged.connect(lambda _v: self._schedule_autosave())
|
||||
|
||||
def set_config_path(self, path: Path) -> None:
|
||||
self._config_path = path
|
||||
@@ -117,6 +122,7 @@ class SettingsPage(QtWidgets.QWidget):
|
||||
tray = tray if isinstance(tray, dict) else {}
|
||||
self._close_to_tray.setChecked(bool(tray.get("close_to_tray", True)))
|
||||
self._minimize_to_tray.setChecked(bool(tray.get("minimize_to_tray", False)))
|
||||
self._start_minimized_to_tray.setChecked(bool(tray.get("start_minimized_to_tray", False)))
|
||||
|
||||
self._status.setText(f"Loaded settings from {self._config_path}.")
|
||||
except Exception as exc:
|
||||
@@ -148,6 +154,7 @@ class SettingsPage(QtWidgets.QWidget):
|
||||
tray = tray if isinstance(tray, dict) else {}
|
||||
tray["close_to_tray"] = bool(self._close_to_tray.isChecked())
|
||||
tray["minimize_to_tray"] = bool(self._minimize_to_tray.isChecked())
|
||||
tray["start_minimized_to_tray"] = bool(self._start_minimized_to_tray.isChecked())
|
||||
ui["tray"] = tray
|
||||
data["ui"] = ui
|
||||
|
||||
|
||||
Reference in New Issue
Block a user