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 interface.utils.tabhelper import create_tab
from utils.general.shutdown import closehelper from utils.general.shutdown import closehelper
from utils.general.wrappers import run_thread from utils.general.wrappers import run_thread
from utils.logging.logs import log_emitter
from interface.dialogs.image import Image from interface.dialogs.image import Image
from utils.data.state import state from utils.data.state import state
@@ -68,14 +69,12 @@ class CenteredDelegate(QStyledItemDelegate):
class MainWindow(QtWidgets.QMainWindow, QWidget): class MainWindow(QtWidgets.QMainWindow, QWidget):
eventFilter = eventFilter eventFilter = eventFilter
log_signal = Signal(str)
search_results_signal = Signal(list) search_results_signal = Signal(list)
_instance = None _instance = None
def __init__(self): def __init__(self):
super().__init__() super().__init__()
MainWindow._instance = self MainWindow._instance = self
self.log_signal.connect(self._on_log_signal)
self.search_results_signal.connect(self._on_search_results) self.search_results_signal.connect(self._on_search_results)
pixmap = QPixmap() pixmap = QPixmap()
@@ -132,6 +131,7 @@ class MainWindow(QtWidgets.QMainWindow, QWidget):
self.consoleLog = QTextEdit() self.consoleLog = QTextEdit()
self.statusbar = QStatusBar() self.statusbar = QStatusBar()
log_emitter.new_log.connect(self._on_log_signal)
flush_log_buffer() flush_log_buffer()
self._tracker_elided_delegate = ElidedItemDelegate(lambda: self._tracker_hovered_row, self) 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([]) self.search_results_signal.emit([])
run_thread(threading.Thread(target=_search_thread)) 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): def _on_log_signal(self, text):
if hasattr(self, 'consoleLog'): if hasattr(self, 'consoleLog'):
self.consoleLog.append(text) self.consoleLog.append(text)
+10 -14
View File
@@ -1,4 +1,5 @@
from utils.data.models import Download, DownloadList from utils.data.models import Download, DownloadList
from PySide6.QtCore import QObject, Signal
from utils.data.state import state from utils.data.state import state
from dataclasses import asdict from dataclasses import asdict
from datetime import datetime from datetime import datetime
@@ -7,6 +8,10 @@ import time
import os import os
import re import re
class LogSignal(QObject):
new_log = Signal(str)
log_emitter = LogSignal()
def _downloads_file_path() -> str: def _downloads_file_path() -> str:
return os.path.join(state.settings_path, "downloads.json") return os.path.join(state.settings_path, "downloads.json")
@@ -189,29 +194,20 @@ def set_main_window(window):
def flush_log_buffer(): def flush_log_buffer():
with state._log_lock: 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() 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): def consoleLog(text, printAnyways = False):
now = datetime.now() now = datetime.now()
current_time = now.strftime("%H:%M:%S") current_time = now.strftime("%H:%M:%S")
formatted_text = f"[{current_time}] {text}" 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: with state._log_lock:
state.log_buffer.append(formatted_text) state.log_buffer.append(formatted_text)
log_emitter.new_log.emit(formatted_text)
if state.debug or printAnyways: if state.debug or printAnyways:
print(formatted_text) print(formatted_text)