Files
TeyvatGuide/src/utils/dataBS.ts
2025-12-24 17:17:40 +08:00

97 lines
3.2 KiB
TypeScript

/**
* 用户数据的备份、恢复、迁移
* @since Beta v0.9.0
*/
import showLoading from "@comp/func/loading.js";
import showSnackbar from "@comp/func/snackbar.js";
import TSUserAbyss from "@Sqlm/userAbyss.js";
import TSUserAccount from "@Sqlm/userAccount.js";
import TSUserAchi from "@Sqlm/userAchi.js";
import TSUserChallenge from "@Sqlm/userChallenge.js";
import TSUserCombat from "@Sqlm/userCombat.js";
import TSUserGacha from "@Sqlm/userGacha.js";
import { exists, mkdir } from "@tauri-apps/plugin-fs";
import TGLogger from "./TGLogger.js";
/**
* 备份用户数据
* @since Beta v0.9.0
* @TODO 重构祈愿部分备份&读取,处理胡桃数据&应用自身数据的导入
* @param dir - 备份目录路径
* @returns 无返回值
*/
export async function backUpUserData(dir: string): Promise<void> {
if (!(await exists(dir))) {
await TGLogger.Warn("备份数据不存在,即将创建");
await mkdir(dir, { recursive: true });
}
await showLoading.update("正在备份UIAF成就数据");
await TSUserAchi.backupUiaf(dir);
await showLoading.update("正在备份用户账户数据");
await TSUserAccount.account.backup(dir);
await showLoading.update("正在备份深渊数据");
await TSUserAbyss.backupAbyss(dir);
await showLoading.update("正在备份真境剧诗数据");
await TSUserCombat.backupCombat(dir);
await showLoading.update("正在备份幽境危战数据");
await TSUserChallenge.backupChallenge(dir);
await showLoading.update("正在备份UIGF祈愿数据");
await TSUserGacha.backUpUigf(dir);
}
/**
* 恢复用户数据
* @since Beta v0.9.0
* @param dir - 备份目录路径
* @returns 无返回值
*/
export async function restoreUserData(dir: string): Promise<void> {
let errNum = 0;
if (!(await exists(dir))) {
showSnackbar.error("备份目录不存在");
return;
}
await showLoading.update("正在恢复成就数据");
const restoreAchi = await TSUserAchi.restoreUiaf(dir);
if (!restoreAchi) {
showSnackbar.error("成就数据恢复失败");
errNum++;
}
await showLoading.update("正在恢复账号数据");
const restoreAccount = await TSUserAccount.account.restore(dir);
if (!restoreAccount) {
showSnackbar.error("Cookie 数据恢复失败");
errNum++;
}
await showLoading.update("正在恢复深渊数据");
const restoreAbyss = await TSUserAbyss.restoreAbyss(dir);
if (!restoreAbyss) {
showSnackbar.error("深渊数据恢复失败");
errNum++;
}
await showLoading.update("正在恢复真境剧诗数据");
const restoreCombat = await TSUserCombat.restoreCombat(dir);
if (!restoreCombat) {
showSnackbar.error("真境剧诗数据恢复失败");
errNum++;
}
await showLoading.update("正在恢复幽境危战数据");
const restoreChallenge = await TSUserChallenge.restoreChallenge(dir);
if (!restoreChallenge) {
showSnackbar.error("幽境危战数据恢复失败");
errNum++;
}
await showLoading.update("正在恢复祈愿数据");
const restoreGacha = await TSUserGacha.restoreUigf(dir);
if (!restoreGacha) {
showSnackbar.error("祈愿数据恢复失败");
errNum++;
}
if (errNum !== 0) {
showSnackbar.error(`数据恢复失败,失败数:${errNum}`);
return;
}
showSnackbar.success("数据恢复成功");
}