mirror of
https://github.com/BTMuli/TeyvatGuide.git
synced 2025-12-13 09:28:14 +08:00
@@ -1,7 +1,7 @@
|
||||
/**
|
||||
* @file utils/UIAF.ts
|
||||
* @description UIAF工具类
|
||||
* @since Beta v0.5.0
|
||||
* @since Beta v0.6.0
|
||||
*/
|
||||
|
||||
import { app } from "@tauri-apps/api";
|
||||
@@ -14,25 +14,6 @@ import { UiafSchema } from "../data/index.js";
|
||||
|
||||
import TGLogger from "./TGLogger.js";
|
||||
|
||||
/**
|
||||
* @description 根据 completed 跟 progress 获取 status
|
||||
* @since Alpha v0.1.4
|
||||
* @param {boolean} completed - 是否完成
|
||||
* @param {number} progress - 进度
|
||||
* @returns {number} status
|
||||
*/
|
||||
export function getUiafStatus(completed: boolean, progress: number): number {
|
||||
if (progress !== 0 && !completed) {
|
||||
return 1;
|
||||
} else if (progress === 0 && completed) {
|
||||
return 2;
|
||||
} else if (progress !== 0 && completed) {
|
||||
return 3;
|
||||
} else {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @description 获取 UIAF 头部信息
|
||||
* @since Beta v0.3.4
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/**
|
||||
* @file utils/dataBS.ts
|
||||
* @description 用户数据的备份、恢复、迁移
|
||||
* @since Beta v0.5.5
|
||||
* @since Beta v0.6.0
|
||||
*/
|
||||
|
||||
import { path } from "@tauri-apps/api";
|
||||
@@ -17,7 +17,7 @@ import { exportUigfData, readUigfData, verifyUigfData } from "./UIGF.js";
|
||||
|
||||
/**
|
||||
* @description 备份用户数据
|
||||
* @since Beta v0.5.0
|
||||
* @since Beta v0.6.0
|
||||
* @param {string} dir 备份目录路径
|
||||
* @returns {Promise<void>}
|
||||
*/
|
||||
@@ -26,8 +26,8 @@ export async function backUpUserData(dir: string): Promise<void> {
|
||||
console.log("备份目录不存在,创建备份目录");
|
||||
await mkdir(dir, { recursive: true });
|
||||
}
|
||||
const dataAchi = await TSUserAchi.getUIAF();
|
||||
await writeTextFile(`${dir}${path.sep()}UIAF.json`, JSON.stringify(dataAchi));
|
||||
// 备份成就
|
||||
await TSUserAchi.backupUiaf(dir);
|
||||
// 备份 ck
|
||||
const dataCK = await TGSqlite.getCookie();
|
||||
await writeTextFile(`${dir}${path.sep()}cookie.json`, JSON.stringify(dataCK));
|
||||
@@ -45,46 +45,23 @@ export async function backUpUserData(dir: string): Promise<void> {
|
||||
|
||||
/**
|
||||
* @description 恢复用户数据
|
||||
* @since Beta v0.5.5
|
||||
* @since Beta v0.6.0
|
||||
* @param {string} dir 备份目录路径
|
||||
* @returns {Promise<void>}
|
||||
*/
|
||||
export async function restoreUserData(dir: string): Promise<void> {
|
||||
let errNum = 0;
|
||||
if (!(await exists(dir))) {
|
||||
showSnackbar({
|
||||
text: "备份目录不存在",
|
||||
color: "error",
|
||||
});
|
||||
showSnackbar({ text: "备份目录不存在", color: "error" });
|
||||
return;
|
||||
}
|
||||
const filesRead = await readDir(dir);
|
||||
const files = filesRead.filter((item) => item.isFile && item.name.endsWith(".json"));
|
||||
await TGLogger.Info(`[DataBS][restoreUserData] files: ${JSON.stringify(files)}`);
|
||||
// 恢复成就数据
|
||||
const achiFind = files.find((item) => item.name === "UIAF.json");
|
||||
if (achiFind) {
|
||||
try {
|
||||
const dataAchi: TGApp.Plugins.UIAF.Achievement[] = JSON.parse(
|
||||
await readTextFile(achiFind.name),
|
||||
);
|
||||
await TSUserAchi.mergeUIAF(dataAchi);
|
||||
await TGLogger.Info(`[DataBS][restoreUserData] 成就数据恢复成功`);
|
||||
} catch (e) {
|
||||
showSnackbar({
|
||||
text: `成就数据恢复失败 ${e}`,
|
||||
color: "error",
|
||||
});
|
||||
await TGLogger.Error(`[DataBS][restoreUserData] 成就数据恢复失败 ${e}`);
|
||||
errNum++;
|
||||
}
|
||||
} else {
|
||||
showSnackbar({
|
||||
text: "成就数据恢复失败,备份文件不存在",
|
||||
color: "warn",
|
||||
});
|
||||
await TGLogger.Warn(`[DataBS][restoreUserData] 未检测到成就数据备份文件`);
|
||||
await new Promise((resolve) => setTimeout(resolve, 1500));
|
||||
const restoreAchi = await TSUserAchi.restoreUiaf(dir);
|
||||
if (!restoreAchi) {
|
||||
showSnackbar({ text: `成就数据恢复失败`, color: "error" });
|
||||
errNum++;
|
||||
}
|
||||
// 恢复 ck
|
||||
const ckFind = files.find((item) => item.name === "cookie.json");
|
||||
@@ -94,18 +71,12 @@ export async function restoreUserData(dir: string): Promise<void> {
|
||||
await TGSqlite.saveAppData("cookie", JSON.stringify(JSON.parse(dataCK)));
|
||||
await TGLogger.Info(`[DataBS][restoreUserData] Cookie 数据恢复成功`);
|
||||
} catch (e) {
|
||||
showSnackbar({
|
||||
text: `Cookie 数据恢复失败 ${e}`,
|
||||
color: "error",
|
||||
});
|
||||
showSnackbar({ text: `Cookie 数据恢复失败 ${e}`, color: "error" });
|
||||
await TGLogger.Error(`[DataBS][restoreUserData] Cookie 数据恢复失败 ${e}`);
|
||||
errNum++;
|
||||
}
|
||||
} else {
|
||||
showSnackbar({
|
||||
text: "Cookie 数据恢复失败,备份文件不存在",
|
||||
color: "warn",
|
||||
});
|
||||
showSnackbar({ text: "Cookie 数据恢复失败,备份文件不存在", color: "warn" });
|
||||
await TGLogger.Warn(`[DataBS][restoreUserData] 未检测到 Cookie 数据备份文件`);
|
||||
await new Promise((resolve) => setTimeout(resolve, 1500));
|
||||
}
|
||||
@@ -119,17 +90,11 @@ export async function restoreUserData(dir: string): Promise<void> {
|
||||
await TGSqlite.restoreAbyss(dataAbyss);
|
||||
} catch (e) {
|
||||
await TGLogger.Error(`[DataBS][restoreUserData] 深渊数据恢复失败 ${e}`);
|
||||
showSnackbar({
|
||||
text: "深渊数据恢复失败",
|
||||
color: "error",
|
||||
});
|
||||
showSnackbar({ text: "深渊数据恢复失败", color: "error" });
|
||||
errNum++;
|
||||
}
|
||||
} else {
|
||||
showSnackbar({
|
||||
text: "深渊数据恢复失败,备份文件不存在",
|
||||
color: "warn",
|
||||
});
|
||||
showSnackbar({ text: "深渊数据恢复失败,备份文件不存在", color: "warn" });
|
||||
await TGLogger.Warn(`[DataBS][restoreUserData] 未检测到深渊数据备份文件`);
|
||||
await new Promise((resolve) => setTimeout(resolve, 1500));
|
||||
}
|
||||
@@ -148,23 +113,14 @@ export async function restoreUserData(dir: string): Promise<void> {
|
||||
await TSUserGacha.mergeUIGF(uid, data.list);
|
||||
await TGLogger.Info(`[DataBS][restoreUserData] UID: ${uid} 祈愿数据恢复成功`);
|
||||
} catch (e) {
|
||||
showSnackbar({
|
||||
text: `UID: ${uid} 祈愿数据恢复失败`,
|
||||
color: "error",
|
||||
});
|
||||
showSnackbar({ text: `UID: ${uid} 祈愿数据恢复失败`, color: "error" });
|
||||
await TGLogger.Error(`[DataBS][restoreUserData] UID: ${uid} 祈愿数据恢复失败 ${e}`);
|
||||
errNum++;
|
||||
}
|
||||
}
|
||||
if (errNum === 0) {
|
||||
showSnackbar({
|
||||
text: "数据恢复成功",
|
||||
color: "success",
|
||||
});
|
||||
showSnackbar({ text: "数据恢复成功", color: "success" });
|
||||
} else {
|
||||
showSnackbar({
|
||||
text: `数据恢复失败,失败数量:${errNum}`,
|
||||
color: "error",
|
||||
});
|
||||
showSnackbar({ text: `数据恢复失败,失败数量:${errNum}`, color: "error" });
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user