Refactor: implement log emitter for improved logging and signal handling

This commit is contained in:
Vxrtrauter
2026-04-16 11:51:11 +02:00
parent d5582c5c38
commit 982be09f6e
2 changed files with 14 additions and 25 deletions
+2 -9
View File
@@ -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)
+10 -14
View File
@@ -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)
log_emitter.new_log.emit(formatted_text)
if state.debug or printAnyways:
print(formatted_text)