aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/src-tauri/src/main.rs
diff options
context:
space:
mode:
authorHsiangNianian <i@jyunko.cn>2026-01-18 13:43:12 +0800
committerHsiangNianian <i@jyunko.cn>2026-01-18 13:43:12 +0800
commit17e8dd78ca5b7aae9baa4f86d38fa755c8af21c5 (patch)
tree1fc3c9adb05264b12ed0fa473b997bfca14716e6 /src-tauri/src/main.rs
parent02520ca62ac5e508e8748b2445171be64f459b6c (diff)
downloadDropOut-17e8dd78ca5b7aae9baa4f86d38fa755c8af21c5.tar.gz
DropOut-17e8dd78ca5b7aae9baa4f86d38fa755c8af21c5.zip
feat(migration): implement shared cache migration with SHA1 dedup
- Add migrate_to_shared_caches() with hard link preference - SHA1-based deduplication across all instances - Copy fallback for cross-filesystem scenarios - Auto-enable use_shared_caches after successful migration - UI shows statistics: moved files, hardlinks/copies, MB saved
Diffstat (limited to 'src-tauri/src/main.rs')
-rw-r--r--src-tauri/src/main.rs52
1 files changed, 51 insertions, 1 deletions
diff --git a/src-tauri/src/main.rs b/src-tauri/src/main.rs
index 6a230c9..a506713 100644
--- a/src-tauri/src/main.rs
+++ b/src-tauri/src/main.rs
@@ -2373,6 +2373,55 @@ async fn assistant_chat_stream(
.await
}
+/// Migrate instance caches to shared global caches
+#[derive(Serialize)]
+struct MigrationResult {
+ moved_files: usize,
+ hardlinks: usize,
+ copies: usize,
+ saved_bytes: u64,
+ saved_mb: f64,
+}
+
+#[tauri::command]
+async fn migrate_shared_caches(
+ window: Window,
+ instance_state: State<'_, core::instance::InstanceState>,
+ config_state: State<'_, core::config::ConfigState>,
+) -> Result<MigrationResult, String> {
+ emit_log!(window, "Starting migration to shared caches...".to_string());
+
+ let app_handle = window.app_handle();
+ let (moved, hardlinks, copies, saved_bytes) =
+ core::instance::migrate_to_shared_caches(app_handle, &instance_state)?;
+
+ let saved_mb = saved_bytes as f64 / (1024.0 * 1024.0);
+
+ emit_log!(
+ window,
+ format!(
+ "Migration complete: {} files moved ({} hardlinks, {} copies), {:.2} MB saved",
+ moved, hardlinks, copies, saved_mb
+ )
+ );
+
+ // Automatically enable shared caches config
+ let mut config = config_state.config.lock().unwrap().clone();
+ config.use_shared_caches = true;
+ drop(config);
+ *config_state.config.lock().unwrap() = config_state.config.lock().unwrap().clone();
+ config_state.config.lock().unwrap().use_shared_caches = true;
+ config_state.save()?;
+
+ Ok(MigrationResult {
+ moved_files: moved,
+ hardlinks,
+ copies,
+ saved_bytes,
+ saved_mb,
+ })
+}
+
fn main() {
tauri::Builder::default()
.plugin(tauri_plugin_fs::init())
@@ -2479,7 +2528,8 @@ fn main() {
get_instance,
set_active_instance,
get_active_instance,
- duplicate_instance
+ duplicate_instance,
+ migrate_shared_caches
])
.run(tauri::generate_context!())
.expect("error while running tauri application");