fix: properly track download progress

This commit is contained in:
zhom
2026-03-02 06:02:12 +04:00
parent 4a56575dbd
commit a723c8b30b
2 changed files with 16 additions and 11 deletions
+5 -4
View File
@@ -179,7 +179,7 @@ export function CreateProfileDialog({
downloadBrowser, downloadBrowser,
loadDownloadedVersions, loadDownloadedVersions,
isVersionDownloaded, isVersionDownloaded,
downloadedVersions, downloadedVersionsMap,
} = useBrowserDownload(); } = useBrowserDownload();
const loadSupportedBrowsers = useCallback(async () => { const loadSupportedBrowsers = useCallback(async () => {
@@ -344,8 +344,9 @@ export function CreateProfileDialog({
if (bestVersion && isVersionDownloaded(bestVersion.version)) { if (bestVersion && isVersionDownloaded(bestVersion.version)) {
return bestVersion; return bestVersion;
} }
if (downloadedVersions.length > 0) { const browserDownloaded = downloadedVersionsMap[browserType ?? ""] ?? [];
const fallbackVersion = downloadedVersions[0]; if (browserDownloaded.length > 0) {
const fallbackVersion = browserDownloaded[0];
const releaseType = const releaseType =
browserType === "firefox-developer" ? "nightly" : "stable"; browserType === "firefox-developer" ? "nightly" : "stable";
return { return {
@@ -355,7 +356,7 @@ export function CreateProfileDialog({
} }
return null; return null;
}, },
[getBestAvailableVersion, isVersionDownloaded, downloadedVersions], [getBestAvailableVersion, isVersionDownloaded, downloadedVersionsMap],
); );
const handleDownload = async (browserStr: string) => { const handleDownload = async (browserStr: string) => {
+11 -7
View File
@@ -49,7 +49,9 @@ export function useBrowserDownload() {
const [availableVersions, setAvailableVersions] = useState<GithubRelease[]>( const [availableVersions, setAvailableVersions] = useState<GithubRelease[]>(
[], [],
); );
const [downloadedVersions, setDownloadedVersions] = useState<string[]>([]); const [downloadedVersionsMap, setDownloadedVersionsMap] = useState<
Record<string, string[]>
>({});
const [downloadingBrowsers, setDownloadingBrowsers] = useState<Set<string>>( const [downloadingBrowsers, setDownloadingBrowsers] = useState<Set<string>>(
new Set(), new Set(),
); );
@@ -166,12 +168,12 @@ export function useBrowserDownload() {
const loadDownloadedVersions = useCallback(async (browserStr: string) => { const loadDownloadedVersions = useCallback(async (browserStr: string) => {
try { try {
const downloadedVersions = await invoke<string[]>( const versions = await invoke<string[]>(
"get_downloaded_browser_versions", "get_downloaded_browser_versions",
{ browserStr }, { browserStr },
); );
setDownloadedVersions(downloadedVersions); setDownloadedVersionsMap((prev) => ({ ...prev, [browserStr]: versions }));
return downloadedVersions; return versions;
} catch (error) { } catch (error) {
console.error("Failed to load downloaded versions:", error); console.error("Failed to load downloaded versions:", error);
throw error; throw error;
@@ -243,9 +245,11 @@ export function useBrowserDownload() {
const isVersionDownloaded = useCallback( const isVersionDownloaded = useCallback(
(version: string) => { (version: string) => {
return downloadedVersions.includes(version); return Object.values(downloadedVersionsMap).some((versions) =>
versions.includes(version),
);
}, },
[downloadedVersions], [downloadedVersionsMap],
); );
// Check if a browser type is currently downloading // Check if a browser type is currently downloading
@@ -434,7 +438,7 @@ export function useBrowserDownload() {
return { return {
availableVersions, availableVersions,
downloadedVersions, downloadedVersionsMap,
isDownloading, isDownloading,
isBrowserDownloading, isBrowserDownloading,
downloadingBrowsers, downloadingBrowsers,