From 1691a7a06b2a241cf7ccc476d4e220493f9b4add Mon Sep 17 00:00:00 2001 From: zhom <2717306+zhom@users.noreply.github.com> Date: Sat, 5 Jul 2025 02:38:17 +0400 Subject: [PATCH] refactor: make mullvad handle links the same way tor browser does --- src-tauri/src/default_browser.rs | 20 ++++++++++++-- src/components/profile-selector-dialog.tsx | 31 +++++++++++++--------- 2 files changed, 36 insertions(+), 15 deletions(-) diff --git a/src-tauri/src/default_browser.rs b/src-tauri/src/default_browser.rs index 332f9b4..ef24bbd 100644 --- a/src-tauri/src/default_browser.rs +++ b/src-tauri/src/default_browser.rs @@ -605,9 +605,25 @@ pub async fn smart_open_url( } } - // For Mullvad browser: skip if running (can't open URLs in running Mullvad) + // For Mullvad browser: Check if any other Mullvad browser is running if profile.browser == "mullvad-browser" { - continue; + let mut other_mullvad_running = false; + for p in &profiles { + if p.browser == "mullvad-browser" + && p.name != profile.name + && runner + .check_browser_status(app_handle.clone(), p) + .await + .unwrap_or(false) + { + other_mullvad_running = true; + break; + } + } + + if other_mullvad_running { + continue; // Skip this one, can't have multiple Mullvad instances + } } // Try to open the URL with this running profile diff --git a/src/components/profile-selector-dialog.tsx b/src/components/profile-selector-dialog.tsx index 1e9fb82..7557084 100644 --- a/src/components/profile-selector-dialog.tsx +++ b/src/components/profile-selector-dialog.tsx @@ -83,12 +83,21 @@ export function ProfileSelectorDialog({ return isRunning; } - // For Mullvad browser: never allow if running - if (profile.browser === "mullvad-browser" && isRunning) { - return false; + // For Mullvad browser: Check if any Mullvad browser is running + if (profile.browser === "mullvad-browser") { + const runningMullvadProfiles = allProfiles.filter( + (p) => p.browser === "mullvad-browser" && runningProfiles.has(p.name), + ); + + // If no Mullvad browser is running, allow any Mullvad profile + if (runningMullvadProfiles.length === 0) { + return true; + } + + // If Mullvad browser(s) are running, only allow the running one(s) + return isRunning; } - // For other browsers: always allow return true; }, [], @@ -148,18 +157,14 @@ export function ProfileSelectorDialog({ const getProfileTooltipContent = (profile: BrowserProfile): string => { const isRunning = runningProfiles.has(profile.name); - if (profile.browser === "tor-browser") { - // If another TOR profile is running, this one is not available + if ( + profile.browser === "tor-browser" || + profile.browser === "mullvad-browser" + ) { + // If another TOR/Mullvad profile is running, this one is not available return "Only 1 instance can run at a time"; } - if (profile.browser === "mullvad-browser") { - if (isRunning) { - return "Only launching the browser is supported, opening them in a running browser is not yet available"; - } - return "Only launching the browser is supported, opening them in a running browser is not yet available"; - } - if (isRunning) { return "URL will open in a new tab in the existing browser window"; }