From ebcae1f2846f735f22277e56229148defd23ad8d Mon Sep 17 00:00:00 2001 From: Harris Date: Mon, 5 Sep 2022 11:29:47 +1000 Subject: [PATCH] fix: emoji author parsing and adding message senders to storage (#957) --- .../conversation/v2/ConversationActivityV2.kt | 16 +++++++++++++--- .../thoughtcrime/securesms/database/Storage.kt | 4 ++-- .../libsession/database/StorageProtocol.kt | 6 +++--- .../messaging/messages/visible/VisibleMessage.kt | 2 +- .../sending_receiving/ReceivedMessageHandler.kt | 12 ++++++------ 5 files changed, 25 insertions(+), 15 deletions(-) diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/ConversationActivityV2.kt b/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/ConversationActivityV2.kt index 8283cd946c..660b7014a6 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/ConversationActivityV2.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/ConversationActivityV2.kt @@ -1064,8 +1064,11 @@ class ConversationActivityV2 : PassphraseRequiredActionBarActivity(), InputBarDe dateReceived = emojiTimestamp ) reactionDb.addReaction(MessageId(originalMessage.id, originalMessage.isMms), reaction) + val originalAuthor = if (originalMessage.isOutgoing) { + fromSerialized(viewModel.blindedPublicKey ?: textSecurePreferences.getLocalNumber()!!) + } else originalMessage.individualRecipient.address // Send it - reactionMessage.reaction = Reaction.from(originalMessage.timestamp, originalMessage.recipient.address.serialize(), emoji, true) + reactionMessage.reaction = Reaction.from(originalMessage.timestamp, originalAuthor.serialize(), emoji, true) if (recipient.isOpenGroupRecipient) { val messageServerId = lokiMessageDb.getServerID(originalMessage.id, !originalMessage.isMms) ?: return viewModel.openGroup?.let { @@ -1084,7 +1087,12 @@ class ConversationActivityV2 : PassphraseRequiredActionBarActivity(), InputBarDe message.sentTimestamp = emojiTimestamp val author = textSecurePreferences.getLocalNumber()!! reactionDb.deleteReaction(emoji, MessageId(originalMessage.id, originalMessage.isMms), author) - message.reaction = Reaction.from(originalMessage.timestamp, author, emoji, false) + + val originalAuthor = if (originalMessage.isOutgoing) { + fromSerialized(viewModel.blindedPublicKey ?: textSecurePreferences.getLocalNumber()!!) + } else originalMessage.individualRecipient.address + + message.reaction = Reaction.from(originalMessage.timestamp, originalAuthor.serialize(), emoji, false) if (recipient.isOpenGroupRecipient) { val messageServerId = lokiMessageDb.getServerID(originalMessage.id, !originalMessage.isMms) ?: return viewModel.openGroup?.let { @@ -1330,7 +1338,9 @@ class ConversationActivityV2 : PassphraseRequiredActionBarActivity(), InputBarDe message.text = body val quote = quotedMessage?.let { val quotedAttachments = (it as? MmsMessageRecord)?.slideDeck?.asAttachments() ?: listOf() - val sender = if (it.isOutgoing) fromSerialized(textSecurePreferences.getLocalNumber()!!) else it.individualRecipient.address + val sender = if (it.isOutgoing) { + fromSerialized(viewModel.blindedPublicKey ?: textSecurePreferences.getLocalNumber()!!) + } else it.individualRecipient.address QuoteModel(it.dateSent, sender, it.body, false, quotedAttachments) } val outgoingTextMessage = OutgoingMediaMessage.from(message, recipient, attachments, quote, linkPreview) diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/Storage.kt b/app/src/main/java/org/thoughtcrime/securesms/database/Storage.kt index a47aa87b2d..c374afdebd 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/Storage.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/Storage.kt @@ -892,7 +892,7 @@ class Storage(context: Context, helper: SQLCipherOpenHelper) : Database(context, return mapping } - override fun addReaction(reaction: Reaction) { + override fun addReaction(reaction: Reaction, messageSender: String) { val timestamp = reaction.timestamp val localId = reaction.localId val isMms = reaction.isMms @@ -907,7 +907,7 @@ class Storage(context: Context, helper: SQLCipherOpenHelper) : Database(context, ReactionRecord( messageId = messageId.id, isMms = messageId.mms, - author = reaction.publicKey!!, + author = messageSender, emoji = reaction.emoji!!, serverId = reaction.serverId!!, count = reaction.count!!, diff --git a/libsession/src/main/java/org/session/libsession/database/StorageProtocol.kt b/libsession/src/main/java/org/session/libsession/database/StorageProtocol.kt index e9e76f12ea..ec81e16767 100644 --- a/libsession/src/main/java/org/session/libsession/database/StorageProtocol.kt +++ b/libsession/src/main/java/org/session/libsession/database/StorageProtocol.kt @@ -2,6 +2,7 @@ package org.session.libsession.database import android.content.Context import android.net.Uri +import org.session.libsession.messaging.BlindedIdMapping import org.session.libsession.messaging.calls.CallMessageType import org.session.libsession.messaging.contacts.Contact import org.session.libsession.messaging.jobs.AttachmentUploadJob @@ -13,14 +14,13 @@ import org.session.libsession.messaging.messages.control.MessageRequestResponse import org.session.libsession.messaging.messages.visible.Attachment import org.session.libsession.messaging.messages.visible.Reaction import org.session.libsession.messaging.messages.visible.VisibleMessage +import org.session.libsession.messaging.open_groups.GroupMember import org.session.libsession.messaging.open_groups.OpenGroup import org.session.libsession.messaging.sending_receiving.attachments.AttachmentId import org.session.libsession.messaging.sending_receiving.attachments.DatabaseAttachment import org.session.libsession.messaging.sending_receiving.data_extraction.DataExtractionNotificationInfoMessage import org.session.libsession.messaging.sending_receiving.link_preview.LinkPreview import org.session.libsession.messaging.sending_receiving.quotes.QuoteModel -import org.session.libsession.messaging.BlindedIdMapping -import org.session.libsession.messaging.open_groups.GroupMember import org.session.libsession.utilities.Address import org.session.libsession.utilities.GroupRecord import org.session.libsession.utilities.recipients.Recipient @@ -190,7 +190,7 @@ interface StorageProtocol { fun removeLastOutboxMessageId(server: String) fun getOrCreateBlindedIdMapping(blindedId: String, server: String, serverPublicKey: String, fromOutbox: Boolean = false): BlindedIdMapping - fun addReaction(reaction: Reaction) + fun addReaction(reaction: Reaction, messageSender: String) fun removeReaction(emoji: String, messageTimestamp: Long, author: String) fun updateReactionIfNeeded(message: Message, sender: String, openGroupSentTimestamp: Long) fun deleteReactions(messageId: Long, mms: Boolean) diff --git a/libsession/src/main/java/org/session/libsession/messaging/messages/visible/VisibleMessage.kt b/libsession/src/main/java/org/session/libsession/messaging/messages/visible/VisibleMessage.kt index 379af2b658..2891400c9a 100644 --- a/libsession/src/main/java/org/session/libsession/messaging/messages/visible/VisibleMessage.kt +++ b/libsession/src/main/java/org/session/libsession/messaging/messages/visible/VisibleMessage.kt @@ -71,7 +71,7 @@ class VisibleMessage : Message() { val reaction = Reaction.fromProto(reactionProto) result.reaction = reaction } - return result + return result } } diff --git a/libsession/src/main/java/org/session/libsession/messaging/sending_receiving/ReceivedMessageHandler.kt b/libsession/src/main/java/org/session/libsession/messaging/sending_receiving/ReceivedMessageHandler.kt index 732bfef582..152b5aff72 100644 --- a/libsession/src/main/java/org/session/libsession/messaging/sending_receiving/ReceivedMessageHandler.kt +++ b/libsession/src/main/java/org/session/libsession/messaging/sending_receiving/ReceivedMessageHandler.kt @@ -300,7 +300,7 @@ fun MessageReceiver.handleVisibleMessage(message: VisibleMessage, reaction.serverId = message.openGroupServerMessageID?.toString() ?: message.serverHash.orEmpty() reaction.dateSent = message.sentTimestamp ?: 0 reaction.dateReceived = message.receivedTimestamp ?: 0 - storage.addReaction(reaction) + storage.addReaction(reaction, messageSender) } else { storage.removeReaction(reaction.emoji!!, reaction.timestamp!!, reaction.publicKey!!) } @@ -347,17 +347,17 @@ fun MessageReceiver.handleOpenGroupReactions( val reactorIds = reaction.reactors.filter { it != blindedPublicKey && it != userPublicKey } val count = if (reaction.you) reaction.count - 1 else reaction.count // Add the first reaction (with the count) - reactorIds.firstOrNull()?.let { + reactorIds.firstOrNull()?.let { reactor -> storage.addReaction(Reaction( localId = messageId, isMms = !isSms, - publicKey = it, + publicKey = reactor, emoji = emoji, react = true, serverId = "$openGroupMessageServerID", count = count, index = reaction.index - )) + ), reactor) } // Add all other reactions @@ -373,7 +373,7 @@ fun MessageReceiver.handleOpenGroupReactions( serverId = "$openGroupMessageServerID", count = 0, // Only want this on the first reaction index = reaction.index - )) + ), reactor) } // Add the current user reaction (if applicable and not already included) @@ -387,7 +387,7 @@ fun MessageReceiver.handleOpenGroupReactions( serverId = "$openGroupMessageServerID", count = 1, index = reaction.index - )) + ), userPublicKey) } } }