From b500c28b96da4c13466a0df870bedb5c171f9869 Mon Sep 17 00:00:00 2001 From: zhom <2717306+zhom@users.noreply.github.com> Date: Fri, 25 Jul 2025 09:19:31 +0400 Subject: [PATCH] fix: allow user download browser if there is only nightly version available --- src/components/create-profile-dialog.tsx | 93 ++++++++++++++++-------- 1 file changed, 63 insertions(+), 30 deletions(-) diff --git a/src/components/create-profile-dialog.tsx b/src/components/create-profile-dialog.tsx index 076e603..ee258cc 100644 --- a/src/components/create-profile-dialog.tsx +++ b/src/components/create-profile-dialog.tsx @@ -188,18 +188,35 @@ export function CreateProfileDialog({ } }, [selectedBrowser, loadReleaseTypes]); + // Helper function to get the best available version and release type + const getBestAvailableVersion = useCallback( + (releaseTypes: BrowserReleaseTypes) => { + if (releaseTypes.stable) { + return { version: releaseTypes.stable, releaseType: "stable" as const }; + } + if (releaseTypes.nightly) { + return { + version: releaseTypes.nightly, + releaseType: "nightly" as const, + }; + } + return null; + }, + [], + ); + const handleDownload = async (browserStr: string) => { const releaseTypes = browserStr === "camoufox" ? camoufoxReleaseTypes : availableReleaseTypes; - const latestStableVersion = releaseTypes.stable; + const bestVersion = getBestAvailableVersion(releaseTypes); - if (!latestStableVersion) { - console.error("No stable version available for download"); + if (!bestVersion) { + console.error("No version available for download"); return; } try { - await downloadBrowser(browserStr, latestStableVersion); + await downloadBrowser(browserStr, bestVersion.version); } catch (error) { console.error("Failed to download browser:", error); } @@ -216,24 +233,25 @@ export function CreateProfileDialog({ return; } - // Use the latest stable version by default - const latestStableVersion = availableReleaseTypes.stable; - if (!latestStableVersion) { - console.error("No stable version available"); + // Use the best available version (stable preferred, nightly as fallback) + const bestVersion = getBestAvailableVersion(availableReleaseTypes); + if (!bestVersion) { + console.error("No version available"); return; } await onCreateProfile({ name: profileName.trim(), browserStr: selectedBrowser, - version: latestStableVersion, - releaseType: "stable", + version: bestVersion.version, + releaseType: bestVersion.releaseType, proxyId: selectedProxyId, }); } else { - // Anti-detect tab - always use Camoufox with latest version - const latestCamoufoxVersion = camoufoxReleaseTypes.stable; - if (!latestCamoufoxVersion) { + // Anti-detect tab - always use Camoufox with best available version + const bestCamoufoxVersion = + getBestAvailableVersion(camoufoxReleaseTypes); + if (!bestCamoufoxVersion) { console.error("No Camoufox version available"); return; } @@ -241,8 +259,8 @@ export function CreateProfileDialog({ await onCreateProfile({ name: profileName.trim(), browserStr: "camoufox" as BrowserTypeString, - version: latestCamoufoxVersion, - releaseType: "stable", + version: bestCamoufoxVersion.version, + releaseType: bestCamoufoxVersion.releaseType, proxyId: selectedProxyId, camoufoxConfig, }); @@ -273,10 +291,12 @@ export function CreateProfileDialog({ if (!profileName.trim()) return true; if (activeTab === "regular") { - return !selectedBrowser || !availableReleaseTypes.stable; + return ( + !selectedBrowser || !getBestAvailableVersion(availableReleaseTypes) + ); } else { // For anti-detect, we need camoufox to be available - return !camoufoxReleaseTypes.stable; + return !getBestAvailableVersion(camoufoxReleaseTypes); } }; @@ -288,8 +308,8 @@ export function CreateProfileDialog({ const isBrowserVersionAvailable = (browserStr: string) => { const releaseTypes = browserStr === "camoufox" ? camoufoxReleaseTypes : availableReleaseTypes; - const latestStableVersion = releaseTypes.stable; - return latestStableVersion && isVersionDownloaded(latestStableVersion); + const bestVersion = getBestAvailableVersion(releaseTypes); + return bestVersion && isVersionDownloaded(bestVersion.version); }; // Get the selected OS for warning @@ -357,12 +377,15 @@ export function CreateProfileDialog({ {selectedBrowser && (
- Latest stable version ( - {availableReleaseTypes.stable}) needs to be - downloaded + {(() => { + const bestVersion = getBestAvailableVersion( + availableReleaseTypes, + ); + return `${bestVersion?.releaseType === "stable" ? "Latest stable" : "Latest nightly"} version (${bestVersion?.version}) needs to be downloaded`; + })()}
- Camoufox version ({camoufoxReleaseTypes.stable}) needs - to be downloaded + {(() => { + const bestVersion = + getBestAvailableVersion(camoufoxReleaseTypes); + return `Camoufox ${bestVersion?.releaseType} version (${bestVersion?.version}) needs to be downloaded`; + })()}