fix desktop app and android app
This commit is contained in:
64
gui.py
64
gui.py
@@ -18,7 +18,7 @@ import signal
|
||||
from http.server import HTTPServer, BaseHTTPRequestHandler
|
||||
|
||||
from PySide6.QtCore import Qt, QThread, QObject, Signal, QUrl, QFile, QIODevice, QTimer, QMimeData, QProcess
|
||||
from PySide6.QtGui import QIcon, QAction, QPixmap, QPainter, QColor, QFont, QPen, QImage, QDesktopServices, QDrag, QClipboard
|
||||
from PySide6.QtGui import QIcon, QAction, QActionGroup, QPixmap, QPainter, QColor, QFont, QPen, QImage, QDesktopServices, QDrag, QClipboard
|
||||
from PySide6.QtNetwork import QNetworkAccessManager, QNetworkRequest, QHttpMultiPart, QHttpPart, QNetworkReply, QLocalServer, QLocalSocket
|
||||
from PySide6.QtWidgets import (
|
||||
QApplication, QSystemTrayIcon, QMenu, QDialog, QVBoxLayout, QHBoxLayout,
|
||||
@@ -688,21 +688,29 @@ class SettingsDialog(QDialog):
|
||||
self.btn_toggle_key.setText("Show")
|
||||
|
||||
def refresh_instance_combo(self):
|
||||
prev_ignore = self._ignore_instance_signals
|
||||
self._ignore_instance_signals = True
|
||||
self.cb_instance.clear()
|
||||
for inst in self.instances:
|
||||
self.cb_instance.addItem(inst.get("name", "Unnamed Instance"))
|
||||
try:
|
||||
self.cb_instance.clear()
|
||||
for inst in self.instances:
|
||||
self.cb_instance.addItem(inst.get("name", "Unnamed Instance"))
|
||||
|
||||
if 0 <= self.current_instance_index < len(self.instances):
|
||||
self.cb_instance.setCurrentIndex(self.current_instance_index)
|
||||
self._ignore_instance_signals = False
|
||||
self.load_instance_fields(self.current_instance_index)
|
||||
if 0 <= self.current_instance_index < len(self.instances):
|
||||
self.cb_instance.setCurrentIndex(self.current_instance_index)
|
||||
self.load_instance_fields(self.current_instance_index)
|
||||
finally:
|
||||
self._ignore_instance_signals = prev_ignore
|
||||
|
||||
def load_instance_fields(self, index):
|
||||
if 0 <= index < len(self.instances):
|
||||
inst = self.instances[index]
|
||||
self.txt_url.setText(inst.get("api_url", ""))
|
||||
self.txt_key.setText(inst.get("api_key", ""))
|
||||
prev_ignore = self._ignore_instance_signals
|
||||
self._ignore_instance_signals = True
|
||||
try:
|
||||
inst = self.instances[index]
|
||||
self.txt_url.setText(inst.get("api_url", ""))
|
||||
self.txt_key.setText(inst.get("api_key", ""))
|
||||
finally:
|
||||
self._ignore_instance_signals = prev_ignore
|
||||
|
||||
def on_instance_changed(self, new_index):
|
||||
if self._ignore_instance_signals or new_index < 0 or new_index >= len(self.instances):
|
||||
@@ -1715,11 +1723,11 @@ class SystemTrayApp(QObject):
|
||||
self.menu.addAction(self.abort_action)
|
||||
|
||||
settings_action = QAction("Settings...", self.menu)
|
||||
settings_action.triggered.connect(self.on_open_settings)
|
||||
settings_action.triggered.connect(lambda checked=False: self.on_open_settings())
|
||||
self.menu.addAction(settings_action)
|
||||
|
||||
gallery_action = QAction("Recent Uploads Gallery", self.menu)
|
||||
gallery_action.triggered.connect(self.on_open_gallery)
|
||||
gallery_action.triggered.connect(lambda checked=False: self.on_open_gallery())
|
||||
self.menu.addAction(gallery_action)
|
||||
|
||||
self.menu.addSeparator()
|
||||
@@ -1747,6 +1755,8 @@ class SystemTrayApp(QObject):
|
||||
|
||||
def rebuild_instance_menu(self):
|
||||
self.instance_menu.clear()
|
||||
self.instance_actions = []
|
||||
|
||||
config = get_env_config()
|
||||
instances = config.get("instances", [])
|
||||
active_idx = config.get("active_instance_index", 0)
|
||||
@@ -1754,22 +1764,27 @@ class SystemTrayApp(QObject):
|
||||
active_name = config.get("active_instance_name", "Default Instance")
|
||||
self.instance_menu.setTitle(f"Instance: {active_name}")
|
||||
|
||||
self.instance_action_group = QActionGroup(self.instance_menu)
|
||||
self.instance_action_group.setExclusive(True)
|
||||
|
||||
for idx, inst in enumerate(instances):
|
||||
name = inst.get("name", f"Instance {idx + 1}")
|
||||
url = inst.get("api_url", "")
|
||||
action = QAction(name, self.instance_menu)
|
||||
action.setCheckable(True)
|
||||
self.instance_action_group.addAction(action)
|
||||
if url:
|
||||
action.setToolTip(url)
|
||||
action.setCheckable(True)
|
||||
if idx == active_idx:
|
||||
action.setChecked(True)
|
||||
|
||||
action.triggered.connect(lambda checked=False, i=idx: self.switch_active_instance(i))
|
||||
self.instance_menu.addAction(action)
|
||||
self.instance_actions.append(action)
|
||||
|
||||
self.instance_menu.addSeparator()
|
||||
manage_action = QAction("Manage Instances...", self.instance_menu)
|
||||
manage_action.triggered.connect(self.on_open_settings)
|
||||
manage_action.triggered.connect(lambda checked=False: self.on_open_settings())
|
||||
self.instance_menu.addAction(manage_action)
|
||||
|
||||
def switch_active_instance(self, index):
|
||||
@@ -1785,8 +1800,12 @@ class SystemTrayApp(QObject):
|
||||
name = active_inst.get("name", "Instance")
|
||||
print(f"[f0ckm-gui] Switched active instance to '{name}' ({active_inst.get('api_url', '')})", flush=True)
|
||||
self.show_message("f0ckm Instance Switched", f"Active instance changed to: {name}", QSystemTrayIcon.Information)
|
||||
self.rebuild_instance_menu()
|
||||
if self.settings_dialog and self.settings_dialog.isVisible():
|
||||
|
||||
self.instance_menu.setTitle(f"Instance: {name}")
|
||||
if hasattr(self, "instance_actions") and 0 <= index < len(self.instance_actions):
|
||||
self.instance_actions[index].setChecked(True)
|
||||
|
||||
if self.settings_dialog:
|
||||
self.settings_dialog.load_current_settings()
|
||||
|
||||
def enqueue_targets(self, targets):
|
||||
@@ -1847,14 +1866,16 @@ class SystemTrayApp(QObject):
|
||||
print(f"[f0ckm-gui] Notification clicked -> Opening URL in browser: '{url}'", flush=True)
|
||||
QDesktopServices.openUrl(QUrl(url))
|
||||
|
||||
def on_open_gallery(self):
|
||||
def on_open_gallery(self, checked=False):
|
||||
if self.gallery_window is None:
|
||||
self.gallery_window = GalleryWindow()
|
||||
self.gallery_window.load_items()
|
||||
if self.gallery_window.isMinimized():
|
||||
self.gallery_window.showNormal()
|
||||
self.gallery_window.show()
|
||||
self.gallery_window.raise_()
|
||||
self.gallery_window.activateWindow()
|
||||
|
||||
|
||||
def show(self):
|
||||
self.tray.show()
|
||||
|
||||
@@ -1889,9 +1910,12 @@ class SystemTrayApp(QObject):
|
||||
|
||||
self.tray.setIcon(self.default_icon)
|
||||
|
||||
def on_open_settings(self):
|
||||
def on_open_settings(self, checked=False):
|
||||
if not self.settings_dialog:
|
||||
self.settings_dialog = SettingsDialog(tray_app=self)
|
||||
self.settings_dialog.load_current_settings()
|
||||
if self.settings_dialog.isMinimized():
|
||||
self.settings_dialog.showNormal()
|
||||
self.settings_dialog.show()
|
||||
self.settings_dialog.raise_()
|
||||
self.settings_dialog.activateWindow()
|
||||
|
||||
Reference in New Issue
Block a user