mirror of
https://github.com/KeksPirates/SoftwareManager.git
synced 2026-08-03 17:39:42 +02:00
Refactor: implement log emitter for improved logging and signal handling
This commit is contained in:
@@ -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)
|
||||
|
||||
+12
-16
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user