diff --git a/src-tauri/src/core/manager.rs b/src-tauri/src/core/manager.rs index fdb92696..781308a8 100644 --- a/src-tauri/src/core/manager.rs +++ b/src-tauri/src/core/manager.rs @@ -1,5 +1,3 @@ -use std::borrow::Cow; - /// 给clash内核的tun模式授权 #[cfg(any(target_os = "macos", target_os = "linux"))] pub fn grant_permission(core: String) -> anyhow::Result<()> { @@ -13,9 +11,6 @@ pub fn grant_permission(core: String) -> anyhow::Result<()> { #[cfg(target_os = "macos")] let output = { - // the path of clash /Applications/Clash Verge.app/Contents/MacOS/clash - // https://apple.stackexchange.com/questions/82967/problem-with-empty-spaces-when-executing-shell-commands-in-applescript - // let path = escape(&path); let path = path.replace(' ', "\\\\ "); let shell = format!("chown root:admin {path}\nchmod +sx {path}"); let command = format!(r#"do shell script "{shell}" with administrator privileges"#); @@ -50,33 +45,3 @@ pub fn grant_permission(core: String) -> anyhow::Result<()> { anyhow::bail!("{stderr}"); } } - -#[allow(unused)] -pub fn escape<'a>(text: &'a str) -> Cow<'a, str> { - let bytes = text.as_bytes(); - - let mut owned = None; - - for pos in 0..bytes.len() { - let special = match bytes[pos] { - b' ' => Some(b' '), - _ => None, - }; - if let Some(s) = special { - if owned.is_none() { - owned = Some(bytes[0..pos].to_owned()); - } - owned.as_mut().unwrap().push(b'\\'); - owned.as_mut().unwrap().push(b'\\'); - owned.as_mut().unwrap().push(s); - } else if let Some(owned) = owned.as_mut() { - owned.push(bytes[pos]); - } - } - - if let Some(owned) = owned { - unsafe { Cow::Owned(String::from_utf8_unchecked(owned)) } - } else { - unsafe { Cow::Borrowed(std::str::from_utf8_unchecked(bytes)) } - } -} diff --git a/src-tauri/src/utils/mod.rs b/src-tauri/src/utils/mod.rs index aeb0a60c..28eacc3b 100644 --- a/src-tauri/src/utils/mod.rs +++ b/src-tauri/src/utils/mod.rs @@ -4,4 +4,3 @@ pub mod init; pub mod resolve; pub mod server; pub mod tmpl; -// mod winhelp; diff --git a/src-tauri/src/utils/winhelp.rs b/src-tauri/src/utils/winhelp.rs deleted file mode 100644 index e903d951..00000000 --- a/src-tauri/src/utils/winhelp.rs +++ /dev/null @@ -1,69 +0,0 @@ -#![cfg(target_os = "windows")] -#![allow(non_snake_case)] -#![allow(non_camel_case_types)] - -//! -//! From https://github.com/tauri-apps/window-vibrancy/blob/dev/src/windows.rs -//! - -use windows_sys::Win32::{ - Foundation::*, - System::{LibraryLoader::*, SystemInformation::*}, -}; - -fn get_function_impl(library: &str, function: &str) -> Option { - assert_eq!(library.chars().last(), Some('\0')); - assert_eq!(function.chars().last(), Some('\0')); - - let module = unsafe { LoadLibraryA(library.as_ptr()) }; - if module == 0 { - return None; - } - Some(unsafe { GetProcAddress(module, function.as_ptr()) }) -} - -macro_rules! get_function { - ($lib:expr, $func:ident) => { - get_function_impl(concat!($lib, '\0'), concat!(stringify!($func), '\0')).map(|f| unsafe { - std::mem::transmute::<::windows_sys::Win32::Foundation::FARPROC, $func>(f) - }) - }; -} - -/// Returns a tuple of (major, minor, buildnumber) -fn get_windows_ver() -> Option<(u32, u32, u32)> { - type RtlGetVersion = unsafe extern "system" fn(*mut OSVERSIONINFOW) -> i32; - let handle = get_function!("ntdll.dll", RtlGetVersion); - if let Some(rtl_get_version) = handle { - unsafe { - let mut vi = OSVERSIONINFOW { - dwOSVersionInfoSize: 0, - dwMajorVersion: 0, - dwMinorVersion: 0, - dwBuildNumber: 0, - dwPlatformId: 0, - szCSDVersion: [0; 128], - }; - - let status = (rtl_get_version)(&mut vi as _); - - if status >= 0 { - Some((vi.dwMajorVersion, vi.dwMinorVersion, vi.dwBuildNumber)) - } else { - None - } - } - } else { - None - } -} - -pub fn is_win11() -> bool { - let v = get_windows_ver().unwrap_or_default(); - v.2 >= 22000 -} - -#[test] -fn test_version() { - dbg!(get_windows_ver().unwrap_or_default()); -}