diff --git a/app/src/main/java/org/thoughtcrime/securesms/messages/DataMessageProcessor.kt b/app/src/main/java/org/thoughtcrime/securesms/messages/DataMessageProcessor.kt index e2990b603c..9cc2d2e92b 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/messages/DataMessageProcessor.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/messages/DataMessageProcessor.kt @@ -139,10 +139,10 @@ object DataMessageProcessor { message.isPaymentActivationRequest -> messageId = handlePaymentActivation(envelope, metadata, message, senderRecipient.id, receivedTime, isActivatePaymentsRequest = true, isPaymentsActivated = false) message.isPaymentActivated -> messageId = handlePaymentActivation(envelope, metadata, message, senderRecipient.id, receivedTime, isActivatePaymentsRequest = false, isPaymentsActivated = true) message.hasPayment() -> messageId = handlePayment(context, envelope, metadata, message, senderRecipient.id, receivedTime) - message.hasStoryContext() -> messageId = handleStoryReply(context, envelope, metadata, message, senderRecipient.id, groupId, receivedTime) + message.hasStoryContext() -> messageId = handleStoryReply(context, envelope, metadata, message, senderRecipient, groupId, receivedTime) message.hasGiftBadge() -> messageId = handleGiftMessage(context, envelope, metadata, message, senderRecipient, threadRecipient.id, receivedTime) - message.isMediaMessage -> messageId = handleMediaMessage(context, envelope, metadata, message, senderRecipient, threadRecipient.id, groupId, receivedTime) - message.hasBody() -> messageId = handleTextMessage(context, envelope, metadata, message, senderRecipient, threadRecipient.id, groupId, receivedTime) + message.isMediaMessage -> messageId = handleMediaMessage(context, envelope, metadata, message, senderRecipient, threadRecipient, groupId, receivedTime) + message.hasBody() -> messageId = handleTextMessage(context, envelope, metadata, message, senderRecipient, threadRecipient, groupId, receivedTime) message.hasGroupCallUpdate() -> handleGroupCallUpdateMessage(envelope, message, senderRecipient.id, groupId) } @@ -195,6 +195,9 @@ object DataMessageProcessor { StorageSyncHelper.scheduleSyncForDataChange() } } else if (messageProfileKey != null) { + if (messageProfileKeyBytes.contentEquals(senderRecipient.profileKey)) { + return + } if (SignalDatabase.recipients.setProfileKey(senderRecipient.id, messageProfileKey)) { log(timestamp, "Profile key on message from " + senderRecipient.id + " didn't match our local store. It has been updated.") ApplicationDependencies.getJobManager().add(RetrieveProfileJob.forRecipient(senderRecipient.id)) @@ -321,14 +324,14 @@ object DataMessageProcessor { envelope: Envelope, metadata: EnvelopeMetadata, senderRecipientId: RecipientId, - threadRecipientId: RecipientId, + threadRecipient: Recipient, groupId: GroupId.V2?, expiresIn: Duration, receivedTime: Long ) { - if (SignalDatabase.recipients.getExpiresInSeconds(threadRecipientId) != expiresIn.inWholeSeconds) { + if (threadRecipient.expiresInSeconds.toLong() != expiresIn.inWholeSeconds) { warn(envelope.timestamp, "Message expire time didn't match thread expire time. Handling timer update.") - handleExpirationUpdate(envelope, metadata, senderRecipientId, threadRecipientId, groupId, expiresIn, receivedTime, true) + handleExpirationUpdate(envelope, metadata, senderRecipientId, threadRecipient.id, groupId, expiresIn, receivedTime, true) } } @@ -638,7 +641,7 @@ object DataMessageProcessor { envelope: Envelope, metadata: EnvelopeMetadata, message: DataMessage, - senderRecipientId: RecipientId, + senderRecipient: Recipient, groupId: GroupId.V2?, receivedTime: Long ): MessageId? { @@ -658,7 +661,7 @@ object DataMessageProcessor { try { if (selfId == storyAuthorRecipientId) { - storyMessageId = SignalDatabase.storySends.getStoryMessageFor(senderRecipientId, sentTimestamp) + storyMessageId = SignalDatabase.storySends.getStoryMessageFor(senderRecipient.id, sentTimestamp) } if (storyMessageId == null) { @@ -666,19 +669,19 @@ object DataMessageProcessor { } val story: MmsMessageRecord = SignalDatabase.messages.getMessageRecord(storyMessageId.id) as MmsMessageRecord - var threadRecipientId: RecipientId = SignalDatabase.threads.getRecipientForThreadId(story.threadId)!!.id - val groupRecord: GroupRecord? = SignalDatabase.groups.getGroup(threadRecipientId).orNull() + var threadRecipient: Recipient = SignalDatabase.threads.getRecipientForThreadId(story.threadId)!! + val groupRecord: GroupRecord? = SignalDatabase.groups.getGroup(threadRecipient.id).orNull() val groupStory: Boolean = groupRecord?.isActive ?: false if (!groupStory) { - threadRecipientId = senderRecipientId + threadRecipient = senderRecipient } - handlePossibleExpirationUpdate(envelope, metadata, senderRecipientId, threadRecipientId, groupId, message.expireTimer.seconds, receivedTime) + handlePossibleExpirationUpdate(envelope, metadata, senderRecipient.id, threadRecipient, groupId, message.expireTimer.seconds, receivedTime) if (message.hasGroupContext) { parentStoryId = GroupReply(storyMessageId.id) - } else if (groupStory || SignalDatabase.storySends.canReply(senderRecipientId, sentTimestamp)) { + } else if (groupStory || SignalDatabase.storySends.canReply(senderRecipient.id, sentTimestamp)) { parentStoryId = DirectReply(storyMessageId.id) var displayText = "" @@ -702,7 +705,7 @@ object DataMessageProcessor { val bodyRanges: BodyRangeList? = message.bodyRangesList.filter { it.hasStyle() }.toList().toBodyRangeList() val mediaMessage = IncomingMediaMessage( - from = senderRecipientId, + from = senderRecipient.id, sentTimeMillis = envelope.timestamp, serverTimeMillis = envelope.serverTimestamp, receivedTimeMillis = System.currentTimeMillis(), @@ -801,13 +804,13 @@ object DataMessageProcessor { metadata: EnvelopeMetadata, message: DataMessage, senderRecipient: Recipient, - threadRecipientId: RecipientId, + threadRecipient: Recipient, groupId: GroupId.V2?, receivedTime: Long ): MessageId? { log(envelope.timestamp, "Media message.") - notifyTypingStoppedFromIncomingMessage(context, senderRecipient, threadRecipientId, metadata.sourceDeviceId) + notifyTypingStoppedFromIncomingMessage(context, senderRecipient, threadRecipient.id, metadata.sourceDeviceId) val insertResult: InsertResult? @@ -821,7 +824,7 @@ object DataMessageProcessor { val attachments: List = message.attachmentsList.toPointers() val messageRanges: BodyRangeList? = if (message.bodyRangesCount > 0) message.bodyRangesList.filter { it.hasStyle() }.toList().toBodyRangeList() else null - handlePossibleExpirationUpdate(envelope, metadata, senderRecipient.id, threadRecipientId, groupId, message.expireTimer.seconds, receivedTime) + handlePossibleExpirationUpdate(envelope, metadata, senderRecipient.id, threadRecipient, groupId, message.expireTimer.seconds, receivedTime) val mediaMessage = IncomingMediaMessage( from = senderRecipient.id, @@ -884,7 +887,7 @@ object DataMessageProcessor { metadata: EnvelopeMetadata, message: DataMessage, senderRecipient: Recipient, - threadRecipientId: RecipientId, + threadRecipient: Recipient, groupId: GroupId.V2?, receivedTime: Long ): MessageId? { @@ -892,9 +895,9 @@ object DataMessageProcessor { val body = if (message.hasBody()) message.body else "" - handlePossibleExpirationUpdate(envelope, metadata, senderRecipient.id, threadRecipientId, groupId, message.expireTimer.seconds, receivedTime) + handlePossibleExpirationUpdate(envelope, metadata, senderRecipient.id, threadRecipient, groupId, message.expireTimer.seconds, receivedTime) - notifyTypingStoppedFromIncomingMessage(context, senderRecipient, threadRecipientId, metadata.sourceDeviceId) + notifyTypingStoppedFromIncomingMessage(context, senderRecipient, threadRecipient.id, metadata.sourceDeviceId) val textMessage = IncomingTextMessage( senderRecipient.id, diff --git a/app/src/main/java/org/thoughtcrime/securesms/messages/MessageContentProcessorV2.kt b/app/src/main/java/org/thoughtcrime/securesms/messages/MessageContentProcessorV2.kt index 2d30e9c859..0d071c2d8f 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/messages/MessageContentProcessorV2.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/messages/MessageContentProcessorV2.kt @@ -282,7 +282,7 @@ open class MessageContentProcessorV2(private val context: Context) { */ @JvmOverloads open fun process(envelope: Envelope, content: Content, metadata: EnvelopeMetadata, serverDeliveredTimestamp: Long, processingEarlyContent: Boolean = false) { - val senderRecipient = Recipient.externalPush(SignalServiceAddress(metadata.sourceServiceId, metadata.sourceE164)) + val senderRecipient = Recipient.resolved(RecipientId.from(SignalServiceAddress(metadata.sourceServiceId, metadata.sourceE164))) handleMessage(senderRecipient, envelope, content, metadata, serverDeliveredTimestamp, processingEarlyContent)