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())