fixed offline mode issue
This commit is contained in:
parent
556a0c0700
commit
ff36f318fc
@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user