From 55ef2ba3bbbc263af22dc516d387bc067611cad6 Mon Sep 17 00:00:00 2001 From: 283375 Date: Wed, 18 Oct 2023 01:26:12 +0800 Subject: [PATCH] feat: import from Online --- ui/designer/tabs/tabDb/tabDb_Manage.ui | 24 ++++++++++++++++----- ui/designer/tabs/tabDb/tabDb_Manage_ui.py | 22 ++++++++++++++----- ui/implements/tabs/tabDb/tabDb_Manage.py | 26 +++++++++++++++++++++++ ui/resources/lang/en_US.ts | 26 ++++++++++++++++------- ui/resources/lang/zh_CN.ts | 24 +++++++++++++++------ 5 files changed, 97 insertions(+), 25 deletions(-) diff --git a/ui/designer/tabs/tabDb/tabDb_Manage.ui b/ui/designer/tabs/tabDb/tabDb_Manage.ui index c39e792..bb8f5da 100644 --- a/ui/designer/tabs/tabDb/tabDb_Manage.ui +++ b/ui/designer/tabs/tabDb/tabDb_Manage.ui @@ -45,21 +45,21 @@ - + Qt::Horizontal - + exportScoresButton - + exportScores.description @@ -101,14 +101,14 @@ - + exportArcsongJsonButton - + exportArcsongJson.description @@ -129,6 +129,20 @@ + + + + importOnlineButton + + + + + + + importOnline.description + + + diff --git a/ui/designer/tabs/tabDb/tabDb_Manage_ui.py b/ui/designer/tabs/tabDb/tabDb_Manage_ui.py index 3d192de..5ecdb9c 100644 --- a/ui/designer/tabs/tabDb/tabDb_Manage_ui.py +++ b/ui/designer/tabs/tabDb/tabDb_Manage_ui.py @@ -52,17 +52,17 @@ class Ui_TabDb_Manage(object): self.line.setFrameShape(QFrame.HLine) self.line.setFrameShadow(QFrame.Sunken) - self.formLayout.setWidget(6, QFormLayout.SpanningRole, self.line) + self.formLayout.setWidget(7, QFormLayout.SpanningRole, self.line) self.exportScoresButton = QPushButton(TabDb_Manage) self.exportScoresButton.setObjectName(u"exportScoresButton") - self.formLayout.setWidget(7, QFormLayout.LabelRole, self.exportScoresButton) + self.formLayout.setWidget(8, QFormLayout.LabelRole, self.exportScoresButton) self.label_3 = QLabel(TabDb_Manage) self.label_3.setObjectName(u"label_3") - self.formLayout.setWidget(7, QFormLayout.FieldRole, self.label_3) + self.formLayout.setWidget(8, QFormLayout.FieldRole, self.label_3) self.line_2 = QFrame(TabDb_Manage) self.line_2.setObjectName(u"line_2") @@ -94,12 +94,12 @@ class Ui_TabDb_Manage(object): self.exportArcsongJsonButton = QPushButton(TabDb_Manage) self.exportArcsongJsonButton.setObjectName(u"exportArcsongJsonButton") - self.formLayout.setWidget(8, QFormLayout.LabelRole, self.exportArcsongJsonButton) + self.formLayout.setWidget(9, QFormLayout.LabelRole, self.exportArcsongJsonButton) self.label_6 = QLabel(TabDb_Manage) self.label_6.setObjectName(u"label_6") - self.formLayout.setWidget(8, QFormLayout.FieldRole, self.label_6) + self.formLayout.setWidget(9, QFormLayout.FieldRole, self.label_6) self.importApkButton = QPushButton(TabDb_Manage) self.importApkButton.setObjectName(u"importApkButton") @@ -111,6 +111,16 @@ class Ui_TabDb_Manage(object): self.formLayout.setWidget(4, QFormLayout.FieldRole, self.label_7) + self.importOnlineButton = QPushButton(TabDb_Manage) + self.importOnlineButton.setObjectName(u"importOnlineButton") + + self.formLayout.setWidget(6, QFormLayout.LabelRole, self.importOnlineButton) + + self.label_8 = QLabel(TabDb_Manage) + self.label_8.setObjectName(u"label_8") + + self.formLayout.setWidget(6, QFormLayout.FieldRole, self.label_8) + self.retranslateUi(TabDb_Manage) @@ -132,6 +142,8 @@ class Ui_TabDb_Manage(object): self.label_6.setText(QCoreApplication.translate("TabDb_Manage", u"exportArcsongJson.description", None)) self.importApkButton.setText(QCoreApplication.translate("TabDb_Manage", u"importApkButton", None)) self.label_7.setText(QCoreApplication.translate("TabDb_Manage", u"importApk.description", None)) + self.importOnlineButton.setText(QCoreApplication.translate("TabDb_Manage", u"importOnlineButton", None)) + self.label_8.setText(QCoreApplication.translate("TabDb_Manage", u"importOnline.description", None)) pass # retranslateUi diff --git a/ui/implements/tabs/tabDb/tabDb_Manage.py b/ui/implements/tabs/tabDb/tabDb_Manage.py index c4447d0..f82139a 100644 --- a/ui/implements/tabs/tabDb/tabDb_Manage.py +++ b/ui/implements/tabs/tabDb/tabDb_Manage.py @@ -5,6 +5,7 @@ import zipfile from arcaea_offline.database import Database from arcaea_offline.external.arcaea import ( + ArcaeaOnlineParser, PacklistParser, SonglistDifficultiesParser, SonglistParser, @@ -178,6 +179,31 @@ class TabDb_Manage(Ui_TabDb_Manage, QWidget): self, "Import Error", "\n".join(traceback.format_exception(e)) ) + @Slot() + def on_importOnlineButton_clicked(self): + apiResultFile, filter = QFileDialog.getOpenFileName( + self, "Select API result JSON file" + ) + + if not apiResultFile: + return + + try: + db = Database() + parser = ArcaeaOnlineParser(apiResultFile) + logger.info( + f"Got {len(parser.parse())} items from {apiResultFile}, writing into database..." + ) + with db.sessionmaker() as session: + parser.write_database(session) + session.commit() + QMessageBox.information(self, None, "OK") + except Exception as e: + logging.exception("import Arcaea Online error") + QMessageBox.critical( + self, "Import Error", "\n".join(traceback.format_exception(e)) + ) + @Slot() def on_exportScoresButton_clicked(self): scores = Database().export_scores() diff --git a/ui/resources/lang/en_US.ts b/ui/resources/lang/en_US.ts index 291544a..d68802e 100644 --- a/ui/resources/lang/en_US.ts +++ b/ui/resources/lang/en_US.ts @@ -102,22 +102,22 @@ DbScoreTableModel - + horizontalHeader.id ID - + horizontalHeader.chart Chart - + horizontalHeader.score Score - + horizontalHeader.potential Potential @@ -659,12 +659,12 @@ validation importSt3Button - Import Score Database + Import from Game Save importSt3.description - Import your local score database + Import scores from your game save @@ -709,13 +709,23 @@ validation importApkButton - Import APK + Import from APK importApk.description Import packlist and songlist from .apk file + + + importOnlineButton + Import from Arcaea Online + + + + importOnline.description + Import scores from the result of Arcaea Online API + TabOcrDisabled @@ -871,7 +881,7 @@ validation TabOverview - + databaseDescribeLabel {} {} {} {} {} {} There are {} packs, {} songs, {} difficulties, {} chart info ({} complete) and {} scores in database. diff --git a/ui/resources/lang/zh_CN.ts b/ui/resources/lang/zh_CN.ts index 06b81c4..4c89082 100644 --- a/ui/resources/lang/zh_CN.ts +++ b/ui/resources/lang/zh_CN.ts @@ -102,22 +102,22 @@ DbScoreTableModel - + horizontalHeader.id ID - + horizontalHeader.chart 谱面 - + horizontalHeader.score 分数 - + horizontalHeader.potential 单曲 PTT @@ -658,7 +658,7 @@ importSt3Button - 导入本地存档数据库 + 导入本地存档 @@ -708,13 +708,23 @@ importApkButton - 导入 APK + 从 APK 导入 importApk.description 从 .apk 文件导入 packlist 和 songlist + + + importOnlineButton + 从 Arcaea Online 导入 + + + + importOnline.description + 从 Arcaea Online 的 API 结果导入分数 + TabOcrDisabled @@ -870,7 +880,7 @@ TabOverview - + databaseDescribeLabel {} {} {} {} {} {} 数据库中有 {} 个曲包,{} 首歌曲,{} 个难度,{} 个谱面信息({} 个完整),{} 个分数记录。