Also delete group invitation whenever an invitation is blocked (#851)

* Fix 1970 timestamp issue

* Updated function name

* When group invite is blocked, also delete the invite
pull/1710/head
SessionHero01 5 months ago committed by GitHub
parent 2fed0402d9
commit cb80fb2970
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

@ -342,10 +342,14 @@ class ConversationViewModel(
} }
fun block() { fun block() {
// inviting admin will be true if this request is a closed group message request // inviting admin will be non-null if this request is a closed group message request
val recipient = invitingAdmin ?: recipient ?: return Log.w("Loki", "Recipient was null for block action") val recipient = invitingAdmin ?: recipient ?: return Log.w("Loki", "Recipient was null for block action")
if (recipient.isContactRecipient || recipient.isGroupV2Recipient) { if (recipient.isContactRecipient || recipient.isGroupV2Recipient) {
repository.setBlocked(threadId, recipient, true) repository.setBlocked(threadId, recipient, true)
if (recipient.isGroupV2Recipient) {
groupManagerV2.onBlocked(AccountId(recipient.address.serialize()))
}
} }
} }

@ -1842,11 +1842,15 @@ open class Storage @Inject constructor(
override fun setBlocked(recipients: Iterable<Recipient>, isBlocked: Boolean, fromConfigUpdate: Boolean) { override fun setBlocked(recipients: Iterable<Recipient>, isBlocked: Boolean, fromConfigUpdate: Boolean) {
val recipientDb = recipientDatabase val recipientDb = recipientDatabase
recipientDb.setBlocked(recipients, isBlocked) recipientDb.setBlocked(recipients, isBlocked)
configFactory.withMutableUserConfigs { configs ->
recipients.filter { it.isContactRecipient && !it.isLocalNumber }.forEach { recipient -> if (!fromConfigUpdate) {
configs.contacts.upsertContact(recipient.address.serialize()) { configFactory.withMutableUserConfigs { configs ->
this.blocked = isBlocked recipients.filter { it.isContactRecipient && !it.isLocalNumber }
} .forEach { recipient ->
configs.contacts.upsertContact(recipient.address.serialize()) {
this.blocked = isBlocked
}
}
} }
} }
} }

@ -5,12 +5,14 @@ import com.google.protobuf.ByteString
import dagger.hilt.android.qualifiers.ApplicationContext import dagger.hilt.android.qualifiers.ApplicationContext
import kotlinx.coroutines.Deferred import kotlinx.coroutines.Deferred
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.SupervisorJob import kotlinx.coroutines.SupervisorJob
import kotlinx.coroutines.async import kotlinx.coroutines.async
import kotlinx.coroutines.awaitAll import kotlinx.coroutines.awaitAll
import kotlinx.coroutines.flow.filter import kotlinx.coroutines.flow.filter
import kotlinx.coroutines.flow.filterIsInstance import kotlinx.coroutines.flow.filterIsInstance
import kotlinx.coroutines.flow.first import kotlinx.coroutines.flow.first
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext import kotlinx.coroutines.withContext
import network.loki.messenger.R import network.loki.messenger.R
import network.loki.messenger.libsession_util.ConfigBase.Companion.PRIORITY_VISIBLE import network.loki.messenger.libsession_util.ConfigBase.Companion.PRIORITY_VISIBLE
@ -1083,6 +1085,12 @@ class GroupManagerV2Impl @Inject constructor(
} }
} }
override fun onBlocked(accountId: AccountId) {
GlobalScope.launch {
respondToInvitation(accountId, false)
}
}
override fun setExpirationTimer( override fun setExpirationTimer(
groupId: AccountId, groupId: AccountId,
mode: ExpiryMode, mode: ExpiryMode,

@ -28,6 +28,7 @@ import kotlinx.coroutines.withContext
import org.session.libsession.utilities.ConfigFactoryProtocol import org.session.libsession.utilities.ConfigFactoryProtocol
import org.session.libsession.utilities.ConfigUpdateNotification import org.session.libsession.utilities.ConfigUpdateNotification
import org.session.libsession.utilities.TextSecurePreferences import org.session.libsession.utilities.TextSecurePreferences
import org.session.libsignal.utilities.Log
import javax.inject.Inject import javax.inject.Inject
import kotlin.time.Duration import kotlin.time.Duration
import kotlin.time.Duration.Companion.milliseconds import kotlin.time.Duration.Companion.milliseconds
@ -73,11 +74,12 @@ internal class LoadingViewModel @Inject constructor(
viewModelScope.launch { viewModelScope.launch {
try { try {
configFactory.configUpdateNotifications (configFactory.configUpdateNotifications
.filterIsInstance<ConfigUpdateNotification.UserConfigsModified>() .filterIsInstance<ConfigUpdateNotification.UserConfigsMerged>() as Flow<*>)
.onStart { emit(ConfigUpdateNotification.UserConfigsModified) } .onStart { emit(Unit) }
.filter { .filter {
configFactory.withUserConfigs { configs -> prefs.getLocalNumber() != null &&
configFactory.withUserConfigs { configs ->
!configs.userProfile.getName().isNullOrEmpty() !configs.userProfile.getName().isNullOrEmpty()
} }
} }
@ -85,6 +87,7 @@ internal class LoadingViewModel @Inject constructor(
.first() .first()
onSuccess() onSuccess()
} catch (e: Exception) { } catch (e: Exception) {
Log.d("LoadingViewModel", "Failed to load user configs", e)
onFail() onFail()
} }
} }

@ -102,4 +102,6 @@ interface GroupManagerV2 {
) )
fun setExpirationTimer(groupId: AccountId, mode: ExpiryMode, expiryChangeTimestampMs: Long) fun setExpirationTimer(groupId: AccountId, mode: ExpiryMode, expiryChangeTimestampMs: Long)
fun onBlocked(accountId: AccountId)
} }
Loading…
Cancel
Save