From 446b26f18620415b132df77fc67bc61282185bde Mon Sep 17 00:00:00 2001 From: Purp1e <47248616+Purple-CSGO@users.noreply.github.com> Date: Sat, 22 Mar 2025 21:06:20 +0800 Subject: [PATCH] [feat] power plan get and set completed --- bun.lockb | Bin 375725 -> 376518 bytes package.json | 10 ++--- src-tauri/src/cmds.rs | 6 +-- src-tauri/src/tool/powerplan.rs | 62 +++++++++++++++++++-------- src/components/cstb/PowerPlan.tsx | 69 +++++++++++++++++------------- 5 files changed, 93 insertions(+), 54 deletions(-) diff --git a/bun.lockb b/bun.lockb index f151ae546d42415ecb2c86f03c8f6e1f95e8d192..37bb34389b9d550cc647dd122ee80dc90db6ba8b 100755 GIT binary patch delta 8434 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 N(Mj_#G(4`@_Fq8mR!RT> delta 8174 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 ug~h)+zCHA}q Result<(), String> { } #[tauri::command] -pub fn get_powerplan() -> Result { +pub fn get_powerplan() -> Result { #[cfg(target_os = "windows")] let powerplan = powerplan::get_powerplan()?; @@ -57,11 +57,11 @@ pub fn get_powerplan() -> Result { } #[tauri::command] -pub fn set_powerplan(plan: &str) -> Result { +pub fn set_powerplan(plan: i32) -> Result<(), String> { #[cfg(target_os = "windows")] powerplan::set_powerplan(plan)?; - Ok(format!("Set powerplan to {}", plan)) + Ok(()) } // TODO watch_steam_users diff --git a/src-tauri/src/tool/powerplan.rs b/src-tauri/src/tool/powerplan.rs index d0fb5d7..be70f53 100644 --- a/src-tauri/src/tool/powerplan.rs +++ b/src-tauri/src/tool/powerplan.rs @@ -8,16 +8,31 @@ pub struct PowerPlan { impl PowerPlan { pub fn new() -> Self { let mut power_plan_map = HashMap::new(); - power_plan_map.insert(PowerPlanMode::PowerSaving as i32, "a1841308-3541-4fab-bc81-f71556f20b4a".to_string()); - power_plan_map.insert(PowerPlanMode::Balanced as i32, "381b4222-f694-41f0-9685-ff5bb260df2e".to_string()); - power_plan_map.insert(PowerPlanMode::HighPerformance as i32, "8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c".to_string()); - power_plan_map.insert(PowerPlanMode::Extreme as i32, "e9a42b02-d5df-448d-aa00-03f14749eb61".to_string()); + power_plan_map.insert( + PowerPlanMode::PowerSaving as i32, + "a1841308-3541-4fab-bc81-f71556f20b4a".to_string(), + ); + power_plan_map.insert( + PowerPlanMode::Balanced as i32, + "381b4222-f694-41f0-9685-ff5bb260df2e".to_string(), + ); + power_plan_map.insert( + PowerPlanMode::HighPerformance as i32, + "8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c".to_string(), + ); + power_plan_map.insert( + PowerPlanMode::Extreme as i32, + "e9a42b02-d5df-448d-aa00-03f14749eb61".to_string(), + ); PowerPlan { power_plan_map } } pub fn set(&self, mode: i32) -> Result<(), String> { - let guid = self.power_plan_map.get(&mode).ok_or("Invalid power plan number (expect from 1 to 4)")?; + let guid = self + .power_plan_map + .get(&mode) + .ok_or("Invalid power plan number (expect from 1 to 4)")?; let output = Command::new("powercfg") .arg("/S") @@ -26,7 +41,10 @@ impl PowerPlan { .map_err(|e| format!("Failed to execute powercfg command: {}", e))?; if !output.status.success() { - return Err(format!("Powercfg command failed: {}", String::from_utf8_lossy(&output.stderr))); + return Err(format!( + "Powercfg command failed: {}", + String::from_utf8_lossy(&output.stderr) + )); } Ok(()) @@ -42,8 +60,13 @@ impl PowerPlan { let re = regex::Regex::new(r"GUID:\s+(\S+)\s+\(\S+\)\s+\*") .map_err(|e| format!("Failed to compile regex: {}", e))?; - let res = re.captures(&output_str).ok_or("No matching power plan found")?; - let guid = res.get(1).ok_or("No GUID found in power plan output")?.as_str(); + let res = re + .captures(&output_str) + .ok_or("No matching power plan found")?; + let guid = res + .get(1) + .ok_or("No GUID found in power plan output")? + .as_str(); for (k, v) in &self.power_plan_map { if guid == v { @@ -64,17 +87,19 @@ pub enum PowerPlanMode { Extreme = 4, } -pub fn get_powerplan() -> Result { +pub fn get_powerplan() -> Result { let power_plan = PowerPlan::new(); let mode = power_plan.get()?; - Ok(mode.to_string()) + Ok(mode) } -pub fn set_powerplan(plan: &str) -> Result { - let mode: i32 = plan.parse().map_err(|_| "Invalid power plan number")?; +pub fn set_powerplan(plan: i32) -> Result<(), String> { + if plan < 0 || plan > 4 { + return Err("Invalid power plan mode".to_string()); + } let power_plan = PowerPlan::new(); - power_plan.set(mode)?; - Ok("Power plan set successfully".to_string()) + power_plan.set(plan)?; + Ok(()) } #[cfg(test)] @@ -103,7 +128,10 @@ mod tests { // 验证返回的模式是否在有效范围内 let mode = result.unwrap(); assert!((1..=4).contains(&mode), "Invalid power plan mode returned"); - println!("Mode: {} - {}", mode, PowerPlan::new().power_plan_map[&mode]); - + println!( + "Mode: {} - {}", + mode, + PowerPlan::new().power_plan_map[&mode] + ); } -} \ No newline at end of file +} diff --git a/src/components/cstb/PowerPlan.tsx b/src/components/cstb/PowerPlan.tsx index 9abf888..6909673 100644 --- a/src/components/cstb/PowerPlan.tsx +++ b/src/components/cstb/PowerPlan.tsx @@ -2,10 +2,16 @@ import { BatteryCharge, Refresh } from "@icon-park/react" import { invoke } from "@tauri-apps/api/core" import { Card, CardBody, CardHeader, CardIcon, CardTool } from "../window/Card" import { ToolButton } from "../window/ToolButton" -import { Tabs, Tab } from "@heroui/react" +import { Tabs, Tab, addToast } from "@heroui/react" import { Key } from "@react-types/shared" +import { useToolStore } from "@/store/tool" +import { useEffect } from "react" const PowerPlans = [ + { + id: "0", + title: "其他", + }, { id: "1", title: "节能", @@ -25,10 +31,30 @@ const PowerPlans = [ ] const PowerPlan = () => { - const handleSelectionChange = (key: Key) => { - console.log(key) + const tool = useToolStore() + const setPowerPlan = async (key: Key) => { + await tool.store.start() + const plan: number = Number(key) + + await invoke("set_powerplan", { plan: plan }) + const current = await invoke("get_powerplan") + tool.setPowerPlan(current) + + addToast({ title: "电源计划已切换 → " + PowerPlans[current].title }) } + const getPowerPlan = async (toast: boolean) => { + await tool.store.start() + const current = await invoke("get_powerplan") + tool.setPowerPlan(current) + + if (toast) addToast({ title: "电源计划已切换 → " + PowerPlans[current].title }) + } + + useEffect(() => { + void getPowerPlan(false) + }, []) + return ( @@ -36,38 +62,23 @@ const PowerPlan = () => { 电源计划 - + getPowerPlan(true)}> 刷新 - {/*
- - - -
*/} - - {PowerPlans.map((item) => ( + + {PowerPlans.slice(1).map((item) => ( ))}