From ed43fb50c3052c546da3b39c9859d08a3ba402bb Mon Sep 17 00:00:00 2001 From: vorlie Date: Fri, 24 Jan 2025 12:16:09 +0100 Subject: [PATCH] Add a tray icon --- .gitignore | 3 ++- config.json | 3 ++- core/settingManager.py | 4 ++++ main.py | 26 +++++++++++++++++++++++++- 4 files changed, 33 insertions(+), 3 deletions(-) diff --git a/.gitignore b/.gitignore index 7d0bfe2..28b40b2 100644 --- a/.gitignore +++ b/.gitignore @@ -7,4 +7,5 @@ venv/ # Ignore List for Files *.log -test.py \ No newline at end of file +test.py +dummy.py \ No newline at end of file diff --git a/config.json b/config.json index aa18b10..2acc88a 100644 --- a/config.json +++ b/config.json @@ -6,5 +6,6 @@ "root_playlist_folder": "playlists", "default_playlist": "default", "colorization_color": "automatic", - "volume_percantage": 15 + "volume_percantage": 15, + "minimize_to_tray": false } \ No newline at end of file diff --git a/core/settingManager.py b/core/settingManager.py index 18cae13..2dd768b 100644 --- a/core/settingManager.py +++ b/core/settingManager.py @@ -55,6 +55,8 @@ def initUI(self): self.volume_percantage_edit.setRange(0, 100) # Set min/max range for the volume self.volume_percantage_edit.setValue(self.settings.get("volume_percantage", 100)) + self.tray_checkbox = QCheckBox("Minimize to Tray") + self.tray_checkbox.setChecked(self.settings.get("minimize_to_tray", False)) self.root_playlist_folder_edit = QLineEdit() self.root_playlist_folder_edit.setPlaceholderText("playlists") @@ -79,6 +81,7 @@ def initUI(self): self.use_system_accent_checkbox.setChecked(color == "automatic") self.use_system_accent_checkbox.stateChanged.connect(self.toggle_colorization_color) + self.general_layout.addRow(QLabel("Minimize to Tray:"), self.tray_checkbox) self.general_layout.addRow(QLabel("Volume Percentage:"), self.volume_percantage_edit) self.general_layout.addRow(QLabel("Root Playlist Folder:"), self.root_playlist_folder_edit) self.general_layout.addRow(QLabel("Default Playlist:"), self.default_playlist_edit) @@ -150,6 +153,7 @@ def save_settings(self): self.settings["discord_client_id"] = self.discord_client_id_edit.text() self.settings["large_image_key"] = self.large_image_key_edit.text() self.settings["use_playing_status"] = self.use_playing_status_edit.isChecked() + self.settings["minimize_to_tray"] = self.tray_checkbox.isChecked() # Validate volume input volume_input = self.volume_percantage_edit.text() diff --git a/main.py b/main.py index 893e8d2..6c965f0 100644 --- a/main.py +++ b/main.py @@ -1,9 +1,10 @@ import qdarktheme as qdt, sys, json, platform, logging import utils, darkdetect from time import sleep -from PyQt5.QtWidgets import QApplication +from PyQt5.QtWidgets import QApplication, QSystemTrayIcon, QMenu, QAction from PyQt5.QtCore import QObject, QThread, pyqtSignal, pyqtSlot from PyQt5.QtNetwork import QLocalServer, QLocalSocket +from PyQt5.QtGui import QIcon from core.musicPlayer import MusicPlayer from core.logger import setup_logging from config import ICON_PATH, default_settings @@ -144,6 +145,29 @@ def main(): player.adjust_volume(player.get_volume) config = load_config() color = config.get("colorization_color", "automatic") + tray_icon = QSystemTrayIcon(QIcon(ICON_PATH), app) + tray_icon.show() + tray_menu = QMenu() + + open_action = QAction("Open", tray_menu) + open_action.triggered.connect(player.show) + tray_menu.addAction(open_action) + + minimize_action = QAction("Minimize", tray_menu) + minimize_action.triggered.connect(player.hide) + tray_menu.addAction(minimize_action) + + quit_action = QAction("Quit", tray_menu) + quit_action.triggered.connect(app.quit) + tray_menu.addAction(quit_action) + + tray_icon.setContextMenu(tray_menu) + minimize_to_tray = config.get("minimize_to_tray", False) + + if minimize_to_tray: + minimize_action.triggered.connect(player.hide) + else: + minimize_action.triggered.connect(player.setVisible) def handle_color_change(normal, dark, dark_alt, light, light_alt): current_theme = darkdetect.theme().lower()