From 06b9c221e7f11a87b9b5e246ae5fecde3e0f0852 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Tue, 2 Sep 2025 21:58:01 +0530 Subject: [PATCH] Start live worker in viewer process Needed for live loading of AI backend modules --- src/calibre/gui2/viewer/lookup.py | 2 ++ src/calibre/gui2/viewer/ui.py | 3 +++ 2 files changed, 5 insertions(+) diff --git a/src/calibre/gui2/viewer/lookup.py b/src/calibre/gui2/viewer/lookup.py index 2ccf1a615a..0749632b5c 100644 --- a/src/calibre/gui2/viewer/lookup.py +++ b/src/calibre/gui2/viewer/lookup.py @@ -428,6 +428,8 @@ class Lookup(QTabWidget): def _activate_llm_panel(self): if self.llm_panel is None: # Deferred import to avoid circular dependencies and improve startup time; import may be redundant + from calibre.live import start_worker + start_worker() # needed for live loading of AI backends from calibre.gui2.viewer.llm import LLMPanel self.llm_panel = LLMPanel(self, viewer=self.viewer, lookup_widget=self) diff --git a/src/calibre/gui2/viewer/ui.py b/src/calibre/gui2/viewer/ui.py index 5dce5b10a4..0e52b53778 100644 --- a/src/calibre/gui2/viewer/ui.py +++ b/src/calibre/gui2/viewer/ui.py @@ -51,6 +51,7 @@ from calibre.gui2.viewer.search import SearchPanel from calibre.gui2.viewer.toc import TOC, TOCSearch, TOCView from calibre.gui2.viewer.toolbars import ActionsToolBar from calibre.gui2.viewer.web_view import WebView, get_path_for_name, set_book_path +from calibre.live import async_stop_worker from calibre.startup import connect_lambda from calibre.utils.date import utcnow from calibre.utils.img import image_from_path @@ -810,6 +811,7 @@ class EbookViewer(MainWindow): self.web_view.prepare_for_close() return self.shutting_down = True + wait_for_worker = async_stop_worker() self.search_widget.shutdown() self.web_view.shutdown() try: @@ -822,6 +824,7 @@ class EbookViewer(MainWindow): except Exception: import traceback traceback.print_exc() + wait_for_worker() self.shutdown_done = True return MainWindow.closeEvent(self, ev) # }}}