fix(gui): logging methods don't depend on log_watcher

- log_debug/info/warning/error now use _append_log directly
- Avoids AttributeError when log_watcher is None during init
- LogWatcher is only used for game events, not UI logging
This commit is contained in:
LemonNexus 2026-02-08 22:14:52 +00:00
parent e2388dadaf
commit e1316076bf
1 changed files with 21 additions and 24 deletions

View File

@ -1142,39 +1142,36 @@ class MainWindow(QMainWindow):
def log_debug(self, source: str, message: str):
"""Log a debug message."""
self.log_watcher.emit(LogEvent(
timestamp=datetime.now(),
level="DEBUG",
source=source,
message=message
))
self._append_log("DEBUG", source, message)
def log_info(self, source: str, message: str):
"""Log an info message."""
self.log_watcher.emit(LogEvent(
timestamp=datetime.now(),
level="INFO",
source=source,
message=message
))
self._append_log("INFO", source, message)
def log_warning(self, source: str, message: str):
"""Log a warning message."""
self.log_watcher.emit(LogEvent(
timestamp=datetime.now(),
level="WARNING",
source=source,
message=message
))
self._append_log("WARNING", source, message)
def log_error(self, source: str, message: str):
"""Log an error message."""
self.log_watcher.emit(LogEvent(
timestamp=datetime.now(),
level="ERROR",
source=source,
message=message
))
self._append_log("ERROR", source, message)
def _append_log(self, level: str, source: str, message: str):
"""Append log message to output."""
timestamp = datetime.now().strftime("%H:%M:%S")
color = {
"DEBUG": "#888888",
"INFO": "#4caf50",
"WARNING": "#ff9800",
"ERROR": "#f44336"
}.get(level, "#ffffff")
log_entry = f'<span style="color: #666;">[{timestamp}]</span> <span style="color: {color};">[{level}]</span> <span style="color: #aaa;">[{source}]</span> {self.escape_html(message)}'
self.log_output.append(log_entry)
# Auto-scroll to bottom
scrollbar = self.log_output.verticalScrollBar()
scrollbar.setValue(scrollbar.maximum())
def escape_html(self, text: str) -> str:
"""Escape HTML special characters."""