This commit is contained in:
2023-07-07 01:41:19 +08:00
commit 95da43261e
83 changed files with 7529 additions and 0 deletions

0
ui/startup/__init__.py Normal file
View File

View File

@ -0,0 +1,83 @@
import traceback
from arcaea_offline.database import Database
from PySide6.QtCore import QDir, QFile, Qt, QTimer, Slot
from PySide6.QtWidgets import QDialog, QMessageBox
from ui.extends.settings import Settings
from .databaseChecker_ui import Ui_DatabaseChecker
class DatabaseChecker(Ui_DatabaseChecker, QDialog):
def __init__(self, parent=None):
super().__init__(parent)
self.setupUi(self)
self.setWindowFlag(Qt.WindowType.WindowMinimizeButtonHint, False)
self.setWindowFlag(Qt.WindowType.WindowMaximizeButtonHint, False)
self.setWindowFlag(Qt.WindowType.WindowCloseButtonHint, True)
self.dbFileSelector.setMode(self.dbFileSelector.getExistingDirectory)
self.dbFileSelector.filesSelected.connect(self.fileSelected)
self.settings = Settings(self)
dbDir = self.settings.value("Default/DbDir", None, str)
if dbDir and QFile(QDir(dbDir).filePath(Database.dbFilename)).exists():
self.dbFileSelector.selectFile(dbDir)
result = self.checkDbVersion()
if result:
QTimer.singleShot(50, self.accept)
else:
self.dbFileSelector.selectFile(QDir.currentPath())
def fileSelected(self):
self.checkDbVersion()
def checkDbVersion(self) -> str | None:
dbQDir = QDir(self.dbFileSelector.selectedFiles()[0])
dbDir = dbQDir.absolutePath()
dbDir = self.dbFileSelector.selectedFiles()[0]
dbQFile = QFile(QDir(dbDir).filePath(Database.dbFilename))
if not dbQFile.exists():
result = QMessageBox.question(self, "Database", "Create database file now?")
if result != QMessageBox.StandardButton.Yes:
return
dbQFile.open(QFile.OpenModeFlag.WriteOnly)
dbQFile.close()
Database.dbDir = dbDir
try:
with Database().conn as conn:
version = conn.execute(
"SELECT value FROM properties WHERE key = 'db_version'"
).fetchone()[0]
self.dbVersionLabel.setText(version)
self.continueButton.setEnabled(True)
self.dbCheckConnLabel.setText('<font color="green">OK</font>')
self.settings.setValue("Default/DbDir", dbDir)
return version
except Exception as e:
QMessageBox.critical(
self, "Database Error", "\n".join(traceback.format_exception(e))
)
self.dbInitButton.setEnabled(True)
self.continueButton.setEnabled(False)
self.dbCheckConnLabel.setText('<font color="red">Error</font>')
return False
@Slot()
def on_dbInitButton_clicked(self):
try:
Database().init()
except Exception as e:
QMessageBox.critical(
self, "Database Error", "\n".join(traceback.format_exception(e))
)
finally:
self.checkDbVersion()
@Slot()
def on_continueButton_clicked(self):
self.accept()

View File

@ -0,0 +1,107 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>DatabaseChecker</class>
<widget class="QWidget" name="DatabaseChecker">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>350</width>
<height>250</height>
</rect>
</property>
<property name="windowTitle">
<string notr="true">DatabaseChecker</string>
</property>
<layout class="QFormLayout" name="formLayout">
<property name="labelAlignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
<item row="0" column="0">
<widget class="QLabel" name="label">
<property name="text">
<string>dbPathLabel</string>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="FileSelector" name="dbFileSelector" native="true"/>
</item>
<item row="1" column="0">
<widget class="QLabel" name="label_2">
<property name="text">
<string>dbVersionLabel</string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QLabel" name="dbVersionLabel">
<property name="text">
<string notr="true">-</string>
</property>
</widget>
</item>
<item row="2" column="0">
<widget class="QLabel" name="label_4">
<property name="text">
<string>dbInitLabel</string>
</property>
</widget>
</item>
<item row="4" column="0">
<widget class="QLabel" name="label_5">
<property name="text">
<string>dbCheckConnLabel</string>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="QPushButton" name="dbInitButton">
<property name="text">
<string>dbInitButton</string>
</property>
</widget>
</item>
<item row="4" column="1">
<widget class="QLabel" name="dbCheckConnLabel">
<property name="text">
<string notr="true">...</string>
</property>
</widget>
</item>
<item row="3" column="1">
<spacer name="verticalSpacer">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item>
<item row="5" column="0" colspan="2">
<widget class="QPushButton" name="continueButton">
<property name="enabled">
<bool>false</bool>
</property>
<property name="text">
<string>continueButton</string>
</property>
</widget>
</item>
</layout>
</widget>
<customwidgets>
<customwidget>
<class>FileSelector</class>
<extends>QWidget</extends>
<header>ui.implements.components.fileSelector</header>
<container>1</container>
</customwidget>
</customwidgets>
<resources/>
<connections/>
</ui>

View File

@ -0,0 +1,148 @@
# -*- coding: utf-8 -*-
################################################################################
## Form generated from reading UI file 'databaseChecker.ui'
##
## Created by: Qt User Interface Compiler version 6.5.0
##
## WARNING! All changes made in this file will be lost when recompiling UI file!
################################################################################
from PySide6.QtCore import (
QCoreApplication,
QDate,
QDateTime,
QLocale,
QMetaObject,
QObject,
QPoint,
QRect,
QSize,
Qt,
QTime,
QUrl,
)
from PySide6.QtGui import (
QBrush,
QColor,
QConicalGradient,
QCursor,
QFont,
QFontDatabase,
QGradient,
QIcon,
QImage,
QKeySequence,
QLinearGradient,
QPainter,
QPalette,
QPixmap,
QRadialGradient,
QTransform,
)
from PySide6.QtWidgets import (
QApplication,
QFormLayout,
QLabel,
QPushButton,
QSizePolicy,
QSpacerItem,
QWidget,
)
from ui.implements.components.fileSelector import FileSelector
class Ui_DatabaseChecker(object):
def setupUi(self, DatabaseChecker):
if not DatabaseChecker.objectName():
DatabaseChecker.setObjectName("DatabaseChecker")
DatabaseChecker.resize(350, 250)
DatabaseChecker.setWindowTitle("DatabaseChecker")
self.formLayout = QFormLayout(DatabaseChecker)
self.formLayout.setObjectName("formLayout")
self.formLayout.setLabelAlignment(
Qt.AlignRight | Qt.AlignTrailing | Qt.AlignVCenter
)
self.label = QLabel(DatabaseChecker)
self.label.setObjectName("label")
self.formLayout.setWidget(0, QFormLayout.LabelRole, self.label)
self.dbFileSelector = FileSelector(DatabaseChecker)
self.dbFileSelector.setObjectName("dbFileSelector")
self.formLayout.setWidget(0, QFormLayout.FieldRole, self.dbFileSelector)
self.label_2 = QLabel(DatabaseChecker)
self.label_2.setObjectName("label_2")
self.formLayout.setWidget(1, QFormLayout.LabelRole, self.label_2)
self.dbVersionLabel = QLabel(DatabaseChecker)
self.dbVersionLabel.setObjectName("dbVersionLabel")
self.dbVersionLabel.setText("-")
self.formLayout.setWidget(1, QFormLayout.FieldRole, self.dbVersionLabel)
self.label_4 = QLabel(DatabaseChecker)
self.label_4.setObjectName("label_4")
self.formLayout.setWidget(2, QFormLayout.LabelRole, self.label_4)
self.label_5 = QLabel(DatabaseChecker)
self.label_5.setObjectName("label_5")
self.formLayout.setWidget(4, QFormLayout.LabelRole, self.label_5)
self.dbInitButton = QPushButton(DatabaseChecker)
self.dbInitButton.setObjectName("dbInitButton")
self.formLayout.setWidget(2, QFormLayout.FieldRole, self.dbInitButton)
self.dbCheckConnLabel = QLabel(DatabaseChecker)
self.dbCheckConnLabel.setObjectName("dbCheckConnLabel")
self.dbCheckConnLabel.setText("...")
self.formLayout.setWidget(4, QFormLayout.FieldRole, self.dbCheckConnLabel)
self.verticalSpacer = QSpacerItem(
20, 40, QSizePolicy.Minimum, QSizePolicy.Expanding
)
self.formLayout.setItem(3, QFormLayout.FieldRole, self.verticalSpacer)
self.continueButton = QPushButton(DatabaseChecker)
self.continueButton.setObjectName("continueButton")
self.continueButton.setEnabled(False)
self.formLayout.setWidget(5, QFormLayout.SpanningRole, self.continueButton)
self.retranslateUi(DatabaseChecker)
QMetaObject.connectSlotsByName(DatabaseChecker)
# setupUi
def retranslateUi(self, DatabaseChecker):
self.label.setText(
QCoreApplication.translate("DatabaseChecker", "dbPathLabel", None)
)
self.label_2.setText(
QCoreApplication.translate("DatabaseChecker", "dbVersionLabel", None)
)
self.label_4.setText(
QCoreApplication.translate("DatabaseChecker", "dbInitLabel", None)
)
self.label_5.setText(
QCoreApplication.translate("DatabaseChecker", "dbCheckConnLabel", None)
)
self.dbInitButton.setText(
QCoreApplication.translate("DatabaseChecker", "dbInitButton", None)
)
self.continueButton.setText(
QCoreApplication.translate("DatabaseChecker", "continueButton", None)
)
pass
# retranslateUi