From 7ca865ee29ca73373349e3a82f783877e4d51ae8 Mon Sep 17 00:00:00 2001 From: "Danilo M." Date: Sun, 3 May 2026 10:53:39 +0200 Subject: fix: stop double stopped emit, restore race, worker leak, encapsulation, git view init --- ui/git_view.py | 3 ++- ui/hugo_panel.py | 5 ++++- ui/main_window.py | 2 +- ui/translation_view.py | 4 ++++ 4 files changed, 11 insertions(+), 3 deletions(-) (limited to 'ui') 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() -- cgit v1.2.3