From e7b6d81319788cfe92594c666991a5b495a814b0 Mon Sep 17 00:00:00 2001 From: Purp1e <47248616+Purple-CSGO@users.noreply.github.com> Date: Sun, 23 Mar 2025 01:08:50 +0800 Subject: [PATCH] [feat] optimization for getting cs2 path + add Toast for auto path --- bun.lockb | Bin 376518 -> 375280 bytes package.json | 3 +- src-tauri/src/cmds.rs | 4 +- src-tauri/src/steam/path.rs | 102 +++++++++++++++++++++++++---- src-tauri/src/tool/common.rs | 35 +++++++--- src/app/(main)/users/layout.tsx | 19 +----- src/app/providers.tsx | 7 +- src/components/cstb/CommonDir.tsx | 3 +- src/components/cstb/Prepare.tsx | 71 ++++++++++++-------- src/components/cstb/SteamUsers.tsx | 2 +- src/components/window/Nav.tsx | 15 +++-- src/components/window/SideBar.tsx | 4 +- 12 files changed, 184 insertions(+), 81 deletions(-) diff --git a/bun.lockb b/bun.lockb index 37bb34389b9d550cc647dd122ee80dc90db6ba8b..3517be001aec1c5db20a2bcd9e794086789befd9 100755 GIT binary patch delta 80641 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 Ij*#2`4?rgD7ytkO delta 81146 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 Result { } #[tauri::command] -pub fn get_cs_path(name: &str) -> Result { - wrap_err!(steam::path::get_cs_path(name)) +pub fn get_cs_path(name: &str, steam_dir: &str) -> Result { + wrap_err!(steam::path::get_cs_path(name, steam_dir)) } #[tauri::command] diff --git a/src-tauri/src/steam/path.rs b/src-tauri/src/steam/path.rs index f666caf..ad44004 100644 --- a/src-tauri/src/steam/path.rs +++ b/src-tauri/src/steam/path.rs @@ -3,35 +3,102 @@ // - CS2(CS:GO) Path #![allow(unused)] -use anyhow::Result; +use std::fs::{self, exists}; +use std::path::{Path, PathBuf}; + use crate::tool::common::get_exe_path; +use anyhow::Result; use super::reg; - pub fn get_steam_path() -> Result { + // Running steam.exe + #[cfg(target_os = "windows")] + if let Ok(steam_path) = get_exe_path("steam") { + // 去除结尾的 steam.exe 不区分大小写 + if let Some(parent_path) = Path::new(&steam_path).parent() { + return Ok(parent_path.to_string_lossy().to_string()); + } else { + return Err("Failed to get parent directory".into()); + } + } + // Windows Registry #[cfg(target_os = "windows")] if let Ok(reg) = reg::SteamReg::get_all() { return Ok(reg.steam_path); } - // Running steam.exe - #[cfg(target_os = "windows")] - if let Ok(steam_path) = get_exe_path("steam.exe") { - return Ok(steam_path); - } - Err("no steam path found".into()) } -pub fn get_cs_path(name: &str) -> Result { +pub fn get_cs_path(name: &str, steam_dir: &str) -> Result { if name != "csgo" && name != "cs2" { return Err("invalid cs name".into()); } + // 1. 优先检查 steam_dir 参数 + let steam_path = if steam_dir.is_empty() || !Path::new(steam_dir).exists() { + // 如果 steam_dir 不满足条件,调用 get_steam_path 获取路径 + let p = get_steam_path().map_err(|e| e.to_string())?; + PathBuf::from(p) + } else { + PathBuf::from(steam_dir) // 同样转换为PathBuf + }; + + let cs_path = steam_path + .join("steamapps\\common\\Counter-Strike Global Offensive\\game\\bin\\win64\\cs2.exe"); + if cs_path.exists() { + if let Some(parent) = cs_path.parent() { + return Ok(parent.to_string_lossy().to_string()); + } + } + + // 2. 通过注册表读取所有磁盘盘符 #[cfg(target_os = "windows")] - if let Ok(cs_path) = get_exe_path(&(name.to_owned() + ".exe")) { - return Ok(cs_path); + { + use winreg::enums::HKEY_LOCAL_MACHINE; + use winreg::RegKey; + + let hklm = RegKey::predef(HKEY_LOCAL_MACHINE); + let mounted_devices = hklm + .open_subkey("SYSTEM\\MountedDevices") + .map_err(|e| e.to_string())?; + + // 获取所有盘符 + let drives: Vec = mounted_devices + .enum_values() + .filter_map(|v| { + let (name, _) = v.ok()?; + let name = name.to_string(); + if name.starts_with("\\DosDevices\\") { + Some(name.replace("\\DosDevices\\", "")) + } else { + None + } + }) + .collect(); + + // 遍历盘符,尝试查找 cs2.exe + let cs_path_suffix = "SteamLibrary\\steamapps\\common\\Counter-Strike Global Offensive\\game\\bin\\win64\\cs2.exe"; + for drive in drives { + let cs_path = Path::new(&drive).join(cs_path_suffix); + if cs_path.exists() { + if let Some(parent) = cs_path.parent() { + return Ok(parent.to_string_lossy().to_string()); + } + } + } + } + + // 3. 查找正在运行的cs2进程 + #[cfg(target_os = "windows")] + if let Ok(cs2_path) = get_exe_path("cs2") { + // 去除结尾的 steam.exe 不区分大小写 + if let Some(parent_path) = Path::new(&cs2_path).parent() { + return Ok(parent_path.to_string_lossy().to_string()); + } else { + return Err("Failed to get parent directory".into()); + } } Err("no cs path found".into()) @@ -46,4 +113,17 @@ mod tests { let path = get_steam_path().unwrap(); println!("{}", path); } + + #[test] + fn test_get_cs_path() { + let result = get_cs_path("cs2", ""); + assert!(result.is_ok() || result.is_err()); + println!("CS2 Path: {:?}", result); + + // 使用get_steam_path给到的路径 + let steam_dir = get_steam_path().unwrap(); + let result = get_cs_path("cs2", &steam_dir); + assert!(result.is_ok() || result.is_err()); + println!("CS2 Path: {:?}", result) + } } diff --git a/src-tauri/src/tool/common.rs b/src-tauri/src/tool/common.rs index 3019caa..aa9854c 100644 --- a/src-tauri/src/tool/common.rs +++ b/src-tauri/src/tool/common.rs @@ -1,5 +1,5 @@ -use std::process::Command; use std::os::windows::process::CommandExt; +use std::process::Command; const CREATE_NO_WINDOW: u32 = 0x08000000; // const DETACHED_PROCESS: u32 = 0x00000008; @@ -21,18 +21,29 @@ pub fn run_steam() -> std::io::Result { .output() } -// FIXME wmic is deprecated + pub fn get_exe_path(name: &str) -> Result { - let command = format!("/C wmic process where name='{}' get ExecutablePath", name); + // [原理] + // Powershell 运行 Get-Process name | Select-Object path + // 有name.exe运行时返回 + // Path + // ---- + // 进程路径 + let command = format!("Get-Process {} | Select-Object path", name); let args = command.split_whitespace().collect::>(); - let output = Command::new("cmd.exe").args(&args).output()?; + let output = Command::new("powershell.exe") + .args(&args) + .creation_flags(CREATE_NO_WINDOW) + .output()?; - let out = String::from_utf8_lossy(&output.stdout).trim().to_string(); + let out = String::from_utf8_lossy(&output.stdout).to_string(); - if out.contains("ExecutablePath") { + if out.contains("Path") { + let out = out.trim(); let spt: Vec<&str> = out.split("\r\n").collect(); - if spt.len() >= 2 { - return Ok(spt[1].to_string()); + + if spt.len() > 2 { + return Ok(spt[2].to_string()); } } Err(std::io::Error::new( @@ -68,4 +79,12 @@ mod tests { println!("test open path: {}", path); open_path(path).unwrap() } + + #[test] + fn test_get_exe_path() { + let path = get_exe_path("steam").expect("failed"); + println!("test get steam path: {}", path); + + get_exe_path("not_running").expect("failed"); + } } diff --git a/src/app/(main)/users/layout.tsx b/src/app/(main)/users/layout.tsx index 80eea61..d68f9e3 100644 --- a/src/app/(main)/users/layout.tsx +++ b/src/app/(main)/users/layout.tsx @@ -1,26 +1,13 @@ "use client" import SteamUsers from "@/components/cstb/SteamUsers" -import { - Card, - CardBody, - CardHeader, - CardIcon, - CardTool, -} from "@/components/window/Card" -import { ToolButton } from "@/components/window/ToolButton" -import { cn } from "@heroui/react" -import { - AssemblyLine, HardDisk, SettingConfig, - UploadOne -} from "@icon-park/react" -import { usePathname, useRouter } from "next/navigation" +// import { usePathname, useRouter } from "next/navigation" // import { platform } from "@tauri-apps/plugin-os" export default function PreferenceLayout({ children, }: { children: React.ReactNode }) { - const router = useRouter() - const pathname = usePathname() + // const router = useRouter() + // const pathname = usePathname() return (
diff --git a/src/app/providers.tsx b/src/app/providers.tsx index b368237..85f5ec8 100644 --- a/src/app/providers.tsx +++ b/src/app/providers.tsx @@ -13,13 +13,10 @@ export default function Providers({ children }: { children: React.ReactNode }) { return ( - + {children} diff --git a/src/components/cstb/CommonDir.tsx b/src/components/cstb/CommonDir.tsx index a31167a..3afe97d 100644 --- a/src/components/cstb/CommonDir.tsx +++ b/src/components/cstb/CommonDir.tsx @@ -2,7 +2,6 @@ import { addToast } from "@heroui/react" import { FolderFocusOne } from "@icon-park/react" import { Card, CardBody, CardHeader, CardIcon } from "../window/Card" import { invoke } from "@tauri-apps/api/core" -import { configDir } from "@tauri-apps/api/path" import { useSteamStore } from "@/store/steam" import path from "path" @@ -17,7 +16,7 @@ const RoundedButton = ({ return (
@@ -160,10 +170,16 @@ export function Prepare() { steam.setCsDir(value) }} description="cs2.exe所在文件夹" - errorMessage={"路径无效"} + errorMessage={"路径无效,建议启动游戏后点击自动获取,可以检测运行中的cs2"} isInvalid={!steam.state.cs2DirValid} /> - @@ -175,16 +191,19 @@ export function Prepare() { onPress={() => void autoGetPaths()} variant="ghost" color="default" - size="sm" + size="md" className="w-24" > 自动获取 @@ -64,6 +67,8 @@ const Nav = () => { {theme === "light" ? : } + + {/* { platform() === "windows" && ( */} <>