diff --git a/src/interface/gui.py b/src/interface/gui.py index f64d774..384bea3 100644 --- a/src/interface/gui.py +++ b/src/interface/gui.py @@ -17,6 +17,7 @@ from interface.utils.searchhelper import run_search from interface.utils.tabhelper import create_tab from utils.general.shutdown import closehelper from utils.general.wrappers import run_thread +from utils.logging.logs import log_emitter from interface.dialogs.image import Image from utils.data.state import state @@ -68,14 +69,12 @@ class CenteredDelegate(QStyledItemDelegate): class MainWindow(QtWidgets.QMainWindow, QWidget): eventFilter = eventFilter - log_signal = Signal(str) search_results_signal = Signal(list) _instance = None def __init__(self): super().__init__() MainWindow._instance = self - self.log_signal.connect(self._on_log_signal) self.search_results_signal.connect(self._on_search_results) pixmap = QPixmap() @@ -132,6 +131,7 @@ class MainWindow(QtWidgets.QMainWindow, QWidget): self.consoleLog = QTextEdit() self.statusbar = QStatusBar() + log_emitter.new_log.connect(self._on_log_signal) flush_log_buffer() self._tracker_elided_delegate = ElidedItemDelegate(lambda: self._tracker_hovered_row, self) @@ -319,13 +319,6 @@ class MainWindow(QtWidgets.QMainWindow, QWidget): self.search_results_signal.emit([]) run_thread(threading.Thread(target=_search_thread)) - @staticmethod - def add_log(text): - if hasattr(MainWindow, "_instance") and MainWindow._instance: - MainWindow._instance.log_signal.emit(text) - return True - return False - def _on_log_signal(self, text): if hasattr(self, 'consoleLog'): self.consoleLog.append(text) diff --git a/src/utils/logging/logs.py b/src/utils/logging/logs.py index f50a11d..16819df 100644 --- a/src/utils/logging/logs.py +++ b/src/utils/logging/logs.py @@ -1,4 +1,5 @@ from utils.data.models import Download, DownloadList +from PySide6.QtCore import QObject, Signal from utils.data.state import state from dataclasses import asdict from datetime import datetime @@ -7,6 +8,10 @@ import time import os import re +class LogSignal(QObject): + new_log = Signal(str) + +log_emitter = LogSignal() def _downloads_file_path() -> str: return os.path.join(state.settings_path, "downloads.json") @@ -189,29 +194,20 @@ def set_main_window(window): def flush_log_buffer(): with state._log_lock: - buffer = list(state.log_buffer) + for text in state.log_buffer: + log_emitter.new_log.emit(text) + state.log_buffer.clear() - if buffer: - try: - from interface.gui import MainWindow - for log_entry in buffer: - MainWindow.add_log(log_entry) - except Exception as e: - consoleLog(f"Exception while flushing log buffer: {e}") def consoleLog(text, printAnyways = False): now = datetime.now() current_time = now.strftime("%H:%M:%S") formatted_text = f"[{current_time}] {text}" - try: - from interface.gui import MainWindow - if not MainWindow.add_log(formatted_text): - with state._log_lock: - state.log_buffer.append(formatted_text) - except Exception: - with state._log_lock: - state.log_buffer.append(formatted_text) + with state._log_lock: + state.log_buffer.append(formatted_text) + + log_emitter.new_log.emit(formatted_text) if state.debug or printAnyways: print(formatted_text)