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 4 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() {
// 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")
if (recipient.isContactRecipient || recipient.isGroupV2Recipient) {
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) {
val recipientDb = recipientDatabase
recipientDb.setBlocked(recipients, isBlocked)
configFactory.withMutableUserConfigs { configs ->
recipients.filter { it.isContactRecipient && !it.isLocalNumber }.forEach { recipient ->
configs.contacts.upsertContact(recipient.address.serialize()) {
this.blocked = isBlocked
}
if (!fromConfigUpdate) {
configFactory.withMutableUserConfigs { configs ->
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 kotlinx.coroutines.Deferred
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.SupervisorJob
import kotlinx.coroutines.async
import kotlinx.coroutines.awaitAll
import kotlinx.coroutines.flow.filter
import kotlinx.coroutines.flow.filterIsInstance
import kotlinx.coroutines.flow.first
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
import network.loki.messenger.R
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(
groupId: AccountId,
mode: ExpiryMode,

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

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