mirror of
https://github.com/blw1138/Zordon.git
synced 2026-02-05 13:46:10 +00:00
78 lines
2.1 KiB
Python
Executable File
78 lines
2.1 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
import logging
|
|
import threading
|
|
from collections import deque
|
|
|
|
from server import ZordonServer
|
|
|
|
logger = logging.getLogger()
|
|
|
|
def __setup_buffer_handler():
|
|
# lazy load GUI frameworks
|
|
from PyQt6.QtCore import QObject, pyqtSignal
|
|
|
|
class BufferingHandler(logging.Handler, QObject):
|
|
new_record = pyqtSignal(str)
|
|
flushOnClose = True
|
|
|
|
def __init__(self, capacity=100):
|
|
logging.Handler.__init__(self)
|
|
QObject.__init__(self)
|
|
self.buffer = deque(maxlen=capacity) # Define a buffer with a fixed capacity
|
|
|
|
def emit(self, record):
|
|
try:
|
|
msg = self.format(record)
|
|
self.buffer.append(msg) # Add message to the buffer
|
|
self.new_record.emit(msg) # Emit signal
|
|
except RuntimeError:
|
|
pass
|
|
|
|
def get_buffer(self):
|
|
return list(self.buffer) # Return a copy of the buffer
|
|
|
|
buffer_handler = BufferingHandler()
|
|
buffer_handler.setFormatter(logging.getLogger().handlers[0].formatter)
|
|
new_logger = logging.getLogger()
|
|
new_logger.addHandler(buffer_handler)
|
|
return buffer_handler
|
|
|
|
|
|
def __show_gui(buffer_handler):
|
|
# lazy load GUI frameworks
|
|
from PyQt6.QtWidgets import QApplication
|
|
|
|
# load application
|
|
app: QApplication = QApplication(sys.argv)
|
|
if app.style().objectName() != 'macos':
|
|
app.setStyle('Fusion')
|
|
|
|
# configure main window
|
|
from src.ui.main_window import MainWindow
|
|
window: MainWindow = MainWindow()
|
|
window.buffer_handler = buffer_handler
|
|
window.show()
|
|
|
|
exit_code = app.exec()
|
|
|
|
# cleanup: remove and close the GUI logging handler before interpreter shutdown
|
|
root_logger = logging.getLogger()
|
|
if buffer_handler in root_logger.handlers:
|
|
root_logger.removeHandler(buffer_handler)
|
|
try:
|
|
buffer_handler.close()
|
|
except Exception:
|
|
# never let logging cleanup throw during shutdown
|
|
pass
|
|
|
|
return exit_code
|
|
|
|
if __name__ == '__main__':
|
|
import sys
|
|
|
|
server = ZordonServer()
|
|
server.start_server()
|
|
__show_gui(__setup_buffer_handler())
|
|
server.stop_server()
|
|
sys.exit()
|