2023-08-28 22:45:50 +08:00

64 lines
2.0 KiB
Python

import logging
import traceback
from arcaea_offline.database import Database
from arcaea_offline.external.arcaea.st3 import St3ScoreParser
from arcaea_offline.external.arcsong import ArcsongDbParser
from PySide6.QtCore import Slot
from PySide6.QtWidgets import QFileDialog, QMessageBox, QWidget
from ui.designer.tabs.tabDb.tabDb_Manage_ui import Ui_TabDb_Manage
logger = logging.getLogger(__name__)
class TabDb_Manage(Ui_TabDb_Manage, QWidget):
def __init__(self, parent=None):
super().__init__(parent)
self.setupUi(self)
@Slot()
def on_syncArcSongDbButton_clicked(self):
dbFile, filter = QFileDialog.getOpenFileName(
self, None, "", "DB File (*.db);;*"
)
if not dbFile:
return
try:
db = Database()
parser = ArcsongDbParser(dbFile)
with db.sessionmaker() as session:
parser.write_database(session)
session.commit()
QMessageBox.information(self, None, "OK")
except Exception as e:
logging.exception("Sync arcsong.db error")
QMessageBox.critical(
self, "Sync Error", "\n".join(traceback.format_exception(e))
)
@Slot()
def on_importSt3Button_clicked(self):
dbFile, filter = QFileDialog.getOpenFileName(self, "Select st3 file")
if not dbFile:
return
try:
db = Database()
parser = St3ScoreParser(dbFile)
logger.info(
f"Got {len(parser.parse())} items from {dbFile}, 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 st3 error")
QMessageBox.critical(
self, "Import Error", "\n".join(traceback.format_exception(e))
)