diff --git a/ts/services/backups/export.ts b/ts/services/backups/export.ts index c45edd225553..666c8e8aeb51 100644 --- a/ts/services/backups/export.ts +++ b/ts/services/backups/export.ts @@ -1312,7 +1312,14 @@ export class BackupExportStream extends Readable { groupCall.startedCallRecipientId = recipientId; } - groupCall.callId = Long.fromString(callId); + try { + groupCall.callId = Long.fromString(callId); + } catch (e) { + // Could not convert callId to long; likely a legacy backfilled callId with uuid + // TODO (DESKTOP-8007) + groupCall.callId = Long.fromNumber(0); + } + groupCall.state = toGroupCallStateProto(callHistory.status); groupCall.startedCallTimestamp = Long.fromNumber(callHistory.timestamp); if (callHistory.endedTimestamp != null) { @@ -1333,7 +1340,14 @@ export class BackupExportStream extends Readable { return { kind: NonBubbleResultKind.Drop }; } - individualCall.callId = Long.fromString(callId); + try { + individualCall.callId = Long.fromString(callId); + } catch (e) { + // TODO (DESKTOP-8007) + // Could not convert callId to long; likely a legacy backfilled callId with uuid + individualCall.callId = Long.fromNumber(0); + } + individualCall.type = toIndividualCallTypeProto(type); individualCall.direction = toIndividualCallDirectionProto(direction); individualCall.state = toIndividualCallStateProto(status); diff --git a/ts/services/backups/import.ts b/ts/services/backups/import.ts index 0c04e07e92db..f72935bd2805 100644 --- a/ts/services/backups/import.ts +++ b/ts/services/backups/import.ts @@ -318,6 +318,10 @@ export class BackupImportStream extends Writable { // Load identity keys we just saved. await window.storage.protocol.hydrateCaches(); + // Load all data into redux (need to do this before updating a + // conversation's last message, which uses redux selectors) + await loadAllAndReinitializeRedux(); + const allConversations = window.ConversationController.getAll(); // Update last message in every active conversation now that we have @@ -351,8 +355,6 @@ export class BackupImportStream extends Writable { .map(([, id]) => id) ); - await loadAllAndReinitializeRedux(); - await window.storage.put( 'backupMediaDownloadTotalBytes', await DataReader.getSizeOfPendingBackupAttachmentDownloadJobs() @@ -2163,7 +2165,7 @@ export class BackupImportStream extends Writable { : undefined; let callId: string; - if (callIdLong) { + if (callIdLong?.toNumber()) { callId = callIdLong.toString(); } else { // Legacy calls may not have a callId, so we generate one locally @@ -2215,7 +2217,7 @@ export class BackupImportStream extends Writable { } = updateMessage.individualCall; let callId: string; - if (callIdLong) { + if (callIdLong?.toNumber()) { callId = callIdLong.toString(); } else { // Legacy calls may not have a callId, so we generate one locally @@ -2983,9 +2985,14 @@ export class BackupImportStream extends Writable { state, callTimestamp, }: Backups.IAdHocCall): Promise { - strictAssert(callIdLong, 'AdHocCall must have a callId'); + let callId: string; + if (callIdLong?.toNumber()) { + callId = callIdLong.toString(); + } else { + // Legacy calls may not have a callId, so we generate one locally + callId = generateUuid(); + } - const callId = callIdLong.toString(); const logId = `fromAdhocCall(${callId.slice(-2)})`; strictAssert(callTimestamp, `${logId}: must have a valid timestamp`); diff --git a/ts/util/queueAttachmentDownloads.ts b/ts/util/queueAttachmentDownloads.ts index fcc265f217c5..43c7604b6a5d 100644 --- a/ts/util/queueAttachmentDownloads.ts +++ b/ts/util/queueAttachmentDownloads.ts @@ -2,7 +2,7 @@ // SPDX-License-Identifier: AGPL-3.0-only import { partition } from 'lodash'; -import * as log from '../logging/log'; +import * as logger from '../logging/log'; import { isLongMessage } from '../types/MIME'; import { getMessageIdForLogging } from './idForLogging'; import { @@ -50,14 +50,15 @@ function getAttachmentSignatureSafe( try { return getAttachmentSignature(attachment); } catch { - log.warn( - 'queueAttachmentDownloads: attachment was missing digest', - attachment.blurHash - ); return undefined; } } +function getLogger(source: AttachmentDownloadSource) { + const verbose = source !== AttachmentDownloadSource.BACKUP_IMPORT; + const log = verbose ? logger : { ...logger, info: () => null }; + return log; +} // Receive logic // NOTE: If you're changing any logic in this function that deals with the // count then you'll also have to modify ./hasAttachmentsDownloads @@ -79,10 +80,7 @@ export async function queueAttachmentDownloads( let bodyAttachment; const idLog = `queueAttachmentDownloads(${idForLogging}})`; - - log.info( - `${idLog}: Queueing ${attachmentsToQueue.length} attachment downloads` - ); + const log = getLogger(source); const [longMessageAttachments, normalAttachments] = partition( attachmentsToQueue, @@ -328,12 +326,12 @@ export async function queueAttachmentDownloads( ); } - log.info(`${idLog}: Queued ${count} total attachment downloads`); - if (count <= 0) { return; } + log.info(`${idLog}: Queued ${count} total attachment downloads`); + return { attachments, bodyAttachment, @@ -367,6 +365,7 @@ async function queueNormalAttachments({ attachments: Array; count: number; }> { + const log = getLogger(source); // Look through "otherAttachments" which can either be attachments in the // edit history or the message's attachments and see if any of the attachments // are the same. If they are let's replace it so that we don't download more @@ -465,6 +464,7 @@ async function queuePreviews({ urgency: AttachmentDownloadUrgency; source: AttachmentDownloadSource; }): Promise<{ preview: Array; count: number }> { + const log = getLogger(source); // Similar to queueNormalAttachments' logic for detecting same attachments // except here we also pick by link preview URL. const previewSignatures: Map = new Map(); @@ -560,6 +560,7 @@ async function queueQuoteAttachments({ urgency: AttachmentDownloadUrgency; source: AttachmentDownloadSource; }): Promise<{ quote?: QuotedMessageType; count: number }> { + const log = getLogger(source); let count = 0; if (!quote) { return { quote, count };