feat: add log opening functionality in tray menu and update localization
This commit is contained in:
@@ -48,6 +48,7 @@
|
||||
- 允许独立控制订阅自动更新
|
||||
- 托盘 `更多` 中新增 `关闭所有连接` 按钮
|
||||
- 新增左侧菜单栏的排序功能(右键点击左侧菜单栏)
|
||||
- 托盘 `打开目录` 中新增 `应用日志` 和 `内核日志`
|
||||
</details>
|
||||
|
||||
<details>
|
||||
|
||||
@@ -41,6 +41,20 @@ pub fn open_web_url(url: String) -> CmdResult<()> {
|
||||
open::that(url.as_str()).stringify_err()
|
||||
}
|
||||
|
||||
// TODO 后续可以为前端提供接口,当前作为托盘菜单使用
|
||||
/// 打开 Verge 最新日志
|
||||
#[tauri::command]
|
||||
pub async fn open_app_log() -> CmdResult<()> {
|
||||
open::that(dirs::app_latest_log().stringify_err()?).stringify_err()
|
||||
}
|
||||
|
||||
// TODO 后续可以为前端提供接口,当前作为托盘菜单使用
|
||||
/// 打开 Clash 最新日志
|
||||
#[tauri::command]
|
||||
pub async fn open_core_log() -> CmdResult<()> {
|
||||
open::that(dirs::clash_latest_log().stringify_err()?).stringify_err()
|
||||
}
|
||||
|
||||
/// 打开/关闭开发者工具
|
||||
#[tauri::command]
|
||||
pub fn open_devtools(app_handle: AppHandle) {
|
||||
|
||||
@@ -39,6 +39,8 @@ define_menu! {
|
||||
core_dir => CORE_DIR, "tray_core_dir", "Core Dir",
|
||||
logs_dir => LOGS_DIR, "tray_logs_dir", "Logs Dir",
|
||||
open_dir => OPEN_DIR, "tray_open_dir", "Open Dir",
|
||||
app_log => APP_LOG, "tray_app_log", "Open App Log",
|
||||
core_log => CORE_LOG, "tray_core_log", "Open Core Log",
|
||||
restart_clash => RESTART_CLASH, "tray_restart_clash", "Restart Clash Core",
|
||||
restart_app => RESTART_APP, "tray_restart_app", "Restart App",
|
||||
verge_version => VERGE_VERSION, "tray_verge_version", "Verge Version",
|
||||
|
||||
@@ -1034,12 +1034,34 @@ async fn create_tray_menu(
|
||||
None::<&str>,
|
||||
)?;
|
||||
|
||||
let open_app_log = &MenuItem::with_id(
|
||||
app_handle,
|
||||
MenuIds::APP_LOG,
|
||||
&texts.app_log,
|
||||
true,
|
||||
None::<&str>,
|
||||
)?;
|
||||
|
||||
let open_core_log = &MenuItem::with_id(
|
||||
app_handle,
|
||||
MenuIds::CORE_LOG,
|
||||
&texts.core_log,
|
||||
true,
|
||||
None::<&str>,
|
||||
)?;
|
||||
|
||||
let open_dir = &Submenu::with_id_and_items(
|
||||
app_handle,
|
||||
MenuIds::OPEN_DIR,
|
||||
&texts.open_dir,
|
||||
true,
|
||||
&[open_app_dir, open_core_dir, open_logs_dir],
|
||||
&[
|
||||
open_app_dir,
|
||||
open_core_dir,
|
||||
open_logs_dir,
|
||||
open_app_log,
|
||||
open_core_log,
|
||||
],
|
||||
)?;
|
||||
|
||||
let restart_clash = &MenuItem::with_id(
|
||||
@@ -1169,6 +1191,12 @@ fn on_menu_event(_: &AppHandle, event: MenuEvent) {
|
||||
MenuIds::LOGS_DIR => {
|
||||
let _ = cmd::open_logs_dir().await;
|
||||
}
|
||||
MenuIds::APP_LOG => {
|
||||
let _ = cmd::open_app_log().await;
|
||||
}
|
||||
MenuIds::CORE_LOG => {
|
||||
let _ = cmd::open_core_log().await;
|
||||
}
|
||||
MenuIds::RESTART_CLASH => feat::restart_clash_core().await,
|
||||
MenuIds::RESTART_APP => feat::restart_app().await,
|
||||
MenuIds::LIGHTWEIGHT_MODE => {
|
||||
|
||||
@@ -141,6 +141,8 @@ mod app_init {
|
||||
cmd::open_logs_dir,
|
||||
cmd::open_web_url,
|
||||
cmd::open_core_dir,
|
||||
cmd::open_app_log,
|
||||
cmd::open_core_log,
|
||||
cmd::get_portable_flag,
|
||||
cmd::get_network_interfaces,
|
||||
cmd::get_system_hostname,
|
||||
|
||||
@@ -1,4 +1,8 @@
|
||||
use crate::{core::handle, logging, utils::logging::Type};
|
||||
use crate::{
|
||||
core::{CoreManager, handle, manager::RunningMode},
|
||||
logging,
|
||||
utils::logging::Type,
|
||||
};
|
||||
use anyhow::Result;
|
||||
use async_trait::async_trait;
|
||||
use once_cell::sync::OnceCell;
|
||||
@@ -122,6 +126,11 @@ pub fn app_logs_dir() -> Result<PathBuf> {
|
||||
Ok(app_home_dir()?.join("logs"))
|
||||
}
|
||||
|
||||
// latest verge log
|
||||
pub fn app_latest_log() -> Result<PathBuf> {
|
||||
Ok(app_logs_dir()?.join("latest.log"))
|
||||
}
|
||||
|
||||
/// local backups dir
|
||||
pub fn local_backup_dir() -> Result<PathBuf> {
|
||||
let dir = app_home_dir()?.join(BACKUP_DIR);
|
||||
@@ -167,6 +176,15 @@ pub fn service_log_dir() -> Result<PathBuf> {
|
||||
Ok(log_dir)
|
||||
}
|
||||
|
||||
pub fn clash_latest_log() -> Result<PathBuf> {
|
||||
match *CoreManager::global().get_running_mode() {
|
||||
RunningMode::Service => Ok(service_log_dir()?.join("service_latest.log")),
|
||||
RunningMode::Sidecar | RunningMode::NotRunning => {
|
||||
Ok(sidecar_log_dir()?.join("sidecar_latest.log"))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
pub fn path_to_str(path: &PathBuf) -> Result<&str> {
|
||||
let path_str = path
|
||||
.as_os_str()
|
||||
|
||||
@@ -713,5 +713,7 @@
|
||||
"Allow Auto Update": "Allow Auto Update",
|
||||
"Menu reorder mode": "Menu reorder mode",
|
||||
"Unlock menu order": "Unlock menu order",
|
||||
"Lock menu order": "Lock menu order"
|
||||
"Lock menu order": "Lock menu order",
|
||||
"Open App Log": "Open App Log",
|
||||
"Open Core Log": "Open Core Log"
|
||||
}
|
||||
|
||||
@@ -713,5 +713,7 @@
|
||||
"Allow Auto Update": "允许自动更新",
|
||||
"Menu reorder mode": "菜单排序模式",
|
||||
"Unlock menu order": "解锁菜单排序",
|
||||
"Lock menu order": "锁定菜单排序"
|
||||
"Lock menu order": "锁定菜单排序",
|
||||
"Open App Log": "应用日志",
|
||||
"Open Core Log": "内核日志"
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user