From: Danilo M. Date: Sun, 3 May 2026 08:53:39 +0000 (+0200) Subject: fix: stop double stopped emit, restore race, worker leak, encapsulation, git view... X-Git-Tag: v1.0~6 X-Git-Url: https://git.danix.xyz/?a=commitdiff_plain;h=7ca865ee29ca73373349e3a82f783877e4d51ae8;p=publisher.git fix: stop double stopped emit, restore race, worker leak, encapsulation, git view init --- diff --git a/ui/git_view.py b/ui/git_view.py index 2c759e8..b5f7371 100644 --- a/ui/git_view.py +++ b/ui/git_view.py @@ -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() diff --git a/ui/hugo_panel.py b/ui/hugo_panel.py index 4305b79..fafe59c 100644 --- a/ui/hugo_panel.py +++ b/ui/hugo_panel.py @@ -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) diff --git a/ui/main_window.py b/ui/main_window.py index 4366da6..cc3326f 100644 --- a/ui/main_window.py +++ b/ui/main_window.py @@ -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) diff --git a/ui/translation_view.py b/ui/translation_view.py index 70e7ac2..6ce53dd 100644 --- a/ui/translation_view.py +++ b/ui/translation_view.py @@ -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() diff --git a/workers/hugo_worker.py b/workers/hugo_worker.py index 14bfd0b..796c925 100644 --- a/workers/hugo_worker.py +++ b/workers/hugo_worker.py @@ -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")