mirror of
https://github.com/clash-verge-rev/clash-verge-rev.git
synced 2026-10-20 00:12:37 +08:00
* refactor(ipc): generate bindings with Specta * fix(profile): project IPC inputs to consumed fields * fix(events): remove unused refresh payloads * fix(webdav): return only consumed backup metadata * fix(network): trim unused interface metadata * fix(sysinfo): return only displayed system fields * chore(knip): check generated runtime exports * fix(proxy): confirm runtime chain updates before UI changes * fix(clipboard): propagate proxy environment copy failures * refactor(dns): remove ignored runtime patch * refactor(core): trim unused upgrade response fields * refactor(ipc): avoid redundant response copies * refactor(proxy): clarify automatic proxy query naming * chore(tests): remove added IPC regression tests * refactor(ipc): enforce typed command boundaries * chore(contract): check generated bindings before push * refactor(ipc): remove unused proxy liveness payloads
104 lines
2.6 KiB
Rust
104 lines
2.6 KiB
Rust
use super::CmdResult;
|
|
use crate::{
|
|
cmd::StringifyErr as _,
|
|
core::{SilentUpdater, updater::DownloadEvent},
|
|
feat,
|
|
utils::dirs,
|
|
};
|
|
use smartstring::alias::String;
|
|
use tauri::{AppHandle, Manager as _, ipc::Channel};
|
|
|
|
#[tauri::command]
|
|
#[specta::specta]
|
|
pub async fn open_app_dir() -> CmdResult<()> {
|
|
let app_dir = dirs::app_home_dir().stringify_err()?;
|
|
open::that(app_dir).stringify_err()
|
|
}
|
|
|
|
#[tauri::command]
|
|
#[specta::specta]
|
|
pub async fn open_core_dir() -> CmdResult<()> {
|
|
let core_dir = tauri::utils::platform::current_exe().stringify_err()?;
|
|
let core_dir = core_dir.parent().ok_or("failed to get core dir")?;
|
|
open::that(core_dir).stringify_err()
|
|
}
|
|
|
|
#[tauri::command]
|
|
#[specta::specta]
|
|
pub async fn open_logs_dir() -> CmdResult<()> {
|
|
let log_dir = dirs::app_logs_dir().stringify_err()?;
|
|
open::that(log_dir).stringify_err()
|
|
}
|
|
|
|
#[tauri::command]
|
|
#[specta::specta]
|
|
pub fn open_devtools(app_handle: AppHandle) {
|
|
if let Some(window) = app_handle.get_webview_window("main") {
|
|
if !window.is_devtools_open() {
|
|
window.open_devtools();
|
|
} else {
|
|
window.close_devtools();
|
|
}
|
|
}
|
|
}
|
|
|
|
#[tauri::command]
|
|
#[specta::specta]
|
|
pub async fn exit_app() {
|
|
feat::quit().await;
|
|
}
|
|
|
|
#[tauri::command]
|
|
#[specta::specta]
|
|
pub async fn restart_app() -> CmdResult<()> {
|
|
feat::restart_app().await;
|
|
Ok(())
|
|
}
|
|
|
|
#[tauri::command]
|
|
#[specta::specta]
|
|
pub async fn install_update(
|
|
app_handle: AppHandle,
|
|
version: std::string::String,
|
|
on_event: Channel<DownloadEvent>,
|
|
) -> CmdResult<bool> {
|
|
let version: String = version.into();
|
|
SilentUpdater::global()
|
|
.install_update(&app_handle, &version, |event| {
|
|
let _ = on_event.send(event);
|
|
})
|
|
.await
|
|
.stringify_err()
|
|
}
|
|
|
|
#[tauri::command]
|
|
#[specta::specta]
|
|
pub fn cancel_update_download() {
|
|
SilentUpdater::global().cancel_download();
|
|
}
|
|
|
|
#[tauri::command]
|
|
#[specta::specta]
|
|
pub fn get_app_dir() -> CmdResult<std::string::String> {
|
|
let app_home_dir = dirs::app_home_dir().stringify_err()?.to_string_lossy().into();
|
|
Ok(app_home_dir)
|
|
}
|
|
|
|
#[tauri::command]
|
|
#[specta::specta]
|
|
pub async fn download_icon_cache(
|
|
url: std::string::String,
|
|
name: std::string::String,
|
|
) -> CmdResult<std::string::String> {
|
|
let url: String = url.into();
|
|
let name: String = name.into();
|
|
feat::download_icon_cache(url, name).await.map(Into::into)
|
|
}
|
|
|
|
#[tauri::command]
|
|
#[specta::specta]
|
|
pub async fn copy_icon_file(path: std::string::String, icon_info: feat::IconInfo) -> CmdResult<std::string::String> {
|
|
let path: String = path.into();
|
|
feat::copy_icon_file(path, icon_info).await.map(Into::into)
|
|
}
|