From 9fe613967a4c47f3b343b58d718b9c217a5f4ac6 Mon Sep 17 00:00:00 2001 From: Beaudan Brown Date: Mon, 9 Sep 2019 11:18:46 +1000 Subject: [PATCH] Fix duplicate detection for sent messages in public chat --- js/background.js | 12 +++++++----- js/models/conversations.js | 4 ++++ js/models/messages.js | 5 ++++- 3 files changed, 15 insertions(+), 6 deletions(-) diff --git a/js/background.js b/js/background.js index 88ce7275b..2339951a2 100644 --- a/js/background.js +++ b/js/background.js @@ -1303,15 +1303,17 @@ const descriptorId = await textsecure.MessageReceiver.arrayBufferToString( messageDescriptor.id ); + let message; if ( messageDescriptor.type === 'group' && descriptorId.match(/^publicChat:/) && data.source === ourNumber ) { - // Remove public chat messages to ourselves - return event.confirm(); + // Public chat messages from ourselves should be outgoing + message = await createSentMessage(data); + } else { + message = await createMessage(data); } - const message = await createMessage(data); const isDuplicate = await isMessageDuplicate(message); if (isDuplicate) { window.log.warn('Received duplicate message', message.idForLogging()); @@ -1396,10 +1398,10 @@ return new Whisper.Message({ source: textsecure.storage.user.getNumber(), - sourceDevice: data.device, + sourceDevice: data.sourceDevice, sent_at: data.timestamp, sent_to: sentTo, - received_at: now, + received_at: data.isPublic ? data.receivedAt : now, conversationId: data.destination, type: 'outgoing', sent: true, diff --git a/js/models/conversations.js b/js/models/conversations.js index dff8043fa..731b1ca79 100644 --- a/js/models/conversations.js +++ b/js/models/conversations.js @@ -1333,6 +1333,10 @@ if (this.isPrivate()) { messageWithSchema.destination = destination; + } else if (this.isPublic()) { + // Public chats require this data to detect duplicates + messageWithSchema.source = textsecure.storage.user.getNumber(); + messageWithSchema.sourceDevice = 1; } const attributes = { ...messageWithSchema, diff --git a/js/models/messages.js b/js/models/messages.js index 8f2283293..38729afaf 100644 --- a/js/models/messages.js +++ b/js/models/messages.js @@ -2019,7 +2019,10 @@ } ); } - } else if (dataMessage.profile) { + } else if ( + source !== textsecure.storage.user.getNumber() && + dataMessage.profile + ) { ConversationController.getOrCreateAndWait(source, 'private').then( sender => { sender.setLokiProfile(dataMessage.profile);