mirror of
https://github.com/283375/arcaea-offline-pyside-ui.git
synced 2025-04-16 07:40:18 +00:00
feat: import from Online
This commit is contained in:
parent
105d5c1dfb
commit
55ef2ba3bb
@ -45,21 +45,21 @@
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="6" column="0" colspan="2">
|
||||
<item row="7" column="0" colspan="2">
|
||||
<widget class="Line" name="line">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="7" column="0">
|
||||
<item row="8" column="0">
|
||||
<widget class="QPushButton" name="exportScoresButton">
|
||||
<property name="text">
|
||||
<string>exportScoresButton</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="7" column="1">
|
||||
<item row="8" column="1">
|
||||
<widget class="QLabel" name="label_3">
|
||||
<property name="text">
|
||||
<string>exportScores.description</string>
|
||||
@ -101,14 +101,14 @@
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="8" column="0">
|
||||
<item row="9" column="0">
|
||||
<widget class="QPushButton" name="exportArcsongJsonButton">
|
||||
<property name="text">
|
||||
<string>exportArcsongJsonButton</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="8" column="1">
|
||||
<item row="9" column="1">
|
||||
<widget class="QLabel" name="label_6">
|
||||
<property name="text">
|
||||
<string>exportArcsongJson.description</string>
|
||||
@ -129,6 +129,20 @@
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="6" column="0">
|
||||
<widget class="QPushButton" name="importOnlineButton">
|
||||
<property name="text">
|
||||
<string>importOnlineButton</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="6" column="1">
|
||||
<widget class="QLabel" name="label_8">
|
||||
<property name="text">
|
||||
<string>importOnline.description</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<resources/>
|
||||
|
@ -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
|
||||
|
||||
|
@ -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()
|
||||
|
@ -102,22 +102,22 @@
|
||||
<context>
|
||||
<name>DbScoreTableModel</name>
|
||||
<message>
|
||||
<location filename="../../extends/shared/models/tables/score.py" line="22"/>
|
||||
<location filename="../../extends/shared/models/tables/score.py" line="28"/>
|
||||
<source>horizontalHeader.id</source>
|
||||
<translation>ID</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../extends/shared/models/tables/score.py" line="23"/>
|
||||
<location filename="../../extends/shared/models/tables/score.py" line="29"/>
|
||||
<source>horizontalHeader.chart</source>
|
||||
<translation>Chart</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../extends/shared/models/tables/score.py" line="24"/>
|
||||
<location filename="../../extends/shared/models/tables/score.py" line="30"/>
|
||||
<source>horizontalHeader.score</source>
|
||||
<translation>Score</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../extends/shared/models/tables/score.py" line="25"/>
|
||||
<location filename="../../extends/shared/models/tables/score.py" line="31"/>
|
||||
<source>horizontalHeader.potential</source>
|
||||
<translation>Potential</translation>
|
||||
</message>
|
||||
@ -659,12 +659,12 @@ validation</translation>
|
||||
<message>
|
||||
<location filename="../../designer/tabs/tabDb/tabDb_Manage.ui" line="37"/>
|
||||
<source>importSt3Button</source>
|
||||
<translation>Import Score Database</translation>
|
||||
<translation>Import from Game Save</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../designer/tabs/tabDb/tabDb_Manage.ui" line="44"/>
|
||||
<source>importSt3.description</source>
|
||||
<translation>Import your local score database</translation>
|
||||
<translation>Import scores from your game save</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../designer/tabs/tabDb/tabDb_Manage.ui" line="58"/>
|
||||
@ -709,13 +709,23 @@ validation</translation>
|
||||
<message>
|
||||
<location filename="../../designer/tabs/tabDb/tabDb_Manage.ui" line="121"/>
|
||||
<source>importApkButton</source>
|
||||
<translation>Import APK</translation>
|
||||
<translation>Import from APK</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../designer/tabs/tabDb/tabDb_Manage.ui" line="128"/>
|
||||
<source>importApk.description</source>
|
||||
<translation>Import packlist and songlist from .apk file</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../designer/tabs/tabDb/tabDb_Manage.ui" line="135"/>
|
||||
<source>importOnlineButton</source>
|
||||
<translation>Import from Arcaea Online</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../designer/tabs/tabDb/tabDb_Manage.ui" line="142"/>
|
||||
<source>importOnline.description</source>
|
||||
<translation>Import scores from the result of Arcaea Online API</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>TabOcrDisabled</name>
|
||||
@ -871,7 +881,7 @@ validation</translation>
|
||||
<context>
|
||||
<name>TabOverview</name>
|
||||
<message>
|
||||
<location filename="../../implements/tabs/tabOverview.py" line="44"/>
|
||||
<location filename="../../implements/tabs/tabOverview.py" line="43"/>
|
||||
<source>databaseDescribeLabel {} {} {} {} {} {}</source>
|
||||
<translation>There are {} packs, {} songs, {} difficulties, {} chart info ({} complete) and {} scores in database.</translation>
|
||||
</message>
|
||||
|
@ -102,22 +102,22 @@
|
||||
<context>
|
||||
<name>DbScoreTableModel</name>
|
||||
<message>
|
||||
<location filename="../../extends/shared/models/tables/score.py" line="22"/>
|
||||
<location filename="../../extends/shared/models/tables/score.py" line="28"/>
|
||||
<source>horizontalHeader.id</source>
|
||||
<translation>ID</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../extends/shared/models/tables/score.py" line="23"/>
|
||||
<location filename="../../extends/shared/models/tables/score.py" line="29"/>
|
||||
<source>horizontalHeader.chart</source>
|
||||
<translation>谱面</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../extends/shared/models/tables/score.py" line="24"/>
|
||||
<location filename="../../extends/shared/models/tables/score.py" line="30"/>
|
||||
<source>horizontalHeader.score</source>
|
||||
<translation>分数</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../extends/shared/models/tables/score.py" line="25"/>
|
||||
<location filename="../../extends/shared/models/tables/score.py" line="31"/>
|
||||
<source>horizontalHeader.potential</source>
|
||||
<translation>单曲 PTT</translation>
|
||||
</message>
|
||||
@ -658,7 +658,7 @@
|
||||
<message>
|
||||
<location filename="../../designer/tabs/tabDb/tabDb_Manage.ui" line="37"/>
|
||||
<source>importSt3Button</source>
|
||||
<translation>导入本地存档数据库</translation>
|
||||
<translation>导入本地存档</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../designer/tabs/tabDb/tabDb_Manage.ui" line="44"/>
|
||||
@ -708,13 +708,23 @@
|
||||
<message>
|
||||
<location filename="../../designer/tabs/tabDb/tabDb_Manage.ui" line="121"/>
|
||||
<source>importApkButton</source>
|
||||
<translation>导入 APK</translation>
|
||||
<translation>从 APK 导入</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../designer/tabs/tabDb/tabDb_Manage.ui" line="128"/>
|
||||
<source>importApk.description</source>
|
||||
<translation>从 .apk 文件导入 packlist 和 songlist</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../designer/tabs/tabDb/tabDb_Manage.ui" line="135"/>
|
||||
<source>importOnlineButton</source>
|
||||
<translation>从 Arcaea Online 导入</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../designer/tabs/tabDb/tabDb_Manage.ui" line="142"/>
|
||||
<source>importOnline.description</source>
|
||||
<translation>从 Arcaea Online 的 API 结果导入分数</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>TabOcrDisabled</name>
|
||||
@ -870,7 +880,7 @@
|
||||
<context>
|
||||
<name>TabOverview</name>
|
||||
<message>
|
||||
<location filename="../../implements/tabs/tabOverview.py" line="44"/>
|
||||
<location filename="../../implements/tabs/tabOverview.py" line="43"/>
|
||||
<source>databaseDescribeLabel {} {} {} {} {} {}</source>
|
||||
<translation>数据库中有 {} 个曲包,{} 首歌曲,{} 个难度,{} 个谱面信息({} 个完整),{} 个分数记录。</translation>
|
||||
</message>
|
||||
|
Loading…
x
Reference in New Issue
Block a user