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 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
@@ -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)
|
||||||
|
|||||||
Reference in New Issue
Block a user