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::log_if_err;
use anyhow::{bail, Result};
use once_cell::sync::Lazy;
use once_cell::sync::OnceCell;
use parking_lot::Mutex;
use serde_yaml::{Mapping, Value};
use std::sync::Arc;
@ -20,15 +20,6 @@ pub mod tray;
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)]
pub struct Core {
pub service: Arc<Mutex<Service>>,
@ -40,8 +31,17 @@ pub struct Core {
}
impl Core {
pub fn global() -> Core {
CORE.clone()
pub fn global() -> &'static Core {
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

View File

@ -8,16 +8,10 @@ pub use self::prfitem::*;
pub use self::profiles::*;
pub use self::verge::*;
use once_cell::sync::Lazy;
use once_cell::sync::OnceCell;
use parking_lot::Mutex;
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)]
pub struct Data {
pub clash: Arc<Mutex<Clash>>,
@ -26,7 +20,13 @@ pub struct Data {
}
impl Data {
pub fn global() -> Data {
DATA.clone()
pub fn global() -> &'static Data {
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,21 +10,15 @@ mod data;
mod feat;
mod utils;
use crate::{
data::Verge,
utils::{resolve, server},
};
use crate::utils::{init, resolve, server};
use tauri::{api, Manager, SystemTray};
fn main() -> std::io::Result<()> {
{
let verge = Verge::new();
if server::check_singleton(verge.app_singleton_port).is_err() {
// 单例检测
if server::check_singleton().is_err() {
println!("app exists");
return Ok(());
}
}
#[cfg(target_os = "windows")]
unsafe {
@ -32,6 +26,8 @@ fn main() -> std::io::Result<()> {
dirs::init_portable_flag();
}
crate::log_if_err!(init::init_config());
#[allow(unused_mut)]
let mut builder = tauri::Builder::default()
.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 std::fs;
use std::io::Write;
use std::path::PathBuf;
use tauri::PackageInfo;
/// 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 log_file = format!("{}.log", local_time);
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
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
let clash_path = app_dir.join("config.yaml");
let verge_path = app_dir.join("verge.yaml");
@ -61,27 +77,14 @@ fn init_config(app_dir: &PathBuf) -> Result<()> {
}
/// initialize app
pub fn init_app(package_info: &PackageInfo) {
pub fn init_resources(package_info: &PackageInfo) {
// create app 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);
if !app_dir.exists() {
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
let mmdb_path = app_dir.join("Country.mmdb");

View File

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

View File

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