diff --git a/js/models/conversations.js b/js/models/conversations.js index 111ed1a2f..578604373 100644 --- a/js/models/conversations.js +++ b/js/models/conversations.js @@ -542,13 +542,11 @@ async onPublicMessageSent(pubKey, timestamp, serverId, serverTimestamp) { const messages = this._getMessagesWithTimestamp(pubKey, timestamp); - await Promise.all( - messages.map(message => [ - message.setIsPublic(true), - message.setServerId(serverId), - message.setServerTimestamp(serverTimestamp), - ]) - ); + if (messages && messages.length === 1) { + await messages[0].setIsPublic(true); + await messages[0].setServerId(serverId); + await messages[0].setServerTimestamp(serverTimestamp); + } }, async onNewMessage(message) { diff --git a/js/modules/loki_app_dot_net_api.js b/js/modules/loki_app_dot_net_api.js index 921692309..4ade77836 100644 --- a/js/modules/loki_app_dot_net_api.js +++ b/js/modules/loki_app_dot_net_api.js @@ -1950,10 +1950,10 @@ class LokiPublicChannelAPI { this.lastMessagesCache = [ ...this.lastMessagesCache, { - propsForMessage: { - authorPhoneNumber: pubKey, - text: adnMessage.text, - timestamp, + attributes: { + source: pubKey, + body: adnMessage.text, + sent_at: timestamp, }, }, ].splice(-5); diff --git a/ts/receiver/dataMessage.ts b/ts/receiver/dataMessage.ts index 335f269f1..ac0787d2a 100644 --- a/ts/receiver/dataMessage.ts +++ b/ts/receiver/dataMessage.ts @@ -378,8 +378,12 @@ async function isMessageDuplicate({ if (!result) { return false; } - - const isSimilar = result.some((m: any) => isDuplicate(m, message, source)); + const filteredResult = result.filter( + (m: any) => m.attributes.body === message.body + ); + const isSimilar = filteredResult.some((m: any) => + isDuplicate(m, message, source) + ); return isSimilar; } catch (error) { window.log.error('isMessageDuplicate error:', Errors.toLogFormat(error)); @@ -389,11 +393,11 @@ async function isMessageDuplicate({ export const isDuplicate = (m: any, testedMessage: any, source: string) => { // The username in this case is the users pubKey - const sameUsername = m.propsForMessage.authorPhoneNumber === source; - const sameText = m.propsForMessage.text === testedMessage.body; + const sameUsername = m.attributes.source === source; + const sameText = m.attributes.body === testedMessage.body; // Don't filter out messages that are too far apart from each other const timestampsSimilar = - Math.abs(m.propsForMessage.timestamp - testedMessage.timestamp) <= + Math.abs(m.attributes.sent_at - testedMessage.timestamp) <= PUBLICCHAT_MIN_TIME_BETWEEN_DUPLICATE_MESSAGES; return sameUsername && sameText && timestampsSimilar; @@ -498,6 +502,7 @@ function createSentMessage(data: MessageCreationData): MessageModel { const { timestamp, + serverTimestamp, isPublic, receivedAt, sourceDevice, @@ -530,6 +535,7 @@ function createSentMessage(data: MessageCreationData): MessageModel { const messageData: any = { source: window.textsecure.storage.user.getNumber(), sourceDevice, + serverTimestamp, sent_at: timestamp, received_at: isPublic ? receivedAt : now, conversationId: destination, // conversation ID will might change later (if it is a group)