feat: home page

This commit is contained in:
wonfen
2025-03-14 13:31:34 +08:00
parent c25015ed54
commit 1f99cee78b
37 changed files with 4488 additions and 74 deletions

View File

@@ -4,8 +4,22 @@ use crate::{
module::sysinfo::PlatformSpecification,
wrap_err,
};
use once_cell::sync::Lazy;
use std::sync::atomic::{AtomicI64, Ordering};
use std::time::{SystemTime, UNIX_EPOCH};
use tauri_plugin_clipboard_manager::ClipboardExt;
// 存储应用启动时间的全局变量
static APP_START_TIME: Lazy<AtomicI64> = Lazy::new(|| {
// 获取当前系统时间,转换为毫秒级时间戳
let now = SystemTime::now()
.duration_since(UNIX_EPOCH)
.unwrap_or_default()
.as_millis() as i64;
AtomicI64::new(now)
});
#[tauri::command]
pub async fn export_diagnostic_info() -> CmdResult<()> {
let sysinfo = PlatformSpecification::new();
@@ -19,6 +33,13 @@ pub async fn export_diagnostic_info() -> CmdResult<()> {
Ok(())
}
#[tauri::command]
pub async fn get_system_info() -> CmdResult<String> {
let sysinfo = PlatformSpecification::new();
let info = format!("{:?}", sysinfo);
Ok(info)
}
/// 获取当前内核运行模式
#[tauri::command]
pub async fn get_running_mode() -> Result<String, String> {
@@ -34,3 +55,15 @@ pub async fn get_running_mode() -> Result<String, String> {
pub async fn install_service() -> CmdResult {
wrap_err!(service::reinstall_service().await)
}
/// 获取应用的运行时间(毫秒)
#[tauri::command]
pub fn get_app_uptime() -> CmdResult<i64> {
let start_time = APP_START_TIME.load(Ordering::Relaxed);
let now = SystemTime::now()
.duration_since(UNIX_EPOCH)
.unwrap_or_default()
.as_millis() as i64;
Ok(now - start_time)
}

View File

@@ -5,6 +5,7 @@ use crate::{
use anyhow::Result;
use log::LevelFilter;
use serde::{Deserialize, Serialize};
use serde_json::Value;
/// ### `verge.yaml` schema
#[derive(Default, Debug, Clone, Deserialize, Serialize)]
@@ -105,6 +106,10 @@ pub struct IVerge {
/// enable global hotkey
pub enable_global_hotkey: Option<bool>,
/// 首页卡片设置
/// 控制首页各个卡片的显示和隐藏
pub home_cards: Option<serde_json::Value>,
/// 切换代理时自动关闭连接
pub auto_close_connection: Option<bool>,
@@ -291,6 +296,7 @@ impl IVerge {
enable_global_hotkey: Some(true),
enable_lite_mode: Some(false),
enable_dns_settings: Some(true),
home_cards: None,
..Self::default()
}
}
@@ -374,6 +380,7 @@ impl IVerge {
patch!(enable_tray_speed);
patch!(enable_lite_mode);
patch!(enable_dns_settings);
patch!(home_cards);
}
/// 在初始化前尝试拿到单例端口的值
@@ -464,6 +471,7 @@ pub struct IVergeResponse {
pub enable_tray_speed: Option<bool>,
pub enable_lite_mode: Option<bool>,
pub enable_dns_settings: Option<bool>,
pub home_cards: Option<serde_json::Value>,
}
impl From<IVerge> for IVergeResponse {
@@ -528,6 +536,7 @@ impl From<IVerge> for IVergeResponse {
enable_tray_speed: verge.enable_tray_speed,
enable_lite_mode: verge.enable_lite_mode,
enable_dns_settings: verge.enable_dns_settings,
home_cards: verge.home_cards,
}
}
}

View File

@@ -7,7 +7,7 @@ use tokio::time::Duration;
// Windows only
const SERVICE_URL: &str = "http://127.0.0.1:33211";
const REQUIRED_SERVICE_VERSION: &str = "1.0.1"; // 定义所需的服务版本号
const REQUIRED_SERVICE_VERSION: &str = "1.0.2"; // 定义所需的服务版本号
#[derive(Debug, Deserialize, Serialize, Clone)]
pub struct ResponseBody {

View File

@@ -76,6 +76,7 @@ pub async fn patch_verge(patch: IVerge, not_save_file: bool) -> Result<()> {
let enable_tray_speed = patch.enable_tray_speed;
let enable_global_hotkey = patch.enable_global_hotkey;
let tray_event = patch.tray_event;
let home_cards = patch.home_cards.clone();
let res: std::result::Result<(), anyhow::Error> = {
let mut should_restart_core = false;
@@ -98,6 +99,9 @@ pub async fn patch_verge(patch: IVerge, not_save_file: bool) -> Result<()> {
if enable_global_hotkey.is_some() {
should_update_verge_config = true;
}
if home_cards.is_some() {
should_update_verge_config = true;
}
#[cfg(not(target_os = "windows"))]
if redir_enabled.is_some() || redir_port.is_some() {
should_restart_core = true;

View File

@@ -153,6 +153,7 @@ pub fn run() {
// 添加新的命令
cmd::get_running_mode,
cmd::install_service,
cmd::get_app_uptime,
// clash
cmd::get_clash_info,
cmd::patch_clash_config,
@@ -206,6 +207,8 @@ pub fn run() {
cmd::restore_webdav_backup,
// export diagnostic info for issue reporting
cmd::export_diagnostic_info,
// get system info for display
cmd::get_system_info,
]);
#[cfg(debug_assertions)]