fix: init config error

This commit is contained in:
GyDi 2022-10-28 01:02:47 +08:00
parent e11b4038a3
commit f7dab3ca56
No known key found for this signature in database
GPG Key ID: 58B15242BA8277A6
6 changed files with 53 additions and 53 deletions

View File

@ -6,7 +6,7 @@ use crate::config::enhance_config;
use crate::data::*; use crate::data::*;
use crate::log_if_err; use crate::log_if_err;
use anyhow::{bail, Result}; use anyhow::{bail, Result};
use once_cell::sync::Lazy; use once_cell::sync::OnceCell;
use parking_lot::Mutex; use parking_lot::Mutex;
use serde_yaml::{Mapping, Value}; use serde_yaml::{Mapping, Value};
use std::sync::Arc; use std::sync::Arc;
@ -20,15 +20,6 @@ pub mod tray;
pub use self::service::*; pub use self::service::*;
static CORE: Lazy<Core> = Lazy::new(|| Core {
service: Arc::new(Mutex::new(Service::new())),
sysopt: Arc::new(Mutex::new(Sysopt::new())),
timer: Arc::new(Mutex::new(Timer::new())),
hotkey: Arc::new(Mutex::new(Hotkey::new())),
runtime: Arc::new(Mutex::new(RuntimeResult::default())),
handle: Arc::new(Mutex::new(Handle::default())),
});
#[derive(Clone)] #[derive(Clone)]
pub struct Core { pub struct Core {
pub service: Arc<Mutex<Service>>, pub service: Arc<Mutex<Service>>,
@ -40,8 +31,17 @@ pub struct Core {
} }
impl Core { impl Core {
pub fn global() -> Core { pub fn global() -> &'static Core {
CORE.clone() static CORE: OnceCell<Core> = OnceCell::new();
CORE.get_or_init(|| Core {
service: Arc::new(Mutex::new(Service::new())),
sysopt: Arc::new(Mutex::new(Sysopt::new())),
timer: Arc::new(Mutex::new(Timer::new())),
hotkey: Arc::new(Mutex::new(Hotkey::new())),
runtime: Arc::new(Mutex::new(RuntimeResult::default())),
handle: Arc::new(Mutex::new(Handle::default())),
})
} }
/// initialize the core state /// initialize the core state

View File

@ -8,16 +8,10 @@ pub use self::prfitem::*;
pub use self::profiles::*; pub use self::profiles::*;
pub use self::verge::*; pub use self::verge::*;
use once_cell::sync::Lazy; use once_cell::sync::OnceCell;
use parking_lot::Mutex; use parking_lot::Mutex;
use std::sync::Arc; use std::sync::Arc;
static DATA: Lazy<Data> = Lazy::new(|| Data {
clash: Arc::new(Mutex::new(Clash::new())),
verge: Arc::new(Mutex::new(Verge::new())),
profiles: Arc::new(Mutex::new(Profiles::new())),
});
#[derive(Debug, Clone)] #[derive(Debug, Clone)]
pub struct Data { pub struct Data {
pub clash: Arc<Mutex<Clash>>, pub clash: Arc<Mutex<Clash>>,
@ -26,7 +20,13 @@ pub struct Data {
} }
impl Data { impl Data {
pub fn global() -> Data { pub fn global() -> &'static Data {
DATA.clone() static DATA: OnceCell<Data> = OnceCell::new();
DATA.get_or_init(|| Data {
clash: Arc::new(Mutex::new(Clash::new())),
verge: Arc::new(Mutex::new(Verge::new())),
profiles: Arc::new(Mutex::new(Profiles::new())),
})
} }
} }

View File

@ -10,20 +10,14 @@ mod data;
mod feat; mod feat;
mod utils; mod utils;
use crate::{ use crate::utils::{init, resolve, server};
data::Verge,
utils::{resolve, server},
};
use tauri::{api, Manager, SystemTray}; use tauri::{api, Manager, SystemTray};
fn main() -> std::io::Result<()> { fn main() -> std::io::Result<()> {
{ // 单例检测
let verge = Verge::new(); if server::check_singleton().is_err() {
println!("app exists");
if server::check_singleton(verge.app_singleton_port).is_err() { return Ok(());
println!("app exists");
return Ok(());
}
} }
#[cfg(target_os = "windows")] #[cfg(target_os = "windows")]
@ -32,6 +26,8 @@ fn main() -> std::io::Result<()> {
dirs::init_portable_flag(); dirs::init_portable_flag();
} }
crate::log_if_err!(init::init_config());
#[allow(unused_mut)] #[allow(unused_mut)]
let mut builder = tauri::Builder::default() let mut builder = tauri::Builder::default()
.setup(|app| Ok(resolve::resolve_setup(app))) .setup(|app| Ok(resolve::resolve_setup(app)))

View File

@ -8,11 +8,15 @@ use log4rs::config::{Appender, Config, Logger, Root};
use log4rs::encode::pattern::PatternEncoder; use log4rs::encode::pattern::PatternEncoder;
use std::fs; use std::fs;
use std::io::Write; use std::io::Write;
use std::path::PathBuf;
use tauri::PackageInfo; use tauri::PackageInfo;
/// initialize this instance's log file /// initialize this instance's log file
fn init_log(log_dir: &PathBuf) -> Result<()> { fn init_log() -> Result<()> {
let log_dir = dirs::app_logs_dir();
if !log_dir.exists() {
let _ = fs::create_dir_all(&log_dir);
}
let local_time = Local::now().format("%Y-%m-%d-%H%M%S").to_string(); let local_time = Local::now().format("%Y-%m-%d-%H%M%S").to_string();
let log_file = format!("{}.log", local_time); let log_file = format!("{}.log", local_time);
let log_file = log_dir.join(log_file); let log_file = log_dir.join(log_file);
@ -42,7 +46,19 @@ fn init_log(log_dir: &PathBuf) -> Result<()> {
} }
/// Initialize all the files from resources /// Initialize all the files from resources
fn init_config(app_dir: &PathBuf) -> Result<()> { pub fn init_config() -> Result<()> {
let _ = init_log();
let app_dir = dirs::app_home_dir();
let profiles_dir = dirs::app_profiles_dir();
if !app_dir.exists() {
let _ = fs::create_dir_all(&app_dir);
}
if !profiles_dir.exists() {
let _ = fs::create_dir_all(&profiles_dir);
}
// target path // target path
let clash_path = app_dir.join("config.yaml"); let clash_path = app_dir.join("config.yaml");
let verge_path = app_dir.join("verge.yaml"); let verge_path = app_dir.join("verge.yaml");
@ -61,27 +77,14 @@ fn init_config(app_dir: &PathBuf) -> Result<()> {
} }
/// initialize app /// initialize app
pub fn init_app(package_info: &PackageInfo) { pub fn init_resources(package_info: &PackageInfo) {
// create app dir // create app dir
let app_dir = dirs::app_home_dir(); let app_dir = dirs::app_home_dir();
let log_dir = dirs::app_logs_dir();
let profiles_dir = dirs::app_profiles_dir();
let res_dir = dirs::app_resources_dir(package_info); let res_dir = dirs::app_resources_dir(package_info);
if !app_dir.exists() { if !app_dir.exists() {
let _ = fs::create_dir_all(&app_dir); let _ = fs::create_dir_all(&app_dir);
} }
if !log_dir.exists() {
let _ = fs::create_dir_all(&log_dir);
}
if !profiles_dir.exists() {
let _ = fs::create_dir_all(&profiles_dir);
}
crate::log_if_err!(init_log(&log_dir));
crate::log_if_err!(init_config(&app_dir));
// copy the resource file // copy the resource file
let mmdb_path = app_dir.join("Country.mmdb"); let mmdb_path = app_dir.join("Country.mmdb");

View File

@ -3,8 +3,7 @@ use tauri::{App, AppHandle, Manager};
/// handle something when start app /// handle something when start app
pub fn resolve_setup(app: &App) { pub fn resolve_setup(app: &App) {
// init app config init::init_resources(app.package_info());
init::init_app(app.package_info());
let silent_start = { let silent_start = {
let global = Data::global(); let global = Data::global();

View File

@ -1,6 +1,7 @@
extern crate warp; extern crate warp;
use super::resolve; use super::resolve;
use crate::data::Verge;
use port_scanner::local_port_available; use port_scanner::local_port_available;
use tauri::AppHandle; use tauri::AppHandle;
use warp::Filter; use warp::Filter;
@ -11,8 +12,9 @@ const SERVER_PORT: u16 = 33331;
const SERVER_PORT: u16 = 11233; const SERVER_PORT: u16 = 11233;
/// check whether there is already exists /// check whether there is already exists
pub fn check_singleton(port: Option<u16>) -> Result<(), ()> { pub fn check_singleton() -> Result<(), ()> {
let port = port.unwrap_or(SERVER_PORT); let verge = Verge::new();
let port = verge.app_singleton_port.unwrap_or(SERVER_PORT);
if !local_port_available(port) { if !local_port_available(port) {
tauri::async_runtime::block_on(async { tauri::async_runtime::block_on(async {