From 5a71a5822b90bf3cd306abdd5c40321f7099bcc5 Mon Sep 17 00:00:00 2001 From: 283375 Date: Sat, 16 Mar 2024 02:14:47 +0800 Subject: [PATCH] feat: sync chart info database --- ui/designer/tabs/tabDb/tabDb_Manage.ui | 48 +++++++++++++++-------- ui/designer/tabs/tabDb/tabDb_Manage_ui.py | 46 ++++++++++++++-------- ui/implements/tabs/tabDb/tabDb_Manage.py | 24 ++++++++++++ ui/resources/lang/en_US.ts | 10 +++++ ui/resources/lang/zh_CN.ts | 10 +++++ 5 files changed, 104 insertions(+), 34 deletions(-) diff --git a/ui/designer/tabs/tabDb/tabDb_Manage.ui b/ui/designer/tabs/tabDb/tabDb_Manage.ui index d000119..dc800d9 100644 --- a/ui/designer/tabs/tabDb/tabDb_Manage.ui +++ b/ui/designer/tabs/tabDb/tabDb_Manage.ui @@ -7,7 +7,7 @@ 0 0 580 - 521 + 551 @@ -86,7 +86,7 @@ - + @@ -99,35 +99,35 @@ - + importSt3Button - + importSt3.description - + importOnlineButton - + importOnline.description - + @@ -140,28 +140,28 @@ - + exportScoresButton - + exportScores.description - + exportSmartRteB30Button - + exportSmartRteB30.description @@ -174,7 +174,7 @@ - + @@ -187,14 +187,14 @@ - + exportArcsongJsonButton - + exportArcsongJson.description @@ -230,7 +230,7 @@ - + Qt::Vertical @@ -246,7 +246,7 @@ - + Qt::Vertical @@ -262,7 +262,7 @@ - + Qt::Vertical @@ -278,6 +278,20 @@ + + + + syncChartInfoDbButton + + + + + + + syncChartInfoDb.description + + + diff --git a/ui/designer/tabs/tabDb/tabDb_Manage_ui.py b/ui/designer/tabs/tabDb/tabDb_Manage_ui.py index 0c4cb1a..5e16751 100644 --- a/ui/designer/tabs/tabDb/tabDb_Manage_ui.py +++ b/ui/designer/tabs/tabDb/tabDb_Manage_ui.py @@ -22,7 +22,7 @@ class Ui_TabDb_Manage(object): def setupUi(self, TabDb_Manage): if not TabDb_Manage.objectName(): TabDb_Manage.setObjectName(u"TabDb_Manage") - TabDb_Manage.resize(580, 521) + TabDb_Manage.resize(580, 551) TabDb_Manage.setWindowTitle(u"TabDb_Manage") self.formLayout = QFormLayout(TabDb_Manage) self.formLayout.setObjectName(u"formLayout") @@ -80,71 +80,71 @@ class Ui_TabDb_Manage(object): self.label_12.setObjectName(u"label_12") self.label_12.setFont(font) - self.formLayout.setWidget(8, QFormLayout.SpanningRole, self.label_12) + self.formLayout.setWidget(9, QFormLayout.SpanningRole, self.label_12) self.importSt3Button = QPushButton(TabDb_Manage) self.importSt3Button.setObjectName(u"importSt3Button") - self.formLayout.setWidget(9, QFormLayout.LabelRole, self.importSt3Button) + self.formLayout.setWidget(10, QFormLayout.LabelRole, self.importSt3Button) self.label_2 = QLabel(TabDb_Manage) self.label_2.setObjectName(u"label_2") - self.formLayout.setWidget(9, QFormLayout.FieldRole, self.label_2) + self.formLayout.setWidget(10, QFormLayout.FieldRole, self.label_2) self.importOnlineButton = QPushButton(TabDb_Manage) self.importOnlineButton.setObjectName(u"importOnlineButton") - self.formLayout.setWidget(10, QFormLayout.LabelRole, self.importOnlineButton) + self.formLayout.setWidget(11, QFormLayout.LabelRole, self.importOnlineButton) self.label_8 = QLabel(TabDb_Manage) self.label_8.setObjectName(u"label_8") - self.formLayout.setWidget(10, QFormLayout.FieldRole, self.label_8) + self.formLayout.setWidget(11, QFormLayout.FieldRole, self.label_8) self.label_13 = QLabel(TabDb_Manage) self.label_13.setObjectName(u"label_13") self.label_13.setFont(font) - self.formLayout.setWidget(12, QFormLayout.SpanningRole, self.label_13) + self.formLayout.setWidget(13, QFormLayout.SpanningRole, self.label_13) self.exportScoresButton = QPushButton(TabDb_Manage) self.exportScoresButton.setObjectName(u"exportScoresButton") - self.formLayout.setWidget(13, QFormLayout.LabelRole, self.exportScoresButton) + self.formLayout.setWidget(14, QFormLayout.LabelRole, self.exportScoresButton) self.label_3 = QLabel(TabDb_Manage) self.label_3.setObjectName(u"label_3") - self.formLayout.setWidget(13, QFormLayout.FieldRole, self.label_3) + self.formLayout.setWidget(14, QFormLayout.FieldRole, self.label_3) self.exportSmartRteB30Button = QPushButton(TabDb_Manage) self.exportSmartRteB30Button.setObjectName(u"exportSmartRteB30Button") - self.formLayout.setWidget(14, QFormLayout.LabelRole, self.exportSmartRteB30Button) + self.formLayout.setWidget(15, QFormLayout.LabelRole, self.exportSmartRteB30Button) self.label_9 = QLabel(TabDb_Manage) self.label_9.setObjectName(u"label_9") self.label_9.setOpenExternalLinks(True) self.label_9.setTextInteractionFlags(Qt.LinksAccessibleByKeyboard|Qt.LinksAccessibleByMouse) - self.formLayout.setWidget(14, QFormLayout.FieldRole, self.label_9) + self.formLayout.setWidget(15, QFormLayout.FieldRole, self.label_9) self.label_14 = QLabel(TabDb_Manage) self.label_14.setObjectName(u"label_14") self.label_14.setFont(font) - self.formLayout.setWidget(16, QFormLayout.SpanningRole, self.label_14) + self.formLayout.setWidget(17, QFormLayout.SpanningRole, self.label_14) self.exportArcsongJsonButton = QPushButton(TabDb_Manage) self.exportArcsongJsonButton.setObjectName(u"exportArcsongJsonButton") - self.formLayout.setWidget(17, QFormLayout.LabelRole, self.exportArcsongJsonButton) + self.formLayout.setWidget(18, QFormLayout.LabelRole, self.exportArcsongJsonButton) self.label_6 = QLabel(TabDb_Manage) self.label_6.setObjectName(u"label_6") - self.formLayout.setWidget(17, QFormLayout.FieldRole, self.label_6) + self.formLayout.setWidget(18, QFormLayout.FieldRole, self.label_6) self.label_10 = QLabel(TabDb_Manage) self.label_10.setObjectName(u"label_10") @@ -158,15 +158,25 @@ class Ui_TabDb_Manage(object): self.verticalSpacer_2 = QSpacerItem(20, 20, QSizePolicy.Minimum, QSizePolicy.Minimum) - self.formLayout.setItem(7, QFormLayout.LabelRole, self.verticalSpacer_2) + self.formLayout.setItem(8, QFormLayout.LabelRole, self.verticalSpacer_2) self.verticalSpacer_3 = QSpacerItem(20, 20, QSizePolicy.Minimum, QSizePolicy.Minimum) - self.formLayout.setItem(11, QFormLayout.LabelRole, self.verticalSpacer_3) + self.formLayout.setItem(12, QFormLayout.LabelRole, self.verticalSpacer_3) self.verticalSpacer_4 = QSpacerItem(20, 20, QSizePolicy.Minimum, QSizePolicy.Minimum) - self.formLayout.setItem(15, QFormLayout.LabelRole, self.verticalSpacer_4) + self.formLayout.setItem(16, QFormLayout.LabelRole, self.verticalSpacer_4) + + self.syncChartInfoDbButton = QPushButton(TabDb_Manage) + self.syncChartInfoDbButton.setObjectName(u"syncChartInfoDbButton") + + self.formLayout.setWidget(7, QFormLayout.LabelRole, self.syncChartInfoDbButton) + + self.label_15 = QLabel(TabDb_Manage) + self.label_15.setObjectName(u"label_15") + + self.formLayout.setWidget(7, QFormLayout.FieldRole, self.label_15) self.retranslateUi(TabDb_Manage) @@ -198,5 +208,7 @@ class Ui_TabDb_Manage(object): self.exportArcsongJsonButton.setText(QCoreApplication.translate("TabDb_Manage", u"exportArcsongJsonButton", None)) self.label_6.setText(QCoreApplication.translate("TabDb_Manage", u"exportArcsongJson.description", None)) self.label_10.setText(QCoreApplication.translate("TabDb_Manage", u"packSongInfoGroup", None)) + self.syncChartInfoDbButton.setText(QCoreApplication.translate("TabDb_Manage", u"syncChartInfoDbButton", None)) + self.label_15.setText(QCoreApplication.translate("TabDb_Manage", u"syncChartInfoDb.description", None)) pass # retranslateUi diff --git a/ui/implements/tabs/tabDb/tabDb_Manage.py b/ui/implements/tabs/tabDb/tabDb_Manage.py index edf560f..92ff571 100644 --- a/ui/implements/tabs/tabDb/tabDb_Manage.py +++ b/ui/implements/tabs/tabDb/tabDb_Manage.py @@ -14,6 +14,7 @@ from arcaea_offline.external.arcaea import ( ) from arcaea_offline.external.arcaea.common import ArcaeaParser from arcaea_offline.external.arcsong import ArcsongDbParser +from arcaea_offline.external.chart_info_db import ChartInfoDbParser from arcaea_offline.external.smartrte import SmartRteB30CsvConverter from arcaea_offline.models import Difficulty, Pack, Song from PySide6.QtCore import QDateTime, QDir, Slot @@ -57,6 +58,29 @@ class TabDb_Manage(Ui_TabDb_Manage, QWidget): self, "Sync Error", "\n".join(traceback.format_exception(e)) ) + @Slot() + def on_syncChartInfoDbButton_clicked(self): + dbFile, filter = QFileDialog.getOpenFileName( + self, None, "", "DB File (*.db);;*" + ) + + if not dbFile: + return + + try: + db = Database() + parser = ChartInfoDbParser(dbFile) + with db.sessionmaker() as session: + parser.write_database(session) + session.commit() + databaseUpdateSignals.chartInfoUpdated.emit() + QMessageBox.information(self, None, "OK") + except Exception as e: + logging.exception("Sync chart info database error") + QMessageBox.critical( + self, "Sync Error", "\n".join(traceback.format_exception(e)) + ) + def importFromArcaeaParser( self, parser: ArcaeaParser, instance, logName, path ) -> int: diff --git a/ui/resources/lang/en_US.ts b/ui/resources/lang/en_US.ts index 21f5c38..0840599 100644 --- a/ui/resources/lang/en_US.ts +++ b/ui/resources/lang/en_US.ts @@ -716,6 +716,16 @@ validation miscGroup Miscellaneous + + + syncChartInfoDbButton + Sync Chart Info Database + + + + syncChartInfoDb.description + Update chart info + importPacklistButton diff --git a/ui/resources/lang/zh_CN.ts b/ui/resources/lang/zh_CN.ts index 55d368b..cfc4ad9 100644 --- a/ui/resources/lang/zh_CN.ts +++ b/ui/resources/lang/zh_CN.ts @@ -715,6 +715,16 @@ miscGroup 杂项 + + + syncChartInfoDbButton + 同步谱面信息数据库 + + + + syncChartInfoDb.description + 更新谱面信息 + importPacklistButton