feat: add config log type and improve window logging

This commit is contained in:
Tunglies 2025-03-26 16:43:26 +08:00
parent 1ace560531
commit d91653b218
5 changed files with 84 additions and 64 deletions

View File

@ -2,8 +2,8 @@ use super::{Draft, IClashTemp, IProfiles, IRuntime, IVerge};
use crate::{
config::PrfItem,
core::{handle, CoreManager},
enhance,
utils::{dirs, help},
enhance, logging,
utils::{dirs, help, logging::Type},
};
use anyhow::{anyhow, Result};
use once_cell::sync::OnceCell;
@ -75,12 +75,15 @@ impl Config {
let validation_result = if config_result.is_ok() {
// 验证配置文件
println!("[首次启动] 开始验证配置");
logging!(info, Type::Config, true, "开始验证配置");
match CoreManager::global().validate_config().await {
Ok((is_valid, error_msg)) => {
if !is_valid {
println!(
logging!(
warn,
Type::Config,
true,
"[首次启动] 配置验证失败,使用默认最小配置启动: {}",
error_msg
);
@ -89,12 +92,12 @@ impl Config {
.await?;
Some(("config_validate::boot_error", error_msg))
} else {
println!("[首次启动] 配置验证成功");
logging!(info, Type::Config, true, "配置验证成功");
Some(("config_validate::success", String::new()))
}
}
Err(err) => {
println!("[首次启动] 验证进程执行失败: {}", err);
logging!(warn, Type::Config, true, "验证进程执行失败: {}", err);
CoreManager::global()
.use_default_config("config_validate::process_terminated", "")
.await?;
@ -102,7 +105,7 @@ impl Config {
}
}
} else {
println!("[首次启动] 生成配置文件失败,使用默认配置");
logging!(warn, Type::Config, true, "生成配置文件失败,使用默认配置");
CoreManager::global()
.use_default_config("config_validate::error", "")
.await?;

View File

@ -188,16 +188,22 @@ impl CoreManager {
return Ok((true, String::new()));
}
logging!(info, Type::Core, true, "开始验证配置文件: {}", config_path);
logging!(
info,
Type::Config,
true,
"开始验证配置文件: {}",
config_path
);
let clash_core = { Config::verge().latest().clash_core.clone() };
let clash_core = clash_core.unwrap_or("verge-mihomo".into());
logging!(info, Type::Core, true, "使用内核: {}", clash_core);
logging!(info, Type::Config, true, "使用内核: {}", clash_core);
let app_handle = handle::Handle::global().app_handle().unwrap();
let test_dir = dirs::app_home_dir()?.join("test");
let test_dir = dirs::path_to_str(&test_dir)?;
logging!(info, Type::Core, true, "测试目录: {}", test_dir);
logging!(info, Type::Config, true, "测试目录: {}", test_dir);
// 使用子进程运行clash验证配置
let output = app_handle
@ -215,14 +221,14 @@ impl CoreManager {
let has_error =
!output.status.success() || error_keywords.iter().any(|&kw| stderr.contains(kw));
logging!(info, Type::Core, true, "-------- 验证结果 --------");
logging!(info, Type::Config, true, "-------- 验证结果 --------");
if !stderr.is_empty() {
logging!(info, Type::Core, true, "stderr输出:\n{}", stderr);
}
if has_error {
logging!(info, Type::Core, true, "发现错误,开始处理错误信息");
logging!(info, Type::Config, true, "发现错误,开始处理错误信息");
let error_msg = if !stdout.is_empty() {
stdout.to_string()
} else if !stderr.is_empty() {
@ -233,11 +239,11 @@ impl CoreManager {
"验证进程被终止".to_string()
};
logging!(info, Type::Core, true, "-------- 验证结束 --------\n");
logging!(info, Type::Config, true, "-------- 验证结束 --------");
Ok((false, error_msg)) // 返回错误消息给调用者处理
} else {
logging!(info, Type::Core, true, "验证成功");
logging!(info, Type::Core, true, "-------- 验证结束 --------\n");
logging!(info, Type::Config, true, "验证成功");
logging!(info, Type::Config, true, "-------- 验证结束 --------");
Ok((true, String::new()))
}
}

View File

@ -1,12 +1,6 @@
use crate::{
config::{Config, IVerge},
core::{
handle,
service::{install_service, is_service_available, reinstall_service},
CoreManager,
},
logging, logging_error,
utils::logging::Type,
core::handle,
};
use std::env;
use tauri_plugin_clipboard_manager::ClipboardExt;

View File

@ -6,6 +6,7 @@ pub enum Type {
Service,
Hotkey,
Window,
Config,
}
impl fmt::Display for Type {
@ -15,6 +16,7 @@ impl fmt::Display for Type {
Type::Service => write!(f, "[Service]"),
Type::Hotkey => write!(f, "[Hotkey]"),
Type::Window => write!(f, "[Window]"),
Type::Config => write!(f, "[Config]"),
}
}
}

View File

@ -3,9 +3,9 @@ use crate::AppHandleManager;
use crate::{
config::{Config, IVerge, PrfItem},
core::*,
log_err,
log_err, logging,
module::lightweight,
utils::{error, init, server},
utils::{error, init, logging::Type, server},
wrap_err,
};
use anyhow::{bail, Result};
@ -62,34 +62,34 @@ pub async fn resolve_setup(app: &mut App) {
log::trace!(target:"app", "init config");
log_err!(Config::init_config().await);
if service::check_service().await.is_err() {
match service::install_service().await {
Ok(_) => {
log::info!(target:"app", "install service susccess.");
#[cfg(not(target_os = "macos"))]
std::thread::sleep(std::time::Duration::from_millis(1000));
#[cfg(target_os = "macos")]
{
let mut service_runing = false;
for _ in 0..40 {
if service::check_service().await.is_ok() {
service_runing = true;
break;
} else {
log::warn!(target: "app", "service not runing, sleep 500ms and check again.");
std::thread::sleep(std::time::Duration::from_millis(500));
}
}
if !service_runing {
log::warn!(target: "app", "service not running, will fallback to user mode");
}
}
}
Err(e) => {
log::warn!(target: "app", "failed to install service: {e:?}, will fallback to user mode");
}
}
}
// if service::check_service().await.is_err() {
// match service::install_service().await {
// Ok(_) => {
// log::info!(target:"app", "install service susccess.");
// #[cfg(not(target_os = "macos"))]
// std::thread::sleep(std::time::Duration::from_millis(1000));
// #[cfg(target_os = "macos")]
// {
// let mut service_runing = false;
// for _ in 0..40 {
// if service::check_service().await.is_ok() {
// service_runing = true;
// break;
// } else {
// log::warn!(target: "app", "service not runing, sleep 500ms and check again.");
// std::thread::sleep(std::time::Duration::from_millis(500));
// }
// }
// if !service_runing {
// log::warn!(target: "app", "service not running, will fallback to user mode");
// }
// }
// }
// Err(e) => {
// log::warn!(target: "app", "failed to install service: {e:?}, will fallback to user mode");
// }
// }
// }
log::trace!(target: "app", "launch core");
log_err!(CoreManager::global().init().await);
@ -138,20 +138,27 @@ pub fn resolve_reset() {
/// create main window
pub fn create_window() {
println!("Starting to create window");
log::info!(target: "app", "Starting to create window");
logging!(info, Type::Window, true, "Creating window");
let app_handle = handle::Handle::global().app_handle().unwrap();
#[cfg(target_os = "macos")]
AppHandleManager::global().set_activation_policy_regular();
if let Some(window) = handle::Handle::global().get_window() {
println!("Found existing window, trying to show it");
log::info!(target: "app", "Found existing window, trying to show it");
logging!(
info,
Type::Window,
true,
"Found existing window, attempting to restore visibility"
);
if window.is_minimized().unwrap_or(false) {
println!("Window is minimized, unminimizing");
log::info!(target: "app", "Window is minimized, unminimizing");
logging!(
info,
Type::Window,
true,
"Window is minimized, restoring window state"
);
let _ = window.unminimize();
}
let _ = window.show();
@ -159,8 +166,7 @@ pub fn create_window() {
return;
}
println!("Creating new window");
log::info!(target: "app", "Creating new window");
logging!(info, Type::Window, true, "Creating new application window");
#[cfg(target_os = "windows")]
let window = tauri::WebviewWindowBuilder::new(
@ -206,8 +212,12 @@ pub fn create_window() {
match window {
Ok(window) => {
println!("Window created successfully, attempting to show");
log::info!(target: "app", "Window created successfully, attempting to show");
logging!(
info,
Type::Window,
true,
"Window created successfully, making window visible"
);
let _ = window.show();
let _ = window.set_focus();
@ -215,8 +225,13 @@ pub fn create_window() {
crate::feat::setup_window_state_monitor(&app_handle);
}
Err(e) => {
println!("Failed to create window: {:?}", e);
log::error!(target: "app", "Failed to create window: {:?}", e);
logging!(
error,
Type::Window,
true,
"Failed to create window: {:?}",
e
);
}
}
}