diff --git a/app/src/main/java/org/thoughtcrime/securesms/configs/ConfigToDatabaseSync.kt b/app/src/main/java/org/thoughtcrime/securesms/configs/ConfigToDatabaseSync.kt index 15d3a7fede..4fae3a59fb 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/configs/ConfigToDatabaseSync.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/configs/ConfigToDatabaseSync.kt @@ -8,6 +8,7 @@ import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.flow.collectLatest import kotlinx.coroutines.flow.combine import kotlinx.coroutines.flow.distinctUntilChanged +import kotlinx.coroutines.flow.emptyFlow import kotlinx.coroutines.flow.filterNotNull import kotlinx.coroutines.flow.flatMapLatest import kotlinx.coroutines.flow.map @@ -58,6 +59,7 @@ import org.thoughtcrime.securesms.util.castAwayType import java.util.EnumSet import java.util.concurrent.TimeUnit import javax.inject.Inject +import kotlin.math.log private const val TAG = "ConfigToDatabaseSync" @@ -93,17 +95,20 @@ class ConfigToDatabaseSync @Inject constructor( // Sync conversations from config -> database scope.launch { preferences.watchLocalNumber() - .filterNotNull() - .take(1) - .flatMapLatest { - combine( - conversationRepository.conversationListAddressesFlow, - configFactory.userConfigsChanged(EnumSet.of(UserConfigType.CONVO_INFO_VOLATILE)) - .castAwayType() - .onStart { emit(Unit) } - .map { _ -> configFactory.withUserConfigs { it.convoInfoVolatile.all() } }, - ::Pair - ) + .map { it != null } + .flatMapLatest { loggedIn -> + if (loggedIn) { + combine( + conversationRepository.conversationListAddressesFlow, + configFactory.userConfigsChanged(EnumSet.of(UserConfigType.CONVO_INFO_VOLATILE)) + .castAwayType() + .onStart { emit(Unit) } + .map { _ -> configFactory.withUserConfigs { it.convoInfoVolatile.all() } }, + ::Pair + ) + } else { + emptyFlow() + } } .distinctUntilChanged() .collectLatest { (conversations, convoInfo) -> diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/BlindMappingRepository.kt b/app/src/main/java/org/thoughtcrime/securesms/database/BlindMappingRepository.kt index 630663cc05..fe1959dc78 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/BlindMappingRepository.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/BlindMappingRepository.kt @@ -5,7 +5,7 @@ import kotlinx.coroutines.GlobalScope import kotlinx.coroutines.flow.SharingStarted import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.flow.distinctUntilChanged -import kotlinx.coroutines.flow.filterNotNull +import kotlinx.coroutines.flow.emptyFlow import kotlinx.coroutines.flow.flatMapLatest import kotlinx.coroutines.flow.map import kotlinx.coroutines.flow.onStart @@ -43,21 +43,24 @@ class BlindMappingRepository @Inject constructor( */ @Suppress("OPT_IN_USAGE") val mappings: StateFlow>> = prefs.watchLocalNumber() - .filterNotNull() .flatMapLatest { localAddress -> - configFactory - .userConfigsChanged(setOf(UserConfigType.USER_GROUPS, UserConfigType.CONTACTS)) - .castAwayType() - .onStart { emit(Unit) } - .map { - configFactory.withUserConfigs { configs -> - Pair( - configs.userGroups.allCommunityInfo().map { it.community }, - configs.contacts.all().map { Address.Standard(AccountId(it.id)) } - + Address.Standard(AccountId(localAddress)) - ) + if (localAddress.isNullOrBlank()) { + emptyFlow() + } else { + configFactory + .userConfigsChanged(setOf(UserConfigType.USER_GROUPS, UserConfigType.CONTACTS)) + .castAwayType() + .onStart { emit(Unit) } + .map { + configFactory.withUserConfigs { configs -> + Pair( + configs.userGroups.allCommunityInfo().map { it.community }, + configs.contacts.all().map { Address.Standard(AccountId(it.id)) } + + Address.Standard(AccountId(localAddress)) + ) + } } - } + } } .distinctUntilChanged() .map { (allCommunities, allContacts) -> diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/RecipientRepository.kt b/app/src/main/java/org/thoughtcrime/securesms/database/RecipientRepository.kt index 70d252701e..d36ad9b6bc 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/RecipientRepository.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/RecipientRepository.kt @@ -12,6 +12,7 @@ import kotlinx.coroutines.flow.SharedFlow import kotlinx.coroutines.flow.SharingStarted import kotlinx.coroutines.flow.debounce import kotlinx.coroutines.flow.distinctUntilChanged +import kotlinx.coroutines.flow.emptyFlow import kotlinx.coroutines.flow.filter import kotlinx.coroutines.flow.filterIsInstance import kotlinx.coroutines.flow.filterNotNull @@ -93,9 +94,13 @@ class RecipientRepository @Inject constructor( fun observeSelf(): Flow { return preferences.watchLocalNumber() - .filterNotNull() - .distinctUntilChanged() - .flatMapLatest { observeRecipient(it.toAddress()) } + .flatMapLatest { + if (it.isNullOrBlank()) { + emptyFlow() + } else { + observeRecipient(it.toAddress()) + } + } } fun getSelf(): Recipient {