mirror of
https://github.com/signalapp/Signal-Android.git
synced 2026-04-22 09:49:30 +01:00
Merge IncomingTextMessages into IncomingMessage.
This commit is contained in:
committed by
Cody Henthorne
parent
23b696c9cf
commit
6b3f41d675
@@ -25,6 +25,7 @@ import org.thoughtcrime.securesms.crypto.ProfileKeyUtil
|
||||
import org.thoughtcrime.securesms.crypto.SecurityEvent
|
||||
import org.thoughtcrime.securesms.database.AttachmentTable
|
||||
import org.thoughtcrime.securesms.database.MessageTable.InsertResult
|
||||
import org.thoughtcrime.securesms.database.MessageType
|
||||
import org.thoughtcrime.securesms.database.NoSuchMessageException
|
||||
import org.thoughtcrime.securesms.database.PaymentTable.PublicKeyConflictException
|
||||
import org.thoughtcrime.securesms.database.SignalDatabase
|
||||
@@ -75,7 +76,7 @@ import org.thoughtcrime.securesms.messages.SignalServiceProtoUtil.isPaymentActiv
|
||||
import org.thoughtcrime.securesms.messages.SignalServiceProtoUtil.isStoryReaction
|
||||
import org.thoughtcrime.securesms.messages.SignalServiceProtoUtil.toPointer
|
||||
import org.thoughtcrime.securesms.messages.SignalServiceProtoUtil.toPointersWithinLimit
|
||||
import org.thoughtcrime.securesms.mms.IncomingMediaMessage
|
||||
import org.thoughtcrime.securesms.mms.IncomingMessage
|
||||
import org.thoughtcrime.securesms.mms.MmsException
|
||||
import org.thoughtcrime.securesms.mms.QuoteModel
|
||||
import org.thoughtcrime.securesms.mms.StickerSlide
|
||||
@@ -84,9 +85,6 @@ import org.thoughtcrime.securesms.recipients.Recipient
|
||||
import org.thoughtcrime.securesms.recipients.Recipient.HiddenState
|
||||
import org.thoughtcrime.securesms.recipients.RecipientId
|
||||
import org.thoughtcrime.securesms.recipients.RecipientUtil
|
||||
import org.thoughtcrime.securesms.sms.IncomingEncryptedMessage
|
||||
import org.thoughtcrime.securesms.sms.IncomingEndSessionMessage
|
||||
import org.thoughtcrime.securesms.sms.IncomingTextMessage
|
||||
import org.thoughtcrime.securesms.stickers.StickerLocator
|
||||
import org.thoughtcrime.securesms.storage.StorageSyncHelper
|
||||
import org.thoughtcrime.securesms.util.EarlyMessageCacheEntry
|
||||
@@ -100,7 +98,7 @@ import org.whispersystems.signalservice.api.crypto.EnvelopeMetadata
|
||||
import org.whispersystems.signalservice.api.payments.Money
|
||||
import org.whispersystems.signalservice.api.push.ServiceId
|
||||
import org.whispersystems.signalservice.api.push.ServiceId.ACI
|
||||
import org.whispersystems.signalservice.api.util.OptionalUtil.asOptional
|
||||
import org.whispersystems.signalservice.api.util.Preconditions
|
||||
import org.whispersystems.signalservice.internal.push.BodyRange
|
||||
import org.whispersystems.signalservice.internal.push.Content
|
||||
import org.whispersystems.signalservice.internal.push.DataMessage
|
||||
@@ -143,7 +141,7 @@ object DataMessageProcessor {
|
||||
|
||||
var messageId: MessageId? = null
|
||||
when {
|
||||
message.isInvalid -> handleInvalidMessage(context, senderRecipient.id, metadata.sourceDeviceId, groupId, envelope.timestamp!!)
|
||||
message.isInvalid -> handleInvalidMessage(context, senderRecipient.id, groupId, envelope.timestamp!!)
|
||||
message.isEndSession -> messageId = handleEndSessionMessage(context, senderRecipient.id, envelope, metadata)
|
||||
message.isExpirationUpdate -> messageId = handleExpirationUpdate(envelope, metadata, senderRecipient.id, threadRecipient.id, groupId, message.expireTimerDuration, receivedTime, false)
|
||||
message.isStoryReaction -> messageId = handleStoryReaction(context, envelope, metadata, message, senderRecipient.id, groupId)
|
||||
@@ -244,13 +242,12 @@ object DataMessageProcessor {
|
||||
private fun handleInvalidMessage(
|
||||
context: Context,
|
||||
sender: RecipientId,
|
||||
senderDevice: Int,
|
||||
groupId: GroupId?,
|
||||
timestamp: Long
|
||||
) {
|
||||
log(timestamp, "Invalid message.")
|
||||
|
||||
val insertResult: InsertResult? = insertPlaceholder(sender, senderDevice, timestamp, groupId)
|
||||
val insertResult: InsertResult? = insertPlaceholder(sender, timestamp, groupId)
|
||||
if (insertResult != null) {
|
||||
SignalDatabase.messages.markAsInvalidMessage(insertResult.messageId)
|
||||
ApplicationDependencies.getMessageNotifier().updateNotification(context, ConversationId.forConversation(insertResult.threadId))
|
||||
@@ -265,20 +262,17 @@ object DataMessageProcessor {
|
||||
): MessageId? {
|
||||
log(envelope.timestamp!!, "End session message.")
|
||||
|
||||
val incomingTextMessage = IncomingTextMessage(
|
||||
senderRecipientId,
|
||||
metadata.sourceDeviceId,
|
||||
envelope.timestamp!!,
|
||||
envelope.serverTimestamp!!,
|
||||
System.currentTimeMillis(),
|
||||
"",
|
||||
Optional.empty(),
|
||||
0,
|
||||
metadata.sealedSender,
|
||||
envelope.serverGuid
|
||||
val incomingMessage = IncomingMessage(
|
||||
from = senderRecipientId,
|
||||
sentTimeMillis = envelope.timestamp!!,
|
||||
serverTimeMillis = envelope.serverTimestamp!!,
|
||||
receivedTimeMillis = System.currentTimeMillis(),
|
||||
isUnidentified = metadata.sealedSender,
|
||||
serverGuid = envelope.serverGuid,
|
||||
type = MessageType.END_SESSION
|
||||
)
|
||||
|
||||
val insertResult: InsertResult? = SignalDatabase.messages.insertMessageInbox(IncomingEndSessionMessage(incomingTextMessage)).orNull()
|
||||
val insertResult: InsertResult? = SignalDatabase.messages.insertMessageInbox(incomingMessage).orNull()
|
||||
|
||||
return if (insertResult != null) {
|
||||
ApplicationDependencies.getProtocolStore().aci().deleteAllSessions(metadata.sourceServiceId.toString())
|
||||
@@ -318,7 +312,7 @@ object DataMessageProcessor {
|
||||
}
|
||||
|
||||
try {
|
||||
val mediaMessage = IncomingMediaMessage(
|
||||
val mediaMessage = IncomingMessage(
|
||||
from = senderRecipientId,
|
||||
sentTimeMillis = envelope.timestamp!! - if (sideEffect) 1 else 0,
|
||||
serverTimeMillis = envelope.serverTimestamp!!,
|
||||
@@ -418,7 +412,7 @@ object DataMessageProcessor {
|
||||
return null
|
||||
}
|
||||
|
||||
val mediaMessage = IncomingMediaMessage(
|
||||
val mediaMessage = IncomingMessage(
|
||||
from = senderRecipientId,
|
||||
sentTimeMillis = envelope.timestamp!!,
|
||||
serverTimeMillis = envelope.serverTimestamp!!,
|
||||
@@ -582,8 +576,10 @@ object DataMessageProcessor {
|
||||
isPaymentsActivated: Boolean
|
||||
): MessageId? {
|
||||
log(envelope.timestamp!!, "Payment activation request: $isActivatePaymentsRequest activated: $isPaymentsActivated")
|
||||
Preconditions.checkArgument(isActivatePaymentsRequest || isPaymentsActivated)
|
||||
|
||||
try {
|
||||
val mediaMessage = IncomingMediaMessage(
|
||||
val mediaMessage = IncomingMessage(
|
||||
from = senderRecipientId,
|
||||
sentTimeMillis = envelope.timestamp!!,
|
||||
serverTimeMillis = envelope.serverTimestamp!!,
|
||||
@@ -591,8 +587,7 @@ object DataMessageProcessor {
|
||||
expiresIn = message.expireTimerDuration.inWholeMilliseconds,
|
||||
isUnidentified = metadata.sealedSender,
|
||||
serverGuid = envelope.serverGuid,
|
||||
isActivatePaymentsRequest = isActivatePaymentsRequest,
|
||||
isPaymentsActivated = isPaymentsActivated
|
||||
type = if (isActivatePaymentsRequest) MessageType.ACTIVATE_PAYMENTS_REQUEST else MessageType.PAYMENTS_ACTIVATED
|
||||
)
|
||||
|
||||
val insertResult: InsertResult? = SignalDatabase.messages.insertMessageInbox(mediaMessage, -1).orNull()
|
||||
@@ -638,7 +633,7 @@ object DataMessageProcessor {
|
||||
true
|
||||
)
|
||||
|
||||
val mediaMessage = IncomingMediaMessage(
|
||||
val mediaMessage = IncomingMessage(
|
||||
from = senderRecipientId,
|
||||
body = uuid.toString(),
|
||||
sentTimeMillis = envelope.timestamp!!,
|
||||
@@ -648,7 +643,7 @@ object DataMessageProcessor {
|
||||
isUnidentified = metadata.sealedSender,
|
||||
serverGuid = envelope.serverGuid,
|
||||
isPushMessage = true,
|
||||
isPaymentsNotification = true
|
||||
type = MessageType.PAYMENTS_NOTIFICATION
|
||||
)
|
||||
|
||||
val insertResult: InsertResult? = SignalDatabase.messages.insertMessageInbox(mediaMessage, -1).orNull()
|
||||
@@ -750,7 +745,7 @@ object DataMessageProcessor {
|
||||
|
||||
val bodyRanges: BodyRangeList? = message.bodyRanges.filter { it.mentionAci == null }.toList().toBodyRangeList()
|
||||
|
||||
val mediaMessage = IncomingMediaMessage(
|
||||
val mediaMessage = IncomingMessage(
|
||||
from = senderRecipient.id,
|
||||
sentTimeMillis = envelope.timestamp!!,
|
||||
serverTimeMillis = envelope.serverTimestamp!!,
|
||||
@@ -818,7 +813,7 @@ object DataMessageProcessor {
|
||||
.build()
|
||||
|
||||
val insertResult: InsertResult? = try {
|
||||
val mediaMessage = IncomingMediaMessage(
|
||||
val mediaMessage = IncomingMessage(
|
||||
from = senderRecipient.id,
|
||||
sentTimeMillis = envelope.timestamp!!,
|
||||
serverTimeMillis = envelope.serverTimestamp!!,
|
||||
@@ -874,7 +869,7 @@ object DataMessageProcessor {
|
||||
|
||||
handlePossibleExpirationUpdate(envelope, metadata, senderRecipient.id, threadRecipient, groupId, message.expireTimerDuration, receivedTime)
|
||||
|
||||
val mediaMessage = IncomingMediaMessage(
|
||||
val mediaMessage = IncomingMessage(
|
||||
from = senderRecipient.id,
|
||||
sentTimeMillis = envelope.timestamp!!,
|
||||
serverTimeMillis = envelope.serverTimestamp!!,
|
||||
@@ -956,20 +951,19 @@ object DataMessageProcessor {
|
||||
|
||||
notifyTypingStoppedFromIncomingMessage(context, senderRecipient, threadRecipient.id, metadata.sourceDeviceId)
|
||||
|
||||
val textMessage = IncomingTextMessage(
|
||||
senderRecipient.id,
|
||||
metadata.sourceDeviceId,
|
||||
envelope.timestamp!!,
|
||||
envelope.serverTimestamp!!,
|
||||
receivedTime,
|
||||
body,
|
||||
Optional.ofNullable(groupId),
|
||||
message.expireTimerDuration.inWholeMilliseconds,
|
||||
metadata.sealedSender,
|
||||
envelope.serverGuid
|
||||
val textMessage = IncomingMessage(
|
||||
from = senderRecipient.id,
|
||||
sentTimeMillis = envelope.timestamp!!,
|
||||
serverTimeMillis = envelope.serverTimestamp!!,
|
||||
receivedTimeMillis = receivedTime,
|
||||
body = body,
|
||||
groupId = groupId,
|
||||
expiresIn = message.expireTimerDuration.inWholeMilliseconds,
|
||||
isUnidentified = metadata.sealedSender,
|
||||
serverGuid = envelope.serverGuid
|
||||
)
|
||||
|
||||
val insertResult: InsertResult? = SignalDatabase.messages.insertMessageInbox(IncomingEncryptedMessage(textMessage, body)).orNull()
|
||||
val insertResult: InsertResult? = SignalDatabase.messages.insertMessageInbox(textMessage).orNull()
|
||||
localMetrics?.onInsertedTextMessage()
|
||||
|
||||
return if (insertResult != null) {
|
||||
@@ -1031,20 +1025,17 @@ object DataMessageProcessor {
|
||||
}
|
||||
}
|
||||
|
||||
private fun insertPlaceholder(sender: RecipientId, senderDevice: Int, timestamp: Long, groupId: GroupId?): InsertResult? {
|
||||
val textMessage = IncomingTextMessage(
|
||||
sender,
|
||||
senderDevice,
|
||||
timestamp,
|
||||
-1,
|
||||
System.currentTimeMillis(),
|
||||
"",
|
||||
groupId.asOptional(),
|
||||
0,
|
||||
false,
|
||||
null
|
||||
private fun insertPlaceholder(sender: RecipientId, timestamp: Long, groupId: GroupId?): InsertResult? {
|
||||
val textMessage = IncomingMessage(
|
||||
from = sender,
|
||||
sentTimeMillis = timestamp,
|
||||
serverTimeMillis = -1,
|
||||
receivedTimeMillis = System.currentTimeMillis(),
|
||||
body = "",
|
||||
groupId = groupId
|
||||
)
|
||||
return SignalDatabase.messages.insertMessageInbox(IncomingEncryptedMessage(textMessage, "")).orNull()
|
||||
|
||||
return SignalDatabase.messages.insertMessageInbox(textMessage).orNull()
|
||||
}
|
||||
|
||||
fun getValidatedQuote(context: Context, timestamp: Long, message: DataMessage): QuoteModel? {
|
||||
|
||||
@@ -19,13 +19,11 @@ import org.thoughtcrime.securesms.messages.MessageContentProcessor.Companion.war
|
||||
import org.thoughtcrime.securesms.messages.SignalServiceProtoUtil.groupId
|
||||
import org.thoughtcrime.securesms.messages.SignalServiceProtoUtil.isMediaMessage
|
||||
import org.thoughtcrime.securesms.messages.SignalServiceProtoUtil.toPointersWithinLimit
|
||||
import org.thoughtcrime.securesms.mms.IncomingMediaMessage
|
||||
import org.thoughtcrime.securesms.mms.IncomingMessage
|
||||
import org.thoughtcrime.securesms.mms.QuoteModel
|
||||
import org.thoughtcrime.securesms.notifications.v2.ConversationId.Companion.forConversation
|
||||
import org.thoughtcrime.securesms.recipients.Recipient
|
||||
import org.thoughtcrime.securesms.recipients.RecipientId
|
||||
import org.thoughtcrime.securesms.sms.IncomingEncryptedMessage
|
||||
import org.thoughtcrime.securesms.sms.IncomingTextMessage
|
||||
import org.thoughtcrime.securesms.util.EarlyMessageCacheEntry
|
||||
import org.thoughtcrime.securesms.util.MediaUtil
|
||||
import org.thoughtcrime.securesms.util.MessageConstraintsUtil
|
||||
@@ -35,7 +33,6 @@ import org.whispersystems.signalservice.api.crypto.EnvelopeMetadata
|
||||
import org.whispersystems.signalservice.internal.push.Content
|
||||
import org.whispersystems.signalservice.internal.push.DataMessage
|
||||
import org.whispersystems.signalservice.internal.push.Envelope
|
||||
import java.util.Optional
|
||||
|
||||
object EditMessageProcessor {
|
||||
fun process(
|
||||
@@ -142,7 +139,7 @@ object EditMessageProcessor {
|
||||
attachments.filter {
|
||||
MediaUtil.SlideType.LONG_TEXT == MediaUtil.getSlideTypeFromContentType(it.contentType)
|
||||
}
|
||||
val mediaMessage = IncomingMediaMessage(
|
||||
val mediaMessage = IncomingMessage(
|
||||
from = senderRecipientId,
|
||||
sentTimeMillis = message.timestamp!!,
|
||||
serverTimeMillis = envelope.serverTimestamp!!,
|
||||
@@ -162,7 +159,7 @@ object EditMessageProcessor {
|
||||
isPushMessage = true
|
||||
)
|
||||
|
||||
val insertResult = SignalDatabase.messages.insertEditMessageInbox(-1, mediaMessage, targetMessage).orNull()
|
||||
val insertResult = SignalDatabase.messages.insertEditMessageInbox(mediaMessage, targetMessage).orNull()
|
||||
if (insertResult?.insertedAttachments != null) {
|
||||
SignalDatabase.runPostSuccessfulTransaction {
|
||||
val downloadJobs: List<AttachmentDownloadJob> = insertResult.insertedAttachments.mapNotNull { (_, attachmentId) ->
|
||||
@@ -182,21 +179,18 @@ object EditMessageProcessor {
|
||||
message: DataMessage,
|
||||
targetMessage: MediaMmsMessageRecord
|
||||
): InsertResult? {
|
||||
var textMessage = IncomingTextMessage(
|
||||
senderRecipientId,
|
||||
metadata.sourceDeviceId,
|
||||
envelope.timestamp!!,
|
||||
envelope.timestamp!!,
|
||||
targetMessage.dateReceived,
|
||||
message.body,
|
||||
Optional.ofNullable(groupId),
|
||||
targetMessage.expiresIn,
|
||||
metadata.sealedSender,
|
||||
envelope.serverGuid
|
||||
val textMessage = IncomingMessage(
|
||||
from = senderRecipientId,
|
||||
sentTimeMillis = envelope.timestamp!!,
|
||||
serverTimeMillis = envelope.timestamp!!,
|
||||
receivedTimeMillis = targetMessage.dateReceived,
|
||||
body = message.body,
|
||||
groupId = groupId,
|
||||
expiresIn = targetMessage.expiresIn,
|
||||
isUnidentified = metadata.sealedSender,
|
||||
serverGuid = envelope.serverGuid
|
||||
)
|
||||
|
||||
textMessage = IncomingEncryptedMessage(textMessage, message.body)
|
||||
|
||||
return SignalDatabase.messages.insertEditMessageInbox(textMessage, targetMessage).orNull()
|
||||
}
|
||||
}
|
||||
|
||||
@@ -37,11 +37,10 @@ import org.thoughtcrime.securesms.messages.SignalServiceProtoUtil.isMediaMessage
|
||||
import org.thoughtcrime.securesms.messages.SignalServiceProtoUtil.isValid
|
||||
import org.thoughtcrime.securesms.messages.SignalServiceProtoUtil.signedGroupChange
|
||||
import org.thoughtcrime.securesms.messages.SignalServiceProtoUtil.toDecryptionErrorMessage
|
||||
import org.thoughtcrime.securesms.mms.IncomingMessage
|
||||
import org.thoughtcrime.securesms.notifications.v2.ConversationId
|
||||
import org.thoughtcrime.securesms.recipients.Recipient
|
||||
import org.thoughtcrime.securesms.recipients.RecipientId
|
||||
import org.thoughtcrime.securesms.sms.IncomingEncryptedMessage
|
||||
import org.thoughtcrime.securesms.sms.IncomingTextMessage
|
||||
import org.thoughtcrime.securesms.util.EarlyMessageCacheEntry
|
||||
import org.thoughtcrime.securesms.util.FeatureFlags
|
||||
import org.thoughtcrime.securesms.util.SignalLocalMetrics
|
||||
@@ -295,23 +294,18 @@ open class MessageContentProcessor(private val context: Context) {
|
||||
}
|
||||
}
|
||||
|
||||
private fun insertErrorMessage(context: Context, sender: Recipient, senderDevice: Int, timestamp: Long, groupId: Optional<GroupId>, marker: (Long) -> Unit) {
|
||||
val textMessage = IncomingTextMessage(
|
||||
sender.id,
|
||||
senderDevice,
|
||||
timestamp,
|
||||
-1,
|
||||
System.currentTimeMillis(),
|
||||
"",
|
||||
groupId,
|
||||
0,
|
||||
false,
|
||||
null
|
||||
private fun insertErrorMessage(context: Context, sender: Recipient, timestamp: Long, groupId: Optional<GroupId>, marker: (Long) -> Unit) {
|
||||
val textMessage = IncomingMessage(
|
||||
from = sender.id,
|
||||
sentTimeMillis = timestamp,
|
||||
serverTimeMillis = -1,
|
||||
receivedTimeMillis = System.currentTimeMillis(),
|
||||
groupId = groupId.orNull()
|
||||
)
|
||||
|
||||
SignalDatabase
|
||||
.messages
|
||||
.insertMessageInbox(IncomingEncryptedMessage(textMessage, ""))
|
||||
.insertMessageInbox(textMessage)
|
||||
.ifPresent {
|
||||
marker(it.messageId)
|
||||
ApplicationDependencies.getMessageNotifier().updateNotification(context, ConversationId.forConversation(it.threadId))
|
||||
@@ -374,21 +368,21 @@ open class MessageContentProcessor(private val context: Context) {
|
||||
|
||||
MessageState.INVALID_VERSION -> {
|
||||
warn(timestamp, "Handling invalid version.")
|
||||
insertErrorMessage(context, sender, exceptionMetadata.senderDevice, timestamp, exceptionMetadata.groupId.toOptional()) { messageId ->
|
||||
insertErrorMessage(context, sender, timestamp, exceptionMetadata.groupId.toOptional()) { messageId ->
|
||||
SignalDatabase.messages.markAsInvalidVersionKeyExchange(messageId)
|
||||
}
|
||||
}
|
||||
|
||||
MessageState.LEGACY_MESSAGE -> {
|
||||
warn(timestamp, "Handling legacy message.")
|
||||
insertErrorMessage(context, sender, exceptionMetadata.senderDevice, timestamp, exceptionMetadata.groupId.toOptional()) { messageId ->
|
||||
insertErrorMessage(context, sender, timestamp, exceptionMetadata.groupId.toOptional()) { messageId ->
|
||||
SignalDatabase.messages.markAsLegacyVersion(messageId)
|
||||
}
|
||||
}
|
||||
|
||||
MessageState.UNSUPPORTED_DATA_MESSAGE -> {
|
||||
warn(timestamp, "Handling unsupported data message.")
|
||||
insertErrorMessage(context, sender, exceptionMetadata.senderDevice, timestamp, exceptionMetadata.groupId.toOptional()) { messageId ->
|
||||
insertErrorMessage(context, sender, timestamp, exceptionMetadata.groupId.toOptional()) { messageId ->
|
||||
SignalDatabase.messages.markAsUnsupportedProtocolVersion(messageId)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -14,7 +14,7 @@ import org.thoughtcrime.securesms.messages.MessageContentProcessor.Companion.log
|
||||
import org.thoughtcrime.securesms.messages.MessageContentProcessor.Companion.warn
|
||||
import org.thoughtcrime.securesms.messages.SignalServiceProtoUtil.groupId
|
||||
import org.thoughtcrime.securesms.messages.SignalServiceProtoUtil.toPointer
|
||||
import org.thoughtcrime.securesms.mms.IncomingMediaMessage
|
||||
import org.thoughtcrime.securesms.mms.IncomingMessage
|
||||
import org.thoughtcrime.securesms.mms.MmsException
|
||||
import org.thoughtcrime.securesms.recipients.Recipient
|
||||
import org.thoughtcrime.securesms.stories.Stories
|
||||
@@ -58,7 +58,7 @@ object StoryMessageProcessor {
|
||||
StoryType.withoutReplies(isTextStory = storyMessage.textAttachment != null)
|
||||
}
|
||||
|
||||
val mediaMessage = IncomingMediaMessage(
|
||||
val mediaMessage = IncomingMessage(
|
||||
from = senderRecipient.id,
|
||||
sentTimeMillis = envelope.timestamp!!,
|
||||
serverTimeMillis = envelope.serverTimestamp!!,
|
||||
|
||||
Reference in New Issue
Block a user