refactor: wip
This commit is contained in:
parent
c8e6f3a627
commit
ee68d80d0a
20
src-tauri/src/config/config.rs
Normal file
20
src-tauri/src/config/config.rs
Normal file
@ -0,0 +1,20 @@
|
||||
use super::{Draft, IVerge};
|
||||
use once_cell::sync::OnceCell;
|
||||
|
||||
pub struct Config {
|
||||
verge_config: Draft<IVerge>,
|
||||
}
|
||||
|
||||
impl Config {
|
||||
pub fn global() -> &'static Config {
|
||||
static CONFIG: OnceCell<Config> = OnceCell::new();
|
||||
|
||||
CONFIG.get_or_init(|| Config {
|
||||
verge_config: Draft::from(IVerge::new()),
|
||||
})
|
||||
}
|
||||
|
||||
pub fn verge() -> Draft<IVerge> {
|
||||
Self::global().verge_config.clone()
|
||||
}
|
||||
}
|
@ -3,7 +3,7 @@ use parking_lot::{MappedMutexGuard, Mutex, MutexGuard};
|
||||
use serde_yaml::Mapping;
|
||||
use std::sync::Arc;
|
||||
|
||||
#[derive(Debug)]
|
||||
#[derive(Debug, Clone)]
|
||||
pub struct Draft<T: Clone + ToOwned> {
|
||||
inner: Arc<Mutex<(T, Option<T>)>>,
|
||||
}
|
||||
|
@ -1,9 +1,13 @@
|
||||
mod clash;
|
||||
mod config;
|
||||
mod draft;
|
||||
mod prfitem;
|
||||
mod profiles;
|
||||
mod verge;
|
||||
|
||||
pub use self::clash::*;
|
||||
pub use self::config::*;
|
||||
pub use self::draft::*;
|
||||
pub use self::prfitem::*;
|
||||
pub use self::profiles::*;
|
||||
pub use self::verge::*;
|
||||
|
@ -23,51 +23,15 @@ impl VergeN {
|
||||
|
||||
/// Save IVerge App Config
|
||||
pub fn save_file(&self) -> Result<()> {
|
||||
let config = self.config.lock();
|
||||
|
||||
config::save_yaml(
|
||||
dirs::verge_path(),
|
||||
&*config,
|
||||
Some("# The Config for Clash IVerge App\n\n"),
|
||||
)
|
||||
self.config.lock().save_file()
|
||||
}
|
||||
|
||||
/// patch verge config
|
||||
/// only save to file
|
||||
pub fn patch_config(&self, patch: IVerge) -> Result<()> {
|
||||
let mut config = self.config.lock();
|
||||
|
||||
macro_rules! patch {
|
||||
($key: tt) => {
|
||||
if patch.$key.is_some() {
|
||||
config.$key = patch.$key;
|
||||
}
|
||||
};
|
||||
{
|
||||
self.config.lock().patch_config(patch);
|
||||
}
|
||||
|
||||
patch!(language);
|
||||
patch!(theme_mode);
|
||||
patch!(theme_blur);
|
||||
patch!(traffic_graph);
|
||||
|
||||
patch!(enable_tun_mode);
|
||||
patch!(enable_service_mode);
|
||||
patch!(enable_auto_launch);
|
||||
patch!(enable_silent_start);
|
||||
patch!(enable_system_proxy);
|
||||
patch!(enable_proxy_guard);
|
||||
patch!(system_proxy_bypass);
|
||||
patch!(proxy_guard_duration);
|
||||
|
||||
patch!(theme_setting);
|
||||
patch!(web_ui_list);
|
||||
patch!(clash_core);
|
||||
patch!(hotkeys);
|
||||
|
||||
patch!(auto_close_connection);
|
||||
patch!(default_latency_test);
|
||||
|
||||
drop(config);
|
||||
self.save_file()
|
||||
}
|
||||
|
||||
@ -165,3 +129,52 @@ pub struct IVergeTheme {
|
||||
pub font_family: Option<String>,
|
||||
pub css_injection: Option<String>,
|
||||
}
|
||||
|
||||
impl IVerge {
|
||||
pub fn new() -> Self {
|
||||
config::read_yaml::<IVerge>(dirs::verge_path())
|
||||
}
|
||||
|
||||
/// Save IVerge App Config
|
||||
pub fn save_file(&self) -> Result<()> {
|
||||
config::save_yaml(
|
||||
dirs::verge_path(),
|
||||
&self,
|
||||
Some("# The Config for Clash IVerge App\n\n"),
|
||||
)
|
||||
}
|
||||
|
||||
/// patch verge config
|
||||
/// only save to file
|
||||
pub fn patch_config(&mut self, patch: IVerge) {
|
||||
macro_rules! patch {
|
||||
($key: tt) => {
|
||||
if patch.$key.is_some() {
|
||||
self.$key = patch.$key;
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
patch!(language);
|
||||
patch!(theme_mode);
|
||||
patch!(theme_blur);
|
||||
patch!(traffic_graph);
|
||||
|
||||
patch!(enable_tun_mode);
|
||||
patch!(enable_service_mode);
|
||||
patch!(enable_auto_launch);
|
||||
patch!(enable_silent_start);
|
||||
patch!(enable_system_proxy);
|
||||
patch!(enable_proxy_guard);
|
||||
patch!(system_proxy_bypass);
|
||||
patch!(proxy_guard_duration);
|
||||
|
||||
patch!(theme_setting);
|
||||
patch!(web_ui_list);
|
||||
patch!(clash_core);
|
||||
patch!(hotkeys);
|
||||
|
||||
patch!(auto_close_connection);
|
||||
patch!(default_latency_test);
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user