import logging import sys import traceback from datetime import datetime from pathlib import Path from arcaea_offline.database import Database from PySide6.QtCore import QCoreApplication, QLocale from PySide6.QtGui import QFontDatabase, QIcon from PySide6.QtWidgets import QApplication, QDialog, QMessageBox import ui.resources.resources_rc # noqa: F401 from core.settings import SettingsKeys, settings from ui.extends.shared.language import changeAppLanguage from ui.implements.mainwindow import MainWindow from ui.startup.databaseChecker import DatabaseChecker, DatabaseCheckerResult rootLogger = logging.getLogger("root") rootLogger.setLevel(logging.DEBUG) def handle_exception(exc_type, exc_value, exc_traceback): sys.__excepthook__(exc_type, exc_value, exc_traceback) if issubclass(exc_type, KeyboardInterrupt): return rootLogger.critical( "Uncaught exception", exc_info=(exc_type, exc_value, exc_traceback) ) sys.excepthook = handle_exception if __name__ == "__main__": QCoreApplication.setApplicationName("Arcaea Offline") logFolder = (Path(sys.argv[0]).parent / "logs").resolve() logFolder.mkdir(exist_ok=True) now = datetime.now() ymd = now.strftime("%Y%m%d") hms = now.strftime("%H%M%S") rootLoggerFormatter = logging.Formatter( "[%(asctime)s/%(levelname)s]%(name)s: %(message)s", "%m-%d %H:%M:%S", style="%", ) rootLoggerFileHandler = logging.FileHandler( str(logFolder / f"arcaea-offline-pyside-ui-{ymd}-{hms}_debug.log"), encoding="utf-8", ) rootLoggerFileHandler.setLevel(logging.DEBUG) rootLoggerFileHandler.setFormatter(rootLoggerFormatter) rootLogger.addHandler(rootLoggerFileHandler) rootLoggerStdOutHandler = logging.StreamHandler(sys.stdout) rootLoggerStdOutHandler.setLevel(logging.INFO) rootLoggerStdOutHandler.setFormatter(rootLoggerFormatter) rootLogger.addHandler(rootLoggerStdOutHandler) app = QApplication(sys.argv) settingsLanguage = settings.stringValue(SettingsKeys.General.Language) locale = QLocale(settingsLanguage) if settingsLanguage else QLocale.system() changeAppLanguage(locale) QFontDatabase.addApplicationFont(":/fonts/GeosansLight.ttf") databaseChecker = DatabaseChecker() databaseChecker.setWindowIcon(QIcon(":/images/icon.png")) databaseCheckResult = ( databaseChecker.confirmDb() if settings.stringValue(SettingsKeys.General.DatabaseUrl) else 0 ) if not databaseCheckResult & DatabaseCheckerResult.Initted: result = databaseChecker.exec() if result == QDialog.DialogCode.Accepted: try: Database() except Exception as e: QMessageBox.critical( None, "Database Error", "\n".join(traceback.format_exception(e)) ) sys.exit(1) else: sys.exit(1) window = MainWindow() window.setWindowIcon(QIcon(":/images/icon.png")) window.show() sys.exit(app.exec())