diff --git a/apps/mobile/app/hooks/use-app-events.tsx b/apps/mobile/app/hooks/use-app-events.tsx index 8ef5be143..99e9aa5e7 100644 --- a/apps/mobile/app/hooks/use-app-events.tsx +++ b/apps/mobile/app/hooks/use-app-events.tsx @@ -561,6 +561,7 @@ export const useAppEvents = () => { initialUrl: string; backupDidWait: boolean; isConnectingSSE: boolean; + attachmentsCachedOfflineMode: boolean; }> >({}); @@ -655,7 +656,11 @@ export const useAppEvents = () => { } } - if (SettingsService.getProperty("offlineMode")) { + if ( + SettingsService.getProperty("offlineMode") && + !refValues.current.attachmentsCachedOfflineMode + ) { + refValues.current.attachmentsCachedOfflineMode = true; db.attachments.cacheAttachments().catch(() => { /* empty */ }); diff --git a/packages/core/src/database/fs.ts b/packages/core/src/database/fs.ts index 8bfe8bf25..648ce5187 100644 --- a/packages/core/src/database/fs.ts +++ b/packages/core/src/database/fs.ts @@ -65,7 +65,16 @@ export class FileStorage { let current = 0; const token = await this.tokenManager.getAccessToken(); const total = files.length; - const group = this.groups.downloads.get(groupId) || new Set(); + + if (this.groups.downloads.has(groupId)) { + logger.debug("[queueDownloads] group already exists", { + groupId + }); + return this.groups.downloads.get(groupId); + } + + const group = new Set(); + files.forEach((f) => group.add(f.filename)); this.groups.downloads.set(groupId, group); @@ -145,7 +154,16 @@ export class FileStorage { let current = 0; const token = await this.tokenManager.getAccessToken(); const total = files.length; - const group = this.groups.uploads.get(groupId) || new Set(); + + if (this.groups.uploads.has(groupId)) { + logger.debug("[queueUploads] group already exists", { + groupId + }); + return this.groups.uploads.get(groupId); + } + + const group = new Set(); + files.forEach((f) => group.add(f.filename)); this.groups.uploads.set(groupId, group);