fixed offline mode issue

This commit is contained in:
Dmitri 2026-04-14 19:43:54 +04:00
parent 556a0c0700
commit ff36f318fc

View File

@ -242,7 +242,8 @@ class DownloadManagerClass {
const job = this.queue.shift(); const job = this.queue.shift();
if (!job) break; if (!job) break;
this.activeDownloads.set(job.url, job); // Use storageKey as Map key (stable) instead of url (can change on fallback)
this.activeDownloads.set(job.storageKey, job);
this.downloadAsset(job); this.downloadAsset(job);
} }
@ -466,7 +467,7 @@ class DownloadManagerClass {
job.reject?.(error instanceof Error ? error : new Error(errorMessage)); job.reject?.(error instanceof Error ? error : new Error(errorMessage));
} }
} finally { } finally {
this.activeDownloads.delete(job.url); this.activeDownloads.delete(job.storageKey);
downloadEventBus.emitQueueUpdate(); downloadEventBus.emitQueueUpdate();
this.processQueue(); this.processQueue();
} }
@ -507,12 +508,12 @@ class DownloadManagerClass {
* Cancel a specific download * Cancel a specific download
*/ */
cancelJob(jobId: string): void { cancelJob(jobId: string): void {
// Check active downloads // Check active downloads (keyed by storageKey)
const entries = Array.from(this.activeDownloads.entries()); const entries = Array.from(this.activeDownloads.entries());
for (const [url, job] of entries) { for (const [storageKey, job] of entries) {
if (job.id === jobId) { if (job.id === jobId) {
job.abortController?.abort(); job.abortController?.abort();
this.activeDownloads.delete(url); this.activeDownloads.delete(storageKey);
OfflineDbManager.removeFromQueue(jobId); OfflineDbManager.removeFromQueue(jobId);
downloadEventBus.emitQueueUpdate(); downloadEventBus.emitQueueUpdate();
return; return;
@ -532,12 +533,12 @@ class DownloadManagerClass {
* Cancel all downloads for a project * Cancel all downloads for a project
*/ */
cancelProjectDownloads(projectId: string): void { cancelProjectDownloads(projectId: string): void {
// Cancel active downloads // Cancel active downloads (keyed by storageKey)
const entries = Array.from(this.activeDownloads.entries()); const entries = Array.from(this.activeDownloads.entries());
for (const [url, job] of entries) { for (const [storageKey, job] of entries) {
if (job.projectId === projectId) { if (job.projectId === projectId) {
job.abortController?.abort(); job.abortController?.abort();
this.activeDownloads.delete(url); this.activeDownloads.delete(storageKey);
} }
} }