fix desktop app and android app

This commit is contained in:
2026-08-13 19:22:04 +02:00
parent 9050faf0a4
commit 971f9d647e
8 changed files with 391 additions and 162 deletions

64
gui.py
View File

@@ -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()