🚨 修复部分异常

This commit is contained in:
BTMuli
2025-12-02 00:19:11 +08:00
committed by 目棃
parent 2d1890645d
commit a12a12e786
4 changed files with 38 additions and 29 deletions

View File

@@ -75,7 +75,7 @@ pub async fn get_dir_size(path: String) -> u64 {
pub fn is_in_admin() -> bool {
#[cfg(not(target_os = "windows"))]
{
Err("This function is only supported on Windows.".into())
return Err("This function is only supported on Windows.".into());
}
use windows_sys::Win32::Foundation::HANDLE;
@@ -121,7 +121,7 @@ pub fn is_in_admin() -> bool {
pub fn run_with_admin() -> Result<(), String> {
#[cfg(not(target_os = "windows"))]
{
Err("This function is only supported on Windows.".into())
return Err("This function is only supported on Windows.".into());
}
use std::ffi::OsStr;

View File

@@ -5,13 +5,10 @@ pub mod inject;
pub mod proto;
use inject::{call_yaemain, create_named_pipe, find_module_base, inject_dll, spawn_process};
use prost::encoding::{decode_key, WireType};
use proto::parse_achi_list;
use serde_json::Value;
use std::collections::HashMap;
use std::fs::File;
use std::io;
use std::io::{Read, Write};
use std::io::{self, Read, Write};
use std::os::windows::io::{FromRawHandle, RawHandle};
use std::sync::Arc;
use tauri::{AppHandle, Emitter, Manager};
@@ -69,8 +66,9 @@ fn read_exact_vec<R: Read>(r: &mut R, len: usize) -> io::Result<Vec<u8>> {
pub fn call_yae_dll(app_handle: AppHandle, game_path: String) -> () {
#[cfg(not(target_os = "windows"))]
{
Err("This function is only supported on Windows.".into())
return Err("This function is only supported on Windows.".into());
}
let dll_path = app_handle.path().resource_dir().unwrap().join("resources/YaeAchievementLib.dll");
dbg!(&dll_path);
// 0. 创建 YaeAchievementPipe 的 命名管道,获取句柄

View File

@@ -141,7 +141,6 @@ pub fn parse_achi_list(bytes: &[u8]) -> Result<Vec<UiafAchiItem>, DecodeError> {
}
if !dict.is_empty() {
println!("Raw dict: {:?}", dict);
dicts.push(dict);
}
}

View File

@@ -5,10 +5,10 @@
<img alt="icon" src="../../assets/icons/achievements.svg" />
<span>我的成就</span>
<v-select
density="compact"
v-model="uidCur"
:hide-details="true"
:items="uidList"
density="compact"
label="存档UID"
variant="outlined"
width="200px"
@@ -19,11 +19,11 @@
<template #append>
<div class="achi-append">
<v-text-field
density="compact"
v-model="search"
:hide-details="true"
:single-line="true"
append-inner-icon="mdi-magnify"
density="compact"
label="搜索"
@keydown.enter="isSearch = true"
/>
@@ -52,10 +52,10 @@
<v-virtual-scroll :items="seriesList" class="left-wrap" item-height="60">
<template #default="{ item }">
<TuaSeries
class="left-item"
v-model:cur="selectedSeries"
:series="item"
:uid="uidCur"
class="left-item"
@click="selectedSeries = item"
/>
</template>
@@ -79,7 +79,7 @@ import TSUserAchi from "@Sqlm/userAchi.js";
import useAppStore from "@store/app.js";
import { path } from "@tauri-apps/api";
import { invoke } from "@tauri-apps/api/core";
import { listen, type UnlistenFn, type Event } from "@tauri-apps/api/event";
import { type Event, listen, type UnlistenFn } from "@tauri-apps/api/event";
import { open, save } from "@tauri-apps/plugin-dialog";
import { exists, writeTextFile } from "@tauri-apps/plugin-fs";
import { platform } from "@tauri-apps/plugin-os";
@@ -131,17 +131,14 @@ onMounted(async () => {
await handleImportOuter(route.query.app);
}
achiListener = await listen<void>("updateAchi", async () => await refreshOverview());
yaeListener = await listen<TGApp.Plugins.Yae.AchiListRes>(
"yae_achi_list",
async (e: Event<string>) => {
try {
await tryParseYaeAchi(JSON.parse(e.payload));
} catch (err) {
await TGLogger.Error(`[Achievements][yae_achi_list] 解析Yae成就数据失败: ${err}`);
showSnackbar.error(`解析Yae成就数据失败:${err}`);
}
},
);
yaeListener = await listen<string>("yae_achi_list", async (e: Event<string>) => {
try {
await tryParseYaeAchi(JSON.parse(e.payload));
} catch (err) {
await TGLogger.Error(`[Achievements][yae_achi_list] 解析Yae成就数据失败: ${err}`);
showSnackbar.error(`解析Yae成就数据失败:${err}`);
}
});
});
onUnmounted(async () => {
@@ -308,7 +305,7 @@ async function deleteUid(): Promise<void> {
async function toYae(): Promise<void> {
if (platform() !== "windows") {
showSnackbar.warn("MacOS暂不支持该功能");
showSnackbar.warn("该功能仅支持Windows系统");
return;
}
if (gameDir.value === "未设置") {
@@ -321,20 +318,35 @@ async function toYae(): Promise<void> {
return;
}
// 判断是否是管理员权限
const isAdmin = await invoke<boolean>("is_in_admin");
let isAdmin = false;
try {
isAdmin = await invoke<boolean>("is_in_admin");
} catch (err) {
showSnackbar.error("检测管理员权限失败:" + (err?.message || err));
return;
}
if (!isAdmin) {
const check = await showDialog.check("是否以管理员模式重启?", "该功能需要管理员权限才能使用");
if (!check) {
showSnackbar.cancel("已取消以管理员模式重启");
return;
}
await invoke("run_with_admin");
try {
await invoke("run_with_admin");
} catch (err) {
showSnackbar.error("以管理员模式重启失败:" + (err?.message || err));
return;
}
}
try {
await invoke("call_yae_dll", { gamePath: gamePath });
} catch (err) {
showSnackbar.error("调用Yae DLL失败" + (err?.message || err));
return;
}
await invoke("call_yae_dll", { gamePath: gamePath });
}
async function tryParseYaeAchi(payload: TGApp.Plugins.Yae.AchiListRes): Promise<void> {
console.log(typeof payload, payload);
if (payload.length === 0) {
showSnackbar.warn(`未从Yae获取到成就数据`);
return;
@@ -349,7 +361,7 @@ async function tryParseYaeAchi(payload: TGApp.Plugins.Yae.AchiListRes): Promise<
return;
}
await showLoading.start("正在导入成就数据", `UID:${input},数量:${payload.length}`);
await TSUserAchi.mergeUiaf(payload, input);
await TSUserAchi.mergeUiaf(payload, Number(input));
await showLoading.end();
showSnackbar.success("导入成功,即将刷新页面");
await TGLogger.Info("[Achievements][handleImportOuter] 导入成功");