94 lines
2.7 KiB
Rust
94 lines
2.7 KiB
Rust
use crate::utils::dirs;
|
|
use anyhow::Result;
|
|
use chrono::Local;
|
|
use log::LevelFilter;
|
|
use log4rs::append::console::ConsoleAppender;
|
|
use log4rs::append::file::FileAppender;
|
|
use log4rs::config::{Appender, Config, Logger, Root};
|
|
use log4rs::encode::pattern::PatternEncoder;
|
|
use std::fs;
|
|
use tauri::PackageInfo;
|
|
|
|
/// initialize this instance's log file
|
|
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").to_string();
|
|
let log_file = format!("{}.log", local_time);
|
|
let log_file = log_dir.join(log_file);
|
|
|
|
#[cfg(feature = "verge-dev")]
|
|
let time_format = "{d(%Y-%m-%d %H:%M:%S)} {l} - {M} {m}{n}";
|
|
#[cfg(not(feature = "verge-dev"))]
|
|
let time_format = "{d(%Y-%m-%d %H:%M:%S)} {l} - {m}{n}";
|
|
|
|
let encode = Box::new(PatternEncoder::new(time_format));
|
|
|
|
let stdout = ConsoleAppender::builder().encoder(encode.clone()).build();
|
|
let tofile = FileAppender::builder().encoder(encode).build(log_file)?;
|
|
|
|
#[cfg(feature = "verge-dev")]
|
|
let level = LevelFilter::Debug;
|
|
#[cfg(not(feature = "verge-dev"))]
|
|
let level = LevelFilter::Info;
|
|
|
|
let config = Config::builder()
|
|
.appender(Appender::builder().build("stdout", Box::new(stdout)))
|
|
.appender(Appender::builder().build("file", Box::new(tofile)))
|
|
.logger(
|
|
Logger::builder()
|
|
.appenders(["file", "stdout"])
|
|
.additive(false)
|
|
.build("app", level),
|
|
)
|
|
.build(Root::builder().appender("stdout").build(LevelFilter::Info))?;
|
|
|
|
log4rs::init_config(config)?;
|
|
|
|
Ok(())
|
|
}
|
|
|
|
/// Initialize all the files from resources
|
|
pub fn init_config() -> Result<()> {
|
|
#[cfg(target_os = "windows")]
|
|
unsafe {
|
|
let _ = dirs::init_portable_flag();
|
|
}
|
|
|
|
let _ = init_log();
|
|
|
|
let _ = dirs::app_home_dir().map(|app_dir| {
|
|
if !app_dir.exists() {
|
|
let _ = fs::create_dir_all(&app_dir);
|
|
}
|
|
});
|
|
|
|
let _ = dirs::app_profiles_dir().map(|profiles_dir| {
|
|
if !profiles_dir.exists() {
|
|
let _ = fs::create_dir_all(&profiles_dir);
|
|
}
|
|
});
|
|
|
|
Ok(())
|
|
}
|
|
|
|
/// initialize app
|
|
pub fn init_resources(package_info: &PackageInfo) -> Result<()> {
|
|
let app_dir = dirs::app_home_dir()?;
|
|
let res_dir = dirs::app_resources_dir(package_info)?;
|
|
|
|
// copy the resource file
|
|
for file in ["Country.mmdb", "geoip.dat", "geosite.dat", "wintun.dll"].iter() {
|
|
let src_path = res_dir.join(file);
|
|
let target_path = app_dir.join(file);
|
|
if src_path.exists() {
|
|
let _ = fs::copy(src_path, target_path);
|
|
}
|
|
}
|
|
|
|
Ok(())
|
|
}
|