diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/ConversationViewModel.kt b/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/ConversationViewModel.kt index 6716114af2..37fafebc53 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/ConversationViewModel.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/ConversationViewModel.kt @@ -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())) + } } } 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 eccf0018e3..7e5f0a8986 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/Storage.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/Storage.kt @@ -1842,11 +1842,15 @@ open class Storage @Inject constructor( override fun setBlocked(recipients: Iterable, 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 + } + } } } } 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 49c236937f..2bc923dd81 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/groups/GroupManagerV2Impl.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/groups/GroupManagerV2Impl.kt @@ -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, diff --git a/app/src/main/java/org/thoughtcrime/securesms/onboarding/loading/LoadingViewModel.kt b/app/src/main/java/org/thoughtcrime/securesms/onboarding/loading/LoadingViewModel.kt index f5aed46bb9..7f97631070 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/onboarding/loading/LoadingViewModel.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/onboarding/loading/LoadingViewModel.kt @@ -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() - .onStart { emit(ConfigUpdateNotification.UserConfigsModified) } + (configFactory.configUpdateNotifications + .filterIsInstance() 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() } } diff --git a/libsession/src/main/java/org/session/libsession/messaging/groups/GroupManagerV2.kt b/libsession/src/main/java/org/session/libsession/messaging/groups/GroupManagerV2.kt index 1fbfa4e78c..5331a6291b 100644 --- a/libsession/src/main/java/org/session/libsession/messaging/groups/GroupManagerV2.kt +++ b/libsession/src/main/java/org/session/libsession/messaging/groups/GroupManagerV2.kt @@ -102,4 +102,6 @@ interface GroupManagerV2 { ) fun setExpirationTimer(groupId: AccountId, mode: ExpiryMode, expiryChangeTimestampMs: Long) + + fun onBlocked(accountId: AccountId) } \ No newline at end of file