diff --git a/app/src/main/java/org/thoughtcrime/securesms/groups/GroupManagerV2Impl.kt b/app/src/main/java/org/thoughtcrime/securesms/groups/GroupManagerV2Impl.kt index 15fe6ecf1b..b4dd9fbddf 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/groups/GroupManagerV2Impl.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/groups/GroupManagerV2Impl.kt @@ -1108,7 +1108,10 @@ class GroupManagerV2Impl @Inject constructor( override fun handleGroupInfoChange(message: GroupUpdated, groupId: AccountId) { if (message.inner.hasInfoChangeMessage() && message.inner.infoChangeMessage.hasUpdatedExpiration()) { // If we receive a disappearing message update, we need to remove the existing timer control message - storage.deleteGroupInfoMessages(groupId, UpdateMessageData.Kind.GroupExpirationUpdated::class.java) + storage.deleteGroupInfoMessages( + groupId, + UpdateMessageData.Kind.GroupExpirationUpdated::class.java + ) } storage.insertGroupInfoChange(message, groupId) diff --git a/libsession/src/main/java/org/session/libsession/messaging/jobs/BatchMessageReceiveJob.kt b/libsession/src/main/java/org/session/libsession/messaging/jobs/BatchMessageReceiveJob.kt index 35ad848f06..90d29423c3 100644 --- a/libsession/src/main/java/org/session/libsession/messaging/jobs/BatchMessageReceiveJob.kt +++ b/libsession/src/main/java/org/session/libsession/messaging/jobs/BatchMessageReceiveJob.kt @@ -1,15 +1,11 @@ package org.session.libsession.messaging.jobs import com.google.protobuf.ByteString -import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.async import kotlinx.coroutines.awaitAll import kotlinx.coroutines.coroutineScope -import kotlinx.coroutines.runBlocking import network.loki.messenger.libsession_util.ConfigBase -import nl.komponents.kovenant.Promise -import nl.komponents.kovenant.task import org.session.libsession.messaging.MessagingModuleConfiguration import org.session.libsession.messaging.messages.Destination import org.session.libsession.messaging.messages.Message @@ -233,7 +229,7 @@ class BatchMessageReceiveJob( proto = proto, threadId = threadId, openGroupID = openGroupID, - closedGroup = parameters.closedGroup?.publicKey?.let(::AccountId) + groupv2Id = parameters.closedGroup?.publicKey?.let(::AccountId) ) } } catch (e: Exception) { 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 077b544d0b..e46d9308df 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 @@ -57,7 +57,6 @@ import org.session.libsignal.crypto.ecc.DjbECPublicKey import org.session.libsignal.crypto.ecc.ECKeyPair import org.session.libsignal.messages.SignalServiceGroup import org.session.libsignal.protos.SignalServiceProtos -import org.session.libsignal.protos.SignalServiceProtos.DataMessage.LokiProfile import org.session.libsignal.protos.SignalServiceProtos.SharedConfigMessage import org.session.libsignal.utilities.AccountId import org.session.libsignal.utilities.Base64 @@ -77,7 +76,7 @@ internal fun MessageReceiver.isBlocked(publicKey: String): Boolean { return recipient.isBlocked } -fun MessageReceiver.handle(message: Message, proto: SignalServiceProtos.Content, threadId: Long, openGroupID: String?, closedGroup: AccountId?) { +fun MessageReceiver.handle(message: Message, proto: SignalServiceProtos.Content, threadId: Long, openGroupID: String?, groupv2Id: AccountId?) { // Do nothing if the message was outdated if (MessageReceiver.messageIsOutdated(message, threadId, openGroupID)) { return } @@ -85,8 +84,16 @@ fun MessageReceiver.handle(message: Message, proto: SignalServiceProtos.Content, is ReadReceipt -> handleReadReceipt(message) is TypingIndicator -> handleTypingIndicator(message) is ClosedGroupControlMessage -> handleClosedGroupControlMessage(message) - is GroupUpdated -> handleGroupUpdated(message, closedGroup) - is ExpirationTimerUpdate -> handleExpirationTimerUpdate(message) + is GroupUpdated -> handleGroupUpdated(message, groupv2Id) + is ExpirationTimerUpdate -> { + // For groupsv2, there are dedicated mechanisms for handling expiration timers, and + // we want to avoid the 1-to-1 message format which is unauthenticated in a group settings. + if (groupv2Id != null) { + Log.d("MessageReceiver", "Ignoring expiration timer update for closed group") + } else { + handleExpirationTimerUpdate(message) + } + } is DataExtractionNotification -> handleDataExtractionNotification(message) is ConfigurationMessage -> handleConfigurationMessage(message) is UnsendRequest -> handleUnsendRequest(message)