Do not send control message for re-invite/re-promote (#951)

pull/1710/head
SessionHero01 2 months ago committed by GitHub
parent fb0dc85bff
commit f3b8dd5d37
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

@ -17,6 +17,7 @@ import kotlinx.coroutines.flow.map
import kotlinx.coroutines.flow.stateIn
import kotlinx.coroutines.launch
import network.loki.messenger.R
import network.loki.messenger.libsession_util.getOrNull
import org.session.libsession.database.StorageProtocol
import org.session.libsession.messaging.groups.GroupInviteException
import org.session.libsession.messaging.groups.GroupManagerV2
@ -92,18 +93,39 @@ class EditGroupViewModel @AssistedInject constructor(
groupManager.inviteMembers(
groupId,
contacts.toList(),
shareHistory = false
shareHistory = false,
isReinvite = false,
)
}
}
fun onResendInviteClicked(contactSessionId: AccountId) {
onContactSelected(setOf(contactSessionId))
performGroupOperation(
showLoading = false,
errorMessage = { err ->
if (err is GroupInviteException) {
err.format(context, storage).toString()
} else {
null
}
}
) {
val historyShared = configFactory.withGroupConfigs(groupId) {
it.groupMembers.getOrNull(contactSessionId.hexString)
}?.supplement == true
groupManager.inviteMembers(
groupId,
listOf(contactSessionId),
shareHistory = historyShared,
isReinvite = true,
)
}
}
fun onPromoteContact(memberSessionId: AccountId) {
performGroupOperation(showLoading = false) {
groupManager.promoteMember(groupId, listOf(memberSessionId))
groupManager.promoteMember(groupId, listOf(memberSessionId), isRepromote = false)
}
}
@ -118,7 +140,9 @@ class EditGroupViewModel @AssistedInject constructor(
}
fun onResendPromotionClicked(memberSessionId: AccountId) {
onPromoteContact(memberSessionId)
performGroupOperation(showLoading = false) {
groupManager.promoteMember(groupId, listOf(memberSessionId), isRepromote = true)
}
}
fun onEditNameClicked() {

@ -206,7 +206,8 @@ class GroupManagerV2Impl @Inject constructor(
override suspend fun inviteMembers(
group: AccountId,
newMembers: List<AccountId>,
shareHistory: Boolean
shareHistory: Boolean,
isReinvite: Boolean
): Unit = scope.launchAndWait(group, "Invite members") {
val adminKey = requireAdminAccess(group)
val groupAuth = OwnedSwarmAuth.ofClosedGroup(group, adminKey)
@ -265,7 +266,9 @@ class GroupManagerV2Impl @Inject constructor(
)
// Send a group update message to the group telling members someone has been invited
sendGroupUpdateForAddingMembers(group, adminKey, newMembers)
if (!isReinvite) {
sendGroupUpdateForAddingMembers(group, adminKey, newMembers)
}
// Call the API
try {
@ -496,7 +499,8 @@ class GroupManagerV2Impl @Inject constructor(
override suspend fun promoteMember(
group: AccountId,
members: List<AccountId>
members: List<AccountId>,
isRepromote: Boolean
): Unit = scope.launchAndWait(group, "Promote member") {
withContext(SupervisorJob()) {
val adminKey = requireAdminAccess(group)
@ -530,9 +534,11 @@ class GroupManagerV2Impl @Inject constructor(
sentTimestamp = timestamp
}
// Insert the message locally immediately so we can see the incoming change
// The same message will be sent later to the group
storage.insertGroupInfoChange(message, group)
if (!isRepromote) {
// Insert the message locally immediately so we can see the incoming change
// The same message will be sent later to the group
storage.insertGroupInfoChange(message, group)
}
// Send out the promote message to the members concurrently
val promoteMessage = GroupUpdated(
@ -578,7 +584,9 @@ class GroupManagerV2Impl @Inject constructor(
}
MessageSender.sendAndAwait(message, Address.fromSerialized(group.hexString))
if (!isRepromote) {
MessageSender.sendAndAwait(message, Address.fromSerialized(group.hexString))
}
}
}
/**

@ -4,7 +4,6 @@ import network.loki.messenger.libsession_util.util.ExpiryMode
import org.session.libsession.messaging.messages.control.GroupUpdated
import org.session.libsession.utilities.recipients.Recipient
import org.session.libsignal.protos.SignalServiceProtos.DataMessage.GroupUpdateDeleteMemberContentMessage
import org.session.libsignal.protos.SignalServiceProtos.DataMessage.GroupUpdateMessage
import org.session.libsignal.utilities.AccountId
/**
@ -21,7 +20,8 @@ interface GroupManagerV2 {
suspend fun inviteMembers(
group: AccountId,
newMembers: List<AccountId>,
shareHistory: Boolean
shareHistory: Boolean,
isReinvite: Boolean, // Whether this comes from a re-invite
)
suspend fun removeMembers(
@ -46,7 +46,7 @@ interface GroupManagerV2 {
suspend fun handleMemberLeftMessage(memberId: AccountId, group: AccountId)
suspend fun leaveGroup(groupId: AccountId)
suspend fun promoteMember(group: AccountId, members: List<AccountId>)
suspend fun promoteMember(group: AccountId, members: List<AccountId>, isRepromote: Boolean)
suspend fun handleInvitation(
groupId: AccountId,

Loading…
Cancel
Save