mirror of
https://github.com/BTMuli/TeyvatGuide.git
synced 2026-03-26 05:39:45 +08:00
@@ -34,7 +34,7 @@ import { openUrl } from "@tauri-apps/plugin-opener";
|
||||
import TGLogger from "@utils/TGLogger.js";
|
||||
import { getWindowSize, resizeWindow } from "@utils/TGWindow.js";
|
||||
import { storeToRefs } from "pinia";
|
||||
import { computed, nextTick, onMounted, onUnmounted, ref } from "vue";
|
||||
import { computed, nextTick, onBeforeMount, onUnmounted, ref } from "vue";
|
||||
import { useRouter } from "vue-router";
|
||||
|
||||
const router = useRouter();
|
||||
@@ -53,18 +53,18 @@ let closeListener: UnlistenFn | null = null;
|
||||
let textScaleListener: UnlistenFn | null = null;
|
||||
let yaeFlag: Array<string> = [];
|
||||
|
||||
onMounted(async () => {
|
||||
onBeforeMount(async () => {
|
||||
const win = getCurrentWindow();
|
||||
isMain.value = win.label === "TeyvatGuide";
|
||||
if (isMain.value) {
|
||||
const title = "Teyvat Guide v" + (await app.getVersion()) + " Beta";
|
||||
await win.setTitle(title);
|
||||
await listenOnInit();
|
||||
await core.invoke("init_app");
|
||||
dpListener = await event.listen<string>("active_deep_link", handleDpListen);
|
||||
yaeListener = await event.listen<TGApp.Plugins.Yae.RsEvent>("yae_read", handleYaeListen);
|
||||
closeListener = await event.listen("main-window-close-requested", handleWindowClose);
|
||||
await nextTick();
|
||||
await core.invoke("init_app");
|
||||
}
|
||||
if (needResize.value !== "false") await resizeWindow();
|
||||
document.documentElement.className = theme.value;
|
||||
@@ -317,6 +317,8 @@ async function checkUserLoad(): Promise<void> {
|
||||
isLogin.value = false;
|
||||
return;
|
||||
}
|
||||
// 检测ck刷新
|
||||
await TSUserAccount.account.updateCk();
|
||||
if (!isLogin.value) isLogin.value = true;
|
||||
// 然后获取最近的UID
|
||||
if (uid.value === undefined || !uidDB.includes(uid.value)) {
|
||||
|
||||
@@ -1,8 +1,12 @@
|
||||
/**
|
||||
* 用户账户模块
|
||||
* @since Beta v0.9.0
|
||||
* @since Beta v0.9.2
|
||||
*/
|
||||
|
||||
import showLoading from "@comp/func/loading.js";
|
||||
import showSnackbar from "@comp/func/snackbar.js";
|
||||
import bbsReq from "@req/bbsReq.js";
|
||||
import passportReq from "@req/passportReq.js";
|
||||
import { path } from "@tauri-apps/api";
|
||||
import { exists, mkdir, readTextFile, writeTextFile } from "@tauri-apps/plugin-fs";
|
||||
import TGLogger from "@utils/TGLogger.js";
|
||||
@@ -136,6 +140,72 @@ async function saveAccount(data: TGApp.App.Account.User): Promise<void> {
|
||||
await db.execute(sql);
|
||||
}
|
||||
|
||||
/**
|
||||
* 检测并更新
|
||||
* @since Beta v0.9.2
|
||||
* @returns 无返回值
|
||||
*/
|
||||
async function updateAllAccountCk(): Promise<void> {
|
||||
const accounts = await getAllAccount();
|
||||
const checkTime = 5 * 24 * 3600 * 1000;
|
||||
for (const account of accounts) {
|
||||
const diffTime = Date.now() - new Date(account.updated).getTime();
|
||||
if (diffTime > checkTime) {
|
||||
const update = await updateAccountCk(account);
|
||||
if (update) {
|
||||
showSnackbar.success(`成功更新${account.uid}的Cookie`);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 更新用户Cookie
|
||||
* @since Beta v0.9.2
|
||||
* @param data - 用户信息
|
||||
* @returns 是否更新成功
|
||||
*/
|
||||
async function updateAccountCk(data: TGApp.App.Account.User): Promise<boolean> {
|
||||
await showLoading.start("正在更新用户Cookie", `UID:${data.uid},上次更新:${data.updated}`);
|
||||
const ck = data.cookie;
|
||||
await showLoading.update("正在获取 LToken");
|
||||
const ltokenRes = await passportReq.lToken.get(ck);
|
||||
if (typeof ltokenRes !== "string") {
|
||||
await showLoading.end();
|
||||
showSnackbar.error(`[${ltokenRes.retcode}]${ltokenRes.message}`);
|
||||
await TGLogger.Error(`获取LToken失败:${ltokenRes.retcode}-${ltokenRes.message}`);
|
||||
return false;
|
||||
}
|
||||
ck.ltoken = ltokenRes;
|
||||
await showLoading.update("正在获取 CookieToken");
|
||||
const cookieTokenRes = await passportReq.cookieToken(ck);
|
||||
if (typeof cookieTokenRes !== "string") {
|
||||
await showLoading.end();
|
||||
showSnackbar.error(`[${cookieTokenRes.retcode}]${cookieTokenRes.message}`);
|
||||
await TGLogger.Error(
|
||||
`获取CookieToken失败:${cookieTokenRes.retcode}-${cookieTokenRes.message}`,
|
||||
);
|
||||
return false;
|
||||
}
|
||||
ck.cookie_token = cookieTokenRes;
|
||||
await showLoading.update("正在获取用户信息");
|
||||
const briefRes = await bbsReq.userInfo(ck);
|
||||
if ("retcode" in briefRes) {
|
||||
await showLoading.end();
|
||||
showSnackbar.error(`[${briefRes.retcode}]${briefRes.message}`);
|
||||
await TGLogger.Error(`获取用户数据失败:${briefRes.retcode}-${briefRes.message}`);
|
||||
return false;
|
||||
}
|
||||
const updated = timestampToDate(new Date().getTime());
|
||||
await showLoading.update("正在写入数据库");
|
||||
const db = await TGSqlite.getDB();
|
||||
await db.execute(
|
||||
"UPDATE UserAccount SET cookie = '?' AND brief = '?' AND updated = '?' WHERE uid = '?';",
|
||||
[JSON.stringify(ck), JSON.stringify(briefRes), updated, data.uid],
|
||||
);
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* 备份用户数据
|
||||
* @since Beta v0.6.0
|
||||
@@ -311,6 +381,7 @@ const TSUserAccount = {
|
||||
getAllAccount,
|
||||
getAccount: getUserAccount,
|
||||
saveAccount,
|
||||
updateCk: updateAllAccountCk,
|
||||
copy: copyCookie,
|
||||
deleteAccount,
|
||||
backup: backUpAccount,
|
||||
|
||||
Reference in New Issue
Block a user