♻️ UIAF重构,支持祈愿备份/恢复

close #109
This commit is contained in:
目棃
2024-05-07 19:52:34 +08:00
parent 2803d06418
commit 2f14405cab
14 changed files with 468 additions and 235 deletions

View File

@@ -1,14 +1,12 @@
/**
* @file plugins/Sqlite/index.ts
* @description Sqlite 数据库操作类
* @since Beta v0.4.5
* @since Beta v0.4.7
*/
import { app } from "@tauri-apps/api";
import Database from "tauri-plugin-sql-api";
import { getUiafStatus } from "../../utils/UIAF";
import initDataSql from "./sql/initData";
import {
importAbyssData,
@@ -18,7 +16,6 @@ import {
insertRecordData,
insertRoleData,
} from "./sql/insertData";
import { importUIAFData } from "./sql/updateData";
class Sqlite {
/**
@@ -201,57 +198,6 @@ class Sqlite {
await this.initDB();
}
/**
* @description 获取最新成就版本
* @since Beta v0.3.3
* @returns {Promise<string>}
*/
public async getLatestAchievementVersion(): Promise<string> {
const db = await this.getDB();
const sql = "SELECT version FROM Achievements ORDER BY version DESC LIMIT 1;";
const res: Array<{ version: string }> = await db.select(sql);
return res[0].version;
}
/**
* @description 合并 UIAF 数据
* @since Beta v0.3.3
* @param {TGApp.Plugins.UIAF.Achievement[]} achievements UIAF 数据
* @returns {Promise<void>}
*/
public async mergeUIAF(achievements: TGApp.Plugins.UIAF.Achievement[]): Promise<void> {
const db = await this.getDB();
const sql = importUIAFData(achievements);
for (const item of sql) {
await db.execute(item);
}
}
/**
* @description 获取 UIAF 数据
* @since Beta v0.3.3
* @returns {Promise<TGApp.Plugins.UIAF.Achievement[]>}
*/
public async getUIAF(): Promise<TGApp.Plugins.UIAF.Achievement[]> {
const db = await this.getDB();
const sql = "SELECT * FROM Achievements WHERE isCompleted = 1 OR progress > 0";
const res: TGApp.Sqlite.Achievement.SingleTable[] = await db.select(sql);
const achievements: TGApp.Plugins.UIAF.Achievement[] = [];
for (const item of res) {
const completed = item.isCompleted === 1;
const status = getUiafStatus(completed, item.progress);
achievements.push({
id: item.id,
status,
timestamp:
completed && item.completedTime ? new Date(item.completedTime).getTime() / 1000 : 0,
current: item.progress,
});
}
return achievements;
}
/**
* @description 保存深渊数据
* @since Beta v0.3.3