From 702fd5ca7b243ec1dc12cca28779cf44a48124d8 Mon Sep 17 00:00:00 2001 From: pax Date: Wed, 8 Apr 2026 14:35:58 -0500 Subject: [PATCH] Move LogHandler from app.py to log_handler.py (no behavior change) Step 9 of the gui/app.py + gui/preview.py structural refactor. Pure copy: the Qt-aware logging.Handler that bridges the booru logger to the in-app QTextEdit log panel moves to its own module. app.py grows another shim line so any internal `LogHandler(...)` reference (the single one in BooruApp._setup_ui) keeps resolving through the module namespace. Shim removed in commit 14. --- booru_viewer/gui/app.py | 23 +---------------------- booru_viewer/gui/log_handler.py | 30 ++++++++++++++++++++++++++++++ 2 files changed, 31 insertions(+), 22 deletions(-) create mode 100644 booru_viewer/gui/log_handler.py diff --git a/booru_viewer/gui/app.py b/booru_viewer/gui/app.py index 28e3ca4..4de9ea6 100644 --- a/booru_viewer/gui/app.py +++ b/booru_viewer/gui/app.py @@ -51,28 +51,6 @@ from .settings import SettingsDialog log = logging.getLogger("booru") -class LogHandler(logging.Handler, QObject): - """Logging handler that emits to a QTextEdit.""" - - log_signal = Signal(str) - - def __init__(self, widget: QTextEdit) -> None: - logging.Handler.__init__(self) - QObject.__init__(self) - self._widget = widget - self.log_signal.connect(self._append) - self.setFormatter(logging.Formatter("%(asctime)s %(levelname)-5s %(message)s", datefmt="%H:%M:%S")) - - def emit(self, record: logging.LogRecord) -> None: - msg = self.format(record) - self.log_signal.emit(msg) - - def _append(self, msg: str) -> None: - self._widget.append(msg) - sb = self._widget.verticalScrollBar() - sb.setValue(sb.maximum()) - - class AsyncSignals(QObject): """Signals for async worker results.""" search_done = Signal(list) @@ -3598,3 +3576,4 @@ def run() -> None: # -- Refactor compatibility shims (deleted in commit 14) -- from .search_state import SearchState # re-export for refactor compat +from .log_handler import LogHandler # re-export for refactor compat diff --git a/booru_viewer/gui/log_handler.py b/booru_viewer/gui/log_handler.py new file mode 100644 index 0000000..36bcb85 --- /dev/null +++ b/booru_viewer/gui/log_handler.py @@ -0,0 +1,30 @@ +"""Qt-aware logging handler that emits log lines to a QTextEdit.""" + +from __future__ import annotations + +import logging + +from PySide6.QtCore import QObject, Signal +from PySide6.QtWidgets import QTextEdit + + +class LogHandler(logging.Handler, QObject): + """Logging handler that emits to a QTextEdit.""" + + log_signal = Signal(str) + + def __init__(self, widget: QTextEdit) -> None: + logging.Handler.__init__(self) + QObject.__init__(self) + self._widget = widget + self.log_signal.connect(self._append) + self.setFormatter(logging.Formatter("%(asctime)s %(levelname)-5s %(message)s", datefmt="%H:%M:%S")) + + def emit(self, record: logging.LogRecord) -> None: + msg = self.format(record) + self.log_signal.emit(msg) + + def _append(self, msg: str) -> None: + self._widget.append(msg) + sb = self._widget.verticalScrollBar() + sb.setValue(sb.maximum())