From e45f4a792f81c778bd14f1fc4b01137f23962cb7 Mon Sep 17 00:00:00 2001 From: zhom <2717306+zhom@users.noreply.github.com> Date: Sat, 21 Mar 2026 10:40:52 +0400 Subject: [PATCH] fix: remove browser cleanup from profile sync --- src-tauri/src/downloaded_browsers_registry.rs | 11 +++ src-tauri/src/sync/scheduler.rs | 80 ++----------------- 2 files changed, 17 insertions(+), 74 deletions(-) diff --git a/src-tauri/src/downloaded_browsers_registry.rs b/src-tauri/src/downloaded_browsers_registry.rs index 7a0b8f7..6791b70 100644 --- a/src-tauri/src/downloaded_browsers_registry.rs +++ b/src-tauri/src/downloaded_browsers_registry.rs @@ -513,6 +513,11 @@ impl DownloadedBrowsersRegistry { browser: &str, version: &str, ) -> Result<(), Box> { + // Never remove a directory if a download is in progress for this browser/version + if crate::downloader::is_downloading(browser, version) { + return Ok(()); + } + let binaries_dir = crate::app_dirs::binaries_dir(); let version_dir = binaries_dir.join(browser).join(version); @@ -593,6 +598,12 @@ impl DownloadedBrowsersRegistry { continue; } + // Skip if a download is in progress for this browser/version + if crate::downloader::is_downloading(browser_name, version_name) { + has_non_empty_versions = true; + continue; + } + // Check if version directory is empty match fs::read_dir(&version_path) { Ok(mut entries) => { diff --git a/src-tauri/src/sync/scheduler.rs b/src-tauri/src/sync/scheduler.rs index 029529a..574392c 100644 --- a/src-tauri/src/sync/scheduler.rs +++ b/src-tauri/src/sync/scheduler.rs @@ -467,31 +467,12 @@ impl SyncScheduler { }); } - // Wait for all parallel syncs to finish - while let Some(result) = sync_set.join_next().await { - if let Err(e) = result { - log::error!("Profile sync task panicked: {e}"); - } - } - - // Trigger cleanup if everything is done - let all_done = { - let in_flight = self.in_flight_profiles.lock().await; - in_flight.is_empty() - && self.pending_profiles.lock().await.is_empty() - && self.pending_proxies.lock().await.is_empty() - && self.pending_groups.lock().await.is_empty() - && self.pending_vpns.lock().await.is_empty() - && self.pending_extensions.lock().await.is_empty() - && self.pending_extension_groups.lock().await.is_empty() - }; - if all_done { - log::debug!("All profile syncs completed, triggering cleanup"); - let registry = crate::downloaded_browsers_registry::DownloadedBrowsersRegistry::instance(); - if let Err(e) = registry.cleanup_unused_binaries() { - log::warn!("Cleanup after sync failed: {e}"); - } else { - log::debug!("Cleanup after sync completed successfully"); + // Wait for all parallel syncs to finish (only if we actually spawned any) + if !sync_set.is_empty() { + while let Some(result) = sync_set.join_next().await { + if let Err(e) = result { + log::error!("Profile sync task panicked: {e}"); + } } } } @@ -546,16 +527,6 @@ impl SyncScheduler { } // Check if all sync work is complete after proxies finish - if !self.is_sync_in_progress().await { - log::debug!("All syncs completed after proxy sync, triggering cleanup"); - let registry = - crate::downloaded_browsers_registry::DownloadedBrowsersRegistry::instance(); - if let Err(e) = registry.cleanup_unused_binaries() { - log::warn!("Cleanup after sync failed: {e}"); - } else { - log::debug!("Cleanup after sync completed successfully"); - } - } } Err(e) => { log::error!("Failed to create sync engine: {}", e); @@ -613,16 +584,6 @@ impl SyncScheduler { } // Check if all sync work is complete after groups finish - if !self.is_sync_in_progress().await { - log::debug!("All syncs completed after group sync, triggering cleanup"); - let registry = - crate::downloaded_browsers_registry::DownloadedBrowsersRegistry::instance(); - if let Err(e) = registry.cleanup_unused_binaries() { - log::warn!("Cleanup after sync failed: {e}"); - } else { - log::debug!("Cleanup after sync completed successfully"); - } - } } Err(e) => { log::error!("Failed to create sync engine: {}", e); @@ -675,17 +636,6 @@ impl SyncScheduler { } } } - - if !self.is_sync_in_progress().await { - log::debug!("All syncs completed after VPN sync, triggering cleanup"); - let registry = - crate::downloaded_browsers_registry::DownloadedBrowsersRegistry::instance(); - if let Err(e) = registry.cleanup_unused_binaries() { - log::warn!("Cleanup after sync failed: {e}"); - } else { - log::debug!("Cleanup after sync completed successfully"); - } - } } Err(e) => { log::error!("Failed to create sync engine: {}", e); @@ -715,15 +665,6 @@ impl SyncScheduler { log::error!("Failed to sync extension {}: {}", ext_id, e); } } - - if !self.is_sync_in_progress().await { - log::debug!("All syncs completed after extension sync, triggering cleanup"); - let registry = - crate::downloaded_browsers_registry::DownloadedBrowsersRegistry::instance(); - if let Err(e) = registry.cleanup_unused_binaries() { - log::warn!("Cleanup after sync failed: {e}"); - } - } } Err(e) => { log::error!("Failed to create sync engine: {}", e); @@ -753,15 +694,6 @@ impl SyncScheduler { log::error!("Failed to sync extension group {}: {}", group_id, e); } } - - if !self.is_sync_in_progress().await { - log::debug!("All syncs completed after extension group sync, triggering cleanup"); - let registry = - crate::downloaded_browsers_registry::DownloadedBrowsersRegistry::instance(); - if let Err(e) = registry.cleanup_unused_binaries() { - log::warn!("Cleanup after sync failed: {e}"); - } - } } Err(e) => { log::error!("Failed to create sync engine: {}", e);