From 7414477bbdf428dfea3f300016fb8c39729e0e2f Mon Sep 17 00:00:00 2001 From: Ap_Tx <3045929398@qq.com> Date: Sat, 3 Oct 2026 09:32:46 +0800 Subject: [PATCH] =?UTF-8?q?feat(backup):=20=E5=AE=9E=E4=BE=8B=E5=A4=87?= =?UTF-8?q?=E4=BB=BD=E7=AC=AC3=E8=BD=AE=E2=80=94=E2=80=94=E6=B3=A8?= =?UTF-8?q?=E5=86=8C=2015=20=E4=B8=AA=20Tauri=20=E5=A4=87=E4=BB=BD?= =?UTF-8?q?=E5=91=BD=E4=BB=A4=E5=B9=B6=E8=A1=A5=E9=BD=90=20ACL=20=E6=9D=83?= =?UTF-8?q?=E9=99=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/app/build.rs | 15 ++++ apps/app/src/api/instance/mod.rs | 137 +++++++++++++++++++++++++++++++ 2 files changed, 152 insertions(+) diff --git a/apps/app/build.rs b/apps/app/build.rs index 7bd7295..a418b53 100644 --- a/apps/app/build.rs +++ b/apps/app/build.rs @@ -428,6 +428,21 @@ fn main() { InlinedPlugin::new() .commands(&[ "instance_remove", + "instance_get_backup_repository_status", + "instance_move_backup_repository", + "instance_get_backup_config", + "instance_normalize_backup_exclusion", + "instance_enable_backups", + "instance_update_backup_exclusions", + "instance_disable_backups", + "instance_start_backup", + "instance_cancel_backup", + "instance_list_backup_operations", + "instance_list_backups", + "instance_delete_backup", + "instance_get_backup_restore_preview", + "instance_restore_backup", + "instance_get_backup_delete_summary", "instance_create_direct_link", "instance_sync_direct_links", "instance_get", diff --git a/apps/app/src/api/instance/mod.rs b/apps/app/src/api/instance/mod.rs index 300dc79..4e0d252 100644 --- a/apps/app/src/api/instance/mod.rs +++ b/apps/app/src/api/instance/mod.rs @@ -25,6 +25,21 @@ pub fn init() -> tauri::plugin::TauriPlugin { tauri::plugin::Builder::new("instance") .invoke_handler(tauri::generate_handler![ instance_remove, + instance_get_backup_repository_status, + instance_move_backup_repository, + instance_get_backup_config, + instance_normalize_backup_exclusion, + instance_enable_backups, + instance_update_backup_exclusions, + instance_disable_backups, + instance_start_backup, + instance_cancel_backup, + instance_list_backup_operations, + instance_list_backups, + instance_delete_backup, + instance_get_backup_restore_preview, + instance_restore_backup, + instance_get_backup_delete_summary, instance_create_direct_link, instance_sync_direct_links, instance_get, @@ -1699,3 +1714,125 @@ pub async fn instance_open_screenshot( .map_err(|e| std::io::Error::other(e.to_string()))?; Ok(()) } + +// ===== 实例备份命令(移植自 Axolotl) ===== + +#[tauri::command] +pub async fn instance_get_backup_repository_status() -> Result< + theseus::instance::BackupRepositoryStatus, +> { + Ok(theseus::instance::get_backup_repository_status().await?) +} + +#[tauri::command] +pub async fn instance_move_backup_repository( + destination: PathBuf, +) -> Result { + Ok(theseus::instance::move_backup_repository(destination).await?) +} + +#[tauri::command] +pub async fn instance_get_backup_config( + instance_id: &str, +) -> Result { + Ok(theseus::instance::get_backup_config(instance_id).await?) +} + +#[tauri::command] +pub async fn instance_normalize_backup_exclusion( + instance_id: &str, + selected_path: PathBuf, + kind: theseus::instance::BackupExclusionKind, +) -> Result { + Ok(theseus::instance::get_backup_exclusion_from_path( + instance_id, + selected_path, + kind, + ) + .await?) +} + +#[tauri::command] +pub async fn instance_enable_backups( + instance_id: &str, + excluded_paths: Vec, +) -> Result { + Ok(theseus::instance::enable_backups(instance_id, excluded_paths).await?) +} + +#[tauri::command] +pub async fn instance_update_backup_exclusions( + instance_id: &str, + excluded_paths: Vec, +) -> Result { + Ok( + theseus::instance::update_backup_exclusions( + instance_id, + excluded_paths, + ) + .await?, + ) +} + +#[tauri::command] +pub async fn instance_disable_backups(instance_id: &str) -> Result<()> { + Ok(theseus::instance::disable_backups(instance_id).await?) +} + +#[tauri::command] +pub async fn instance_start_backup(instance_id: String) -> Result { + Ok(theseus::instance::start_backup_snapshot(instance_id).await?) +} + +#[tauri::command] +pub async fn instance_cancel_backup( + operation_id: uuid::Uuid, +) -> Result { + Ok(theseus::instance::cancel_backup(operation_id).await?) +} + +#[tauri::command] +pub async fn instance_list_backup_operations( + instance_id: Option, + active_only: bool, +) -> Result> { + Ok(theseus::instance::list_backup_operations( + instance_id.as_deref(), + active_only, + ) + .await?) +} + +#[tauri::command] +pub async fn instance_list_backups( + instance_id: &str, +) -> Result> { + Ok(theseus::instance::list_backup_snapshots(instance_id).await?) +} + +#[tauri::command] +pub async fn instance_delete_backup(snapshot_id: &str) -> Result<()> { + Ok(theseus::instance::delete_backup_snapshot(snapshot_id).await?) +} + +#[tauri::command] +pub async fn instance_get_backup_restore_preview( + snapshot_id: &str, +) -> Result { + Ok(theseus::instance::get_backup_restore_preview(snapshot_id).await?) +} + +#[tauri::command] +pub async fn instance_restore_backup( + snapshot_id: &str, + plan_token: &str, +) -> Result { + Ok(theseus::instance::restore_snapshot(snapshot_id, plan_token).await?) +} + +#[tauri::command] +pub async fn instance_get_backup_delete_summary( + instance_id: &str, +) -> Result { + Ok(theseus::instance::get_backup_delete_summary(instance_id).await?) +}