mirror of
https://github.com/clash-verge-rev/clash-verge-rev.git
synced 2026-01-29 00:35:38 +08:00
feat: add log opening functionality in tray menu and update localization
This commit is contained in:
@@ -48,6 +48,7 @@
|
|||||||
- 允许独立控制订阅自动更新
|
- 允许独立控制订阅自动更新
|
||||||
- 托盘 `更多` 中新增 `关闭所有连接` 按钮
|
- 托盘 `更多` 中新增 `关闭所有连接` 按钮
|
||||||
- 新增左侧菜单栏的排序功能(右键点击左侧菜单栏)
|
- 新增左侧菜单栏的排序功能(右键点击左侧菜单栏)
|
||||||
|
- 托盘 `打开目录` 中新增 `应用日志` 和 `内核日志`
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|||||||
@@ -41,6 +41,20 @@ pub fn open_web_url(url: String) -> CmdResult<()> {
|
|||||||
open::that(url.as_str()).stringify_err()
|
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]
|
#[tauri::command]
|
||||||
pub fn open_devtools(app_handle: AppHandle) {
|
pub fn open_devtools(app_handle: AppHandle) {
|
||||||
|
|||||||
@@ -39,6 +39,8 @@ define_menu! {
|
|||||||
core_dir => CORE_DIR, "tray_core_dir", "Core Dir",
|
core_dir => CORE_DIR, "tray_core_dir", "Core Dir",
|
||||||
logs_dir => LOGS_DIR, "tray_logs_dir", "Logs Dir",
|
logs_dir => LOGS_DIR, "tray_logs_dir", "Logs Dir",
|
||||||
open_dir => OPEN_DIR, "tray_open_dir", "Open 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_clash => RESTART_CLASH, "tray_restart_clash", "Restart Clash Core",
|
||||||
restart_app => RESTART_APP, "tray_restart_app", "Restart App",
|
restart_app => RESTART_APP, "tray_restart_app", "Restart App",
|
||||||
verge_version => VERGE_VERSION, "tray_verge_version", "Verge Version",
|
verge_version => VERGE_VERSION, "tray_verge_version", "Verge Version",
|
||||||
|
|||||||
@@ -1034,12 +1034,34 @@ async fn create_tray_menu(
|
|||||||
None::<&str>,
|
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(
|
let open_dir = &Submenu::with_id_and_items(
|
||||||
app_handle,
|
app_handle,
|
||||||
MenuIds::OPEN_DIR,
|
MenuIds::OPEN_DIR,
|
||||||
&texts.open_dir,
|
&texts.open_dir,
|
||||||
true,
|
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(
|
let restart_clash = &MenuItem::with_id(
|
||||||
@@ -1169,6 +1191,12 @@ fn on_menu_event(_: &AppHandle, event: MenuEvent) {
|
|||||||
MenuIds::LOGS_DIR => {
|
MenuIds::LOGS_DIR => {
|
||||||
let _ = cmd::open_logs_dir().await;
|
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_CLASH => feat::restart_clash_core().await,
|
||||||
MenuIds::RESTART_APP => feat::restart_app().await,
|
MenuIds::RESTART_APP => feat::restart_app().await,
|
||||||
MenuIds::LIGHTWEIGHT_MODE => {
|
MenuIds::LIGHTWEIGHT_MODE => {
|
||||||
|
|||||||
@@ -141,6 +141,8 @@ mod app_init {
|
|||||||
cmd::open_logs_dir,
|
cmd::open_logs_dir,
|
||||||
cmd::open_web_url,
|
cmd::open_web_url,
|
||||||
cmd::open_core_dir,
|
cmd::open_core_dir,
|
||||||
|
cmd::open_app_log,
|
||||||
|
cmd::open_core_log,
|
||||||
cmd::get_portable_flag,
|
cmd::get_portable_flag,
|
||||||
cmd::get_network_interfaces,
|
cmd::get_network_interfaces,
|
||||||
cmd::get_system_hostname,
|
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 anyhow::Result;
|
||||||
use async_trait::async_trait;
|
use async_trait::async_trait;
|
||||||
use once_cell::sync::OnceCell;
|
use once_cell::sync::OnceCell;
|
||||||
@@ -122,6 +126,11 @@ pub fn app_logs_dir() -> Result<PathBuf> {
|
|||||||
Ok(app_home_dir()?.join("logs"))
|
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
|
/// local backups dir
|
||||||
pub fn local_backup_dir() -> Result<PathBuf> {
|
pub fn local_backup_dir() -> Result<PathBuf> {
|
||||||
let dir = app_home_dir()?.join(BACKUP_DIR);
|
let dir = app_home_dir()?.join(BACKUP_DIR);
|
||||||
@@ -167,6 +176,15 @@ pub fn service_log_dir() -> Result<PathBuf> {
|
|||||||
Ok(log_dir)
|
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> {
|
pub fn path_to_str(path: &PathBuf) -> Result<&str> {
|
||||||
let path_str = path
|
let path_str = path
|
||||||
.as_os_str()
|
.as_os_str()
|
||||||
|
|||||||
@@ -713,5 +713,7 @@
|
|||||||
"Allow Auto Update": "Allow Auto Update",
|
"Allow Auto Update": "Allow Auto Update",
|
||||||
"Menu reorder mode": "Menu reorder mode",
|
"Menu reorder mode": "Menu reorder mode",
|
||||||
"Unlock menu order": "Unlock menu order",
|
"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": "允许自动更新",
|
"Allow Auto Update": "允许自动更新",
|
||||||
"Menu reorder mode": "菜单排序模式",
|
"Menu reorder mode": "菜单排序模式",
|
||||||
"Unlock menu order": "解锁菜单排序",
|
"Unlock menu order": "解锁菜单排序",
|
||||||
"Lock menu order": "锁定菜单排序"
|
"Lock menu order": "锁定菜单排序",
|
||||||
|
"Open App Log": "应用日志",
|
||||||
|
"Open Core Log": "内核日志"
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user