123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132 |
- use std::env::temp_dir;
- use std::path::PathBuf;
- use tauri::{
- api::path::{home_dir, resource_dir},
- Env, PackageInfo,
- };
- #[cfg(not(feature = "verge-dev"))]
- static APP_DIR: &str = "clash-verge";
- #[cfg(feature = "verge-dev")]
- static APP_DIR: &str = "clash-verge-dev";
- static CLASH_CONFIG: &str = "config.yaml";
- static VERGE_CONFIG: &str = "verge.yaml";
- static PROFILE_YAML: &str = "profiles.yaml";
- static PROFILE_TEMP: &str = "clash-verge-runtime.yaml";
- static mut RESOURCE_DIR: Option<PathBuf> = None;
- #[allow(unused)]
- static mut PORTABLE_FLAG: bool = false;
- #[allow(unused)]
- pub unsafe fn init_portable_flag() {
- #[cfg(target_os = "windows")]
- {
- use tauri::utils::platform::current_exe;
- let exe = current_exe().unwrap();
- let dir = exe.parent().unwrap();
- let dir = PathBuf::from(dir).join(".config/PORTABLE");
- if dir.exists() {
- PORTABLE_FLAG = true;
- }
- }
- }
- pub fn app_home_dir() -> PathBuf {
- #[cfg(target_os = "windows")]
- unsafe {
- use tauri::utils::platform::current_exe;
- if !PORTABLE_FLAG {
- home_dir().unwrap().join(".config").join(APP_DIR)
- } else {
- let app_exe = current_exe().unwrap();
- let app_exe = dunce::canonicalize(app_exe).unwrap();
- let app_dir = app_exe.parent().unwrap();
- PathBuf::from(app_dir).join(".config").join(APP_DIR)
- }
- }
- #[cfg(not(target_os = "windows"))]
- home_dir().unwrap().join(".config").join(APP_DIR)
- }
- pub fn app_resources_dir(package_info: &PackageInfo) -> PathBuf {
- let res_dir = resource_dir(package_info, &Env::default())
- .unwrap()
- .join("resources");
- unsafe {
- RESOURCE_DIR = Some(res_dir.clone());
- }
- res_dir
- }
- pub fn app_profiles_dir() -> PathBuf {
- app_home_dir().join("profiles")
- }
- pub fn app_logs_dir() -> PathBuf {
- app_home_dir().join("logs")
- }
- pub fn clash_path() -> PathBuf {
- app_home_dir().join(CLASH_CONFIG)
- }
- pub fn verge_path() -> PathBuf {
- app_home_dir().join(VERGE_CONFIG)
- }
- pub fn profiles_path() -> PathBuf {
- app_home_dir().join(PROFILE_YAML)
- }
- pub fn profiles_temp_path() -> PathBuf {
- #[cfg(not(feature = "debug-yml"))]
- return temp_dir().join(PROFILE_TEMP);
- #[cfg(feature = "debug-yml")]
- return app_home_dir().join(PROFILE_TEMP);
- }
- pub fn clash_pid_path() -> PathBuf {
- unsafe { RESOURCE_DIR.clone().unwrap().join("clash.pid") }
- }
- #[cfg(windows)]
- static SERVICE_PATH: &str = "clash-verge-service.exe";
- #[cfg(windows)]
- pub fn service_path() -> PathBuf {
- unsafe {
- let res_dir = RESOURCE_DIR.clone().unwrap();
- res_dir.join(SERVICE_PATH)
- }
- }
- #[cfg(windows)]
- pub fn service_log_file() -> PathBuf {
- use chrono::Local;
- let log_dir = app_logs_dir().join("service");
- let local_time = Local::now().format("%Y-%m-%d-%H%M%S").to_string();
- let log_file = format!("{}.log", local_time);
- let log_file = log_dir.join(log_file);
- std::fs::create_dir_all(&log_dir).unwrap();
- log_file
- }
|