diff --git a/src/main.py b/src/main.py index 691bc18..ba07225 100644 --- a/src/main.py +++ b/src/main.py @@ -23,10 +23,7 @@ def main(): port = config.get("server_port", 8080) host = config.get("server_ip", "0.0.0.0") upload_server = UploadServer(host=host, port=port) - upload_server.signals.photos_received.connect( - window.home_screen.notify_qr_photos, - Qt.ConnectionType.QueuedConnection - ) + upload_server.set_callback(window.home_screen.notify_qr_photos) upload_server.start() # IMAP polling (Email) diff --git a/src/services/upload_server.py b/src/services/upload_server.py index 82876e3..5152a92 100644 --- a/src/services/upload_server.py +++ b/src/services/upload_server.py @@ -279,6 +279,7 @@ class UploadServer: self.host = host self.port = port self.signals = UploadSignals() + self._callback = None self.app = Flask(__name__) self._setup_routes() self._thread = None @@ -308,10 +309,18 @@ class UploadServer: saved.append(path) if saved: - self.signals.photos_received.emit(saved) + # QTimer.singleShot est thread-safe et exécute dans le thread principal + from PyQt6.QtCore import QTimer + from functools import partial + if self._callback: + QTimer.singleShot(0, partial(self._callback, saved)) return jsonify({"ok": True, "count": len(saved)}) + def set_callback(self, callback): + """Définit le callback appelé quand des photos sont uploadées.""" + self._callback = callback + def start(self): """Démarre le serveur dans un thread daemon.""" self._thread = threading.Thread(