Files
clash-proxy/src-tauri/src/utils/init.rs

91 lines
2.5 KiB
Rust
Raw Normal View History

2022-02-18 23:57:13 +08:00
use crate::utils::{dirs, tmpl};
2021-12-19 17:50:25 +08:00
use chrono::Local;
2021-12-08 23:40:52 +08:00
use log::LevelFilter;
use log4rs::append::console::ConsoleAppender;
use log4rs::append::file::FileAppender;
2022-03-04 02:04:25 +08:00
use log4rs::config::{Appender, Config, Root};
2021-12-08 23:40:52 +08:00
use log4rs::encode::pattern::PatternEncoder;
2022-02-28 01:34:25 +08:00
use std::fs;
2021-12-08 23:40:52 +08:00
use std::io::Write;
2021-12-14 16:07:15 +08:00
use std::path::PathBuf;
2021-12-12 17:46:16 +08:00
use tauri::PackageInfo;
2021-12-08 23:40:52 +08:00
/// initialize this instance's log file
2021-12-12 17:46:16 +08:00
fn init_log(log_dir: &PathBuf) {
2021-12-19 18:04:18 +08:00
let local_time = Local::now().format("%Y-%m-%d-%H%M%S").to_string();
2021-12-19 17:50:25 +08:00
let log_file = format!("{}.log", local_time);
2021-12-08 23:40:52 +08:00
let log_file = log_dir.join(log_file);
2021-12-19 17:50:25 +08:00
let time_format = "{d(%Y-%m-%d %H:%M:%S)} - {m}{n}";
let stdout = ConsoleAppender::builder()
.encoder(Box::new(PatternEncoder::new(time_format)))
.build();
2021-12-08 23:40:52 +08:00
let tofile = FileAppender::builder()
2021-12-19 17:50:25 +08:00
.encoder(Box::new(PatternEncoder::new(time_format)))
2021-12-08 23:40:52 +08:00
.build(log_file)
.unwrap();
let config = Config::builder()
.appender(Appender::builder().build("stdout", Box::new(stdout)))
.appender(Appender::builder().build("file", Box::new(tofile)))
2022-03-04 02:04:25 +08:00
.build(
Root::builder()
.appenders(["stdout", "file"])
.build(LevelFilter::Info),
2021-12-08 23:40:52 +08:00
)
.unwrap();
log4rs::init_config(config).unwrap();
}
2021-12-14 00:40:41 +08:00
/// Initialize all the files from resources
2022-02-18 23:57:13 +08:00
fn init_config(app_dir: &PathBuf) -> std::io::Result<()> {
2021-12-14 00:40:41 +08:00
// target path
let clash_path = app_dir.join("config.yaml");
let verge_path = app_dir.join("verge.yaml");
let profile_path = app_dir.join("profiles.yaml");
2021-12-08 23:40:52 +08:00
2021-12-14 00:40:41 +08:00
if !clash_path.exists() {
2022-02-28 01:34:25 +08:00
fs::File::create(clash_path)?.write(tmpl::CLASH_CONFIG)?;
2021-12-08 23:40:52 +08:00
}
2022-02-18 23:57:13 +08:00
if !verge_path.exists() {
2022-02-28 01:34:25 +08:00
fs::File::create(verge_path)?.write(tmpl::VERGE_CONFIG)?;
2021-12-14 00:40:41 +08:00
}
2022-02-18 23:57:13 +08:00
if !profile_path.exists() {
2022-02-28 01:34:25 +08:00
fs::File::create(profile_path)?.write(tmpl::PROFILES_CONFIG)?;
2021-12-12 17:46:16 +08:00
}
2022-02-18 23:57:13 +08:00
Ok(())
2021-12-08 23:40:52 +08:00
}
/// initialize app
2021-12-12 17:46:16 +08:00
pub fn init_app(package_info: &PackageInfo) {
// create app dir
2022-01-07 23:29:20 +08:00
let app_dir = dirs::app_home_dir();
2022-02-28 01:34:25 +08:00
let log_dir = dirs::app_logs_dir();
let profiles_dir = dirs::app_profiles_dir();
2021-12-08 23:40:52 +08:00
2022-01-07 23:29:20 +08:00
let res_dir = dirs::app_resources_dir(package_info);
2021-12-08 23:40:52 +08:00
2021-12-12 17:46:16 +08:00
if !app_dir.exists() {
2022-03-07 01:06:21 +08:00
fs::create_dir_all(&app_dir).unwrap();
2021-12-12 17:46:16 +08:00
}
if !log_dir.exists() {
2022-03-07 01:06:21 +08:00
fs::create_dir_all(&log_dir).unwrap();
2021-12-08 23:40:52 +08:00
}
2021-12-12 17:46:16 +08:00
if !profiles_dir.exists() {
2022-03-07 01:06:21 +08:00
fs::create_dir_all(&profiles_dir).unwrap();
2021-12-12 17:46:16 +08:00
}
init_log(&log_dir);
2022-02-18 23:57:13 +08:00
if let Err(err) = init_config(&app_dir) {
log::error!("{err}");
}
// copy the resource file
let mmdb_path = app_dir.join("Country.mmdb");
let mmdb_tmpl = res_dir.join("Country.mmdb");
if !mmdb_path.exists() && mmdb_tmpl.exists() {
fs::copy(mmdb_tmpl, mmdb_path).unwrap();
}
2021-12-08 23:40:52 +08:00
}