Skip to content

Commit 52072f5

Browse files
committed
Merge remote-tracking branch 'upstream/refactor-recipient' into refactor/avatar-cleanup
2 parents 3421bf2 + 0012cd9 commit 52072f5

File tree

11 files changed

+41
-27
lines changed

11 files changed

+41
-27
lines changed

app/src/main/java/org/session/libsession/messaging/jobs/BatchMessageReceiveJob.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -176,7 +176,7 @@ class BatchMessageReceiveJob @AssistedInject constructor(
176176
val threadID = if (shouldCreateThread(parsedParams)) {
177177
threadDatabase.getOrCreateThreadIdFor(threadAddress)
178178
} else {
179-
threadDatabase.getOrCreateThreadIdFor(threadAddress)
179+
threadDatabase.getThreadIdIfExistsFor(threadAddress)
180180
}
181181
threadMap.getOrPut(threadID) { mutableListOf() } += parsedParams
182182
} catch (e: Exception) {

app/src/main/java/org/session/libsession/utilities/recipients/Recipient.kt

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@ import org.session.libsession.utilities.isLegacyGroup
1313
import org.session.libsession.utilities.isStandard
1414
import org.thoughtcrime.securesms.database.model.NotifyType
1515
import java.time.Instant
16-
import java.time.ZonedDateTime
1716

1817
data class Recipient(
1918
val address: Address,
@@ -113,10 +112,10 @@ data class Recipient(
113112
val mutedUntilMills: Long?
114113
get() = mutedUntil?.toEpochMilli()
115114

116-
val acceptsCommunityMessageRequests: Boolean
115+
val acceptsBlindedCommunityMessageRequests: Boolean
117116
get() = when (data) {
118-
is RecipientData.BlindedContact -> data.acceptsCommunityMessageRequests
119-
is RecipientData.Generic -> data.acceptsCommunityMessageRequests
117+
is RecipientData.BlindedContact -> data.acceptsBlindedCommunityMessageRequests
118+
is RecipientData.Generic -> data.acceptsBlindedCommunityMessageRequests
120119
is RecipientData.Community,
121120
is RecipientData.LegacyGroup,
122121
is RecipientData.Contact,

app/src/main/java/org/session/libsession/utilities/recipients/RecipientData.kt

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ import org.session.libsession.messaging.open_groups.OpenGroup
99
import org.session.libsession.utilities.Address
1010
import org.session.libsignal.utilities.AccountId
1111
import java.time.Instant
12-
import java.time.ZonedDateTime
1312

1413
/**
1514
* Represents different kind of data associated with different types of recipients.
@@ -50,7 +49,7 @@ sealed interface RecipientData {
5049
override val avatar: RemoteFile? = null,
5150
override val priority: Long = PRIORITY_VISIBLE,
5251
override val proStatus: ProStatus = ProStatus.None,
53-
val acceptsCommunityMessageRequests: Boolean = false,
52+
val acceptsBlindedCommunityMessageRequests: Boolean = false,
5453
override val profileUpdatedAt: Instant? = null,
5554
) : RecipientData
5655

@@ -59,7 +58,7 @@ sealed interface RecipientData {
5958
override val avatar: RemoteFile.Encrypted?,
6059
override val priority: Long,
6160
override val proStatus: ProStatus,
62-
val acceptsCommunityMessageRequests: Boolean,
61+
val acceptsBlindedCommunityMessageRequests: Boolean,
6362
override val profileUpdatedAt: Instant?
6463
) : ConfigBased, RecipientData
6564

app/src/main/java/org/thoughtcrime/securesms/configs/ConfigToDatabaseSync.kt

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import kotlinx.coroutines.CoroutineScope
66
import kotlinx.coroutines.Dispatchers
77
import kotlinx.coroutines.ExperimentalCoroutinesApi
88
import kotlinx.coroutines.flow.collectLatest
9+
import kotlinx.coroutines.flow.combine
910
import kotlinx.coroutines.flow.distinctUntilChanged
1011
import kotlinx.coroutines.flow.filterNotNull
1112
import kotlinx.coroutines.flow.first
@@ -28,6 +29,7 @@ import org.session.libsession.utilities.Address
2829
import org.session.libsession.utilities.Address.Companion.fromSerialized
2930
import org.session.libsession.utilities.ConfigFactoryProtocol
3031
import org.session.libsession.utilities.TextSecurePreferences
32+
import org.session.libsession.utilities.UserConfigType
3133
import org.session.libsession.utilities.getGroup
3234
import org.session.libsession.utilities.userConfigsChanged
3335
import org.session.libsignal.crypto.ecc.DjbECPrivateKey
@@ -50,6 +52,8 @@ import org.thoughtcrime.securesms.dependencies.ManagerScope
5052
import org.thoughtcrime.securesms.dependencies.OnAppStartupComponent
5153
import org.thoughtcrime.securesms.repository.ConversationRepository
5254
import org.thoughtcrime.securesms.util.SessionMetaProtocol
55+
import org.thoughtcrime.securesms.util.castAwayType
56+
import java.util.EnumSet
5357
import java.util.concurrent.TimeUnit
5458
import javax.inject.Inject
5559

@@ -87,9 +91,15 @@ class ConfigToDatabaseSync @Inject constructor(
8791
preferences.watchLocalNumber()
8892
.filterNotNull()
8993
.take(1)
90-
.flatMapLatest { conversationRepository.conversationListAddressesFlow }
91-
.map { addresses ->
92-
addresses to configFactory.withUserConfigs { it.convoInfoVolatile.all() }
94+
.flatMapLatest {
95+
combine(
96+
conversationRepository.conversationListAddressesFlow,
97+
configFactory.userConfigsChanged(EnumSet.of(UserConfigType.CONVO_INFO_VOLATILE))
98+
.castAwayType()
99+
.onStart { emit(Unit) }
100+
.map { _ -> configFactory.withUserConfigs { it.convoInfoVolatile.all() } },
101+
::Pair
102+
)
93103
}
94104
.distinctUntilChanged()
95105
.collectLatest { (conversations, convoInfo) ->
@@ -104,9 +114,7 @@ class ConfigToDatabaseSync @Inject constructor(
104114
}
105115

106116
private fun ensureConversations(addresses: Set<Address.Conversable>) {
107-
val myAddress = Address.Standard(AccountId(preferences.getLocalNumber()!!))
108-
val ensureAddresses = if (myAddress in addresses) addresses else addresses + myAddress
109-
val result = threadDatabase.ensureThreads(ensureAddresses) // Always include NTS so it doesn't get deleted
117+
val result = threadDatabase.ensureThreads(addresses)
110118

111119
if (result.deletedThreads.isNotEmpty()) {
112120
val deletedThreadIDs = result.deletedThreads.values

app/src/main/java/org/thoughtcrime/securesms/conversation/v2/ConversationActivityV2.kt

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,6 @@ import kotlinx.coroutines.flow.first
7676
import kotlinx.coroutines.flow.map
7777
import kotlinx.coroutines.flow.mapNotNull
7878
import kotlinx.coroutines.flow.receiveAsFlow
79-
import kotlinx.coroutines.flow.scan
8079
import kotlinx.coroutines.launch
8180
import kotlinx.coroutines.withContext
8281
import network.loki.messenger.R
@@ -1425,7 +1424,7 @@ class ConversationActivityV2 : ScreenLockActionBarActivity(), InputBarDelegate,
14251424
}
14261425

14271426
// If we're trying to message someone who has blocked community message requests
1428-
recipient.address.isBlinded && !recipient.acceptsCommunityMessageRequests -> {
1427+
recipient.address.isBlinded && !recipient.acceptsBlindedCommunityMessageRequests -> {
14291428
Phrase.from(applicationContext, R.string.messageRequestsTurnedOff)
14301429
.put(NAME_KEY, recipient.displayName())
14311430
.format()

app/src/main/java/org/thoughtcrime/securesms/conversation/v2/ConversationViewModel.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -208,7 +208,7 @@ class ConversationViewModel @AssistedInject constructor(
208208

209209

210210
val showSendAfterApprovalText: Flow<Boolean> get() = recipientFlow.map { r ->
211-
(r.acceptsCommunityMessageRequests || r.isStandardRecipient) && !r.isLocalNumber && !r.approvedMe
211+
(r.acceptsBlindedCommunityMessageRequests || r.isStandardRecipient) && !r.isLocalNumber && !r.approvedMe
212212
}
213213

214214
val openGroupFlow: StateFlow<OpenGroup?> = recipientFlow
@@ -616,7 +616,7 @@ class ConversationViewModel @AssistedInject constructor(
616616
groupDb.getGroup(recipient.address.toGroupString()).orNull()?.isActive == true &&
617617
deprecationState != LegacyGroupDeprecationManager.DeprecationState.DEPRECATED
618618
}
619-
address.isCommunityInbox && !recipient.acceptsCommunityMessageRequests -> false
619+
address.isCommunityInbox && !recipient.acceptsBlindedCommunityMessageRequests -> false
620620
else -> true
621621
}
622622
}

app/src/main/java/org/thoughtcrime/securesms/database/RecipientRepository.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -461,7 +461,7 @@ class RecipientRepository @Inject constructor(
461461
// This information is not available in the config but we infer that
462462
// if you already have this person as blinded contact, you would have been
463463
// able to send them a message before.
464-
acceptsCommunityMessageRequests = true,
464+
acceptsBlindedCommunityMessageRequests = true,
465465
profileUpdatedAt = contact.profileUpdatedEpochSeconds.secondsToInstant()
466466
)
467467
}
@@ -491,7 +491,7 @@ class RecipientRepository @Inject constructor(
491491
displayName = settings.name?.takeIf { it.isNotBlank() } ?: groupMemberInfo?.name.orEmpty(),
492492
avatar = settings.profilePic?.toRemoteFile() ?: groupMemberInfo?.profilePic?.toRemoteFile(),
493493
proStatus = settings.proStatus,
494-
acceptsCommunityMessageRequests = !settings.blocksCommunityMessagesRequests,
494+
acceptsBlindedCommunityMessageRequests = !settings.blocksCommunityMessagesRequests,
495495
),
496496
mutedUntil = settings.muteUntil,
497497
autoDownloadAttachments = settings.autoDownloadAttachments,

app/src/main/java/org/thoughtcrime/securesms/groups/GroupLeavingWorker.kt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import androidx.work.WorkerParameters
1212
import dagger.assisted.Assisted
1313
import dagger.assisted.AssistedInject
1414
import kotlinx.coroutines.CancellationException
15+
import kotlinx.coroutines.channels.Channel
1516
import org.session.libsession.messaging.groups.GroupScope
1617
import org.session.libsession.messaging.messages.control.GroupUpdated
1718
import org.session.libsession.messaging.sending_receiving.MessageSender
@@ -73,14 +74,19 @@ class GroupLeavingWorker @AssistedInject constructor(
7374
)
7475

7576
// If we are not the only admin, send a left message for other admin to handle the member removal
77+
// We'll have to wait for this message to be sent before going ahead to delete the group
78+
val statusChannel = Channel<kotlin.Result<Unit>>()
7679
MessageSender.send(
7780
GroupUpdated(
7881
GroupUpdateMessage.newBuilder()
7982
.setMemberLeftMessage(DataMessage.GroupUpdateMemberLeftMessage.getDefaultInstance())
8083
.build()
8184
),
8285
address,
86+
statusCallback = statusChannel
8387
)
88+
89+
statusChannel.receive().getOrThrow()
8490
}
8591

8692
// If we are the only admin, leaving this group will destroy the group

app/src/main/java/org/thoughtcrime/securesms/home/HomeViewModel.kt

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ import kotlinx.coroutines.flow.stateIn
2525
import kotlinx.coroutines.flow.update
2626
import kotlinx.coroutines.launch
2727
import network.loki.messenger.R
28+
import network.loki.messenger.libsession_util.ConfigBase.Companion.PRIORITY_HIDDEN
2829
import org.session.libsession.database.StorageProtocol
2930
import org.session.libsession.messaging.groups.GroupManagerV2
3031
import org.session.libsession.utilities.Address
@@ -93,7 +94,11 @@ class HomeViewModel @Inject constructor(
9394
conversationRepository.observeConversationList()
9495
}
9596
.map { convos ->
96-
val (approved, unapproved) = convos.partition { it.recipient.approved }
97+
val (approved, unapproved) = convos
98+
.asSequence()
99+
.filter { !it.recipient.blocked } // We don't display blocked convo
100+
.filter { it.recipient.priority != PRIORITY_HIDDEN } // We don't show hidden convo
101+
.partition { it.recipient.approved }
97102
val unreadUnapproved = unapproved
98103
.count { it.unreadCount > 0 || it.unreadMentionCount > 0 }
99104
unreadUnapproved to approved.sortedWith(CONVERSATION_COMPARATOR)

app/src/main/java/org/thoughtcrime/securesms/repository/ConversationRepository.kt

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -165,12 +165,10 @@ class DefaultConversationRepository @Inject constructor(
165165
private fun getConversationListAddresses() = buildSet {
166166
val myAddress = Address.Standard(AccountId(textSecurePreferences.getLocalNumber() ?: return@buildSet ))
167167

168-
configFactory.withUserConfigs { configs ->
169-
// Have NTS?
170-
if (configs.userProfile.getNtsPriority() >= 0) {
171-
add(myAddress)
172-
}
168+
// Always have NTS - we should only "hide" them on home screen - the convo should never be deleted
169+
add(myAddress)
173170

171+
configFactory.withUserConfigs { configs ->
174172
// Contacts
175173
for (contact in configs.contacts.all()) {
176174
if (contact.priority >= 0 && (!contact.blocked || contact.approved)) {

0 commit comments

Comments
 (0)