]> danix's work - publisher.git/commitdiff
fix: stop double stopped emit, restore race, worker leak, encapsulation, git view...
authorDanilo M. <redacted>
Sun, 3 May 2026 08:53:39 +0000 (10:53 +0200)
committerDanilo M. <redacted>
Sun, 3 May 2026 08:53:39 +0000 (10:53 +0200)
ui/git_view.py
ui/hugo_panel.py
ui/main_window.py
ui/translation_view.py
workers/hugo_worker.py

index 2c759e850f55b1195479e3f518f8ff04683cd234..b5f73713e5683e71f87459f520d71773c863cfb8 100644 (file)
@@ -16,6 +16,7 @@ class GitView(QWidget):
         self._repo_path = repo_path
         self._worker: GitWorker | None = None
         self._build_ui()
+        self.load_status()
 
     def _build_ui(self):
         layout = QVBoxLayout(self)
@@ -130,5 +131,5 @@ class GitView(QWidget):
             return
         commit_hash, rel_path = item.data(256)
         worker = GitWorker.restore_article(self._repo_path, commit_hash, rel_path, self)
+        worker.finished.connect(lambda ok: self.load_status() if ok else None)
         self._run_worker(worker)
-        self.load_status()
index 4305b79d8b00f9ac2b56a2379981ff320ab546c9..fafe59cb0c64a31918e8fa6d33bcd9aa4427c3ac 100644 (file)
@@ -66,6 +66,9 @@ class HugoPanel(QWidget):
         self._stop_btn.setEnabled(False)
         self._url_btn.setVisible(False)
 
-    def closeEvent(self, event):
+    def stop_server(self):
         self._worker.stop()
+
+    def closeEvent(self, event):
+        self.stop_server()
         super().closeEvent(event)
index 4366da6f841d6dcaa80324fbc33cc05faab4e66d..cc3326f54ebec41acdfdab5828ca458e4046d375 100644 (file)
@@ -267,5 +267,5 @@ class MainWindow(QMainWindow):
         self._refresh_articles()
 
     def closeEvent(self, event):
-        self._hugo_panel._worker.stop()
+        self._hugo_panel.stop_server()
         super().closeEvent(event)
index 70e7ac2e5d4de707dc0adc5fa64d854dc49f4194..6ce53ddc7b44fb41a3e949080dfc2023dd783679 100644 (file)
@@ -71,6 +71,10 @@ class TranslationView(QWidget):
         layout.addWidget(self._action_bar)
 
     def start_translation(self, article: Article):
+        if self._worker is not None:
+            self._worker.log_line.disconnect()
+            self._worker.finished.disconnect()
+            self._worker.error.disconnect()
         self._article = article
         self._log.clear()
         self._preview.clear()
index 14bfd0b1b9ca7a27ddc2ee7f6ad5c748f127f901..796c925ff1418bb13192d973ec782591bc217cc8 100644 (file)
@@ -31,7 +31,7 @@ class HugoWorker(QObject):
         if self.is_running:
             self._process.terminate()
             self._process.waitForFinished(3000)
-            self.stopped.emit()
+            # stopped emitted by _on_finished; don't double-emit
 
     def _on_stdout(self):
         data = self._process.readAllStandardOutput().data().decode("utf-8", errors="replace")