mirror of
https://github.com/signalapp/Signal-Android.git
synced 2026-04-24 02:39:55 +01:00
Add story distribution list deduplication handling.
This commit is contained in:
@@ -201,6 +201,7 @@ class MediaSelectionRepository(context: Context) {
|
||||
private fun sendMessages(contacts: List<RecipientSearchKey>, body: String, preUploadResults: Collection<PreUploadResult>, mentions: List<Mention>, isViewOnce: Boolean) {
|
||||
val broadcastMessages: MutableList<OutgoingSecureMediaMessage> = ArrayList(contacts.size)
|
||||
val storyMessages: MutableMap<PreUploadResult, MutableList<OutgoingSecureMediaMessage>> = mutableMapOf()
|
||||
val distributionListSentTimestamps: MutableMap<PreUploadResult, Long> = mutableMapOf()
|
||||
|
||||
for (contact in contacts) {
|
||||
val recipient = Recipient.resolved(contact.recipientId)
|
||||
@@ -220,7 +221,7 @@ class MediaSelectionRepository(context: Context) {
|
||||
recipient,
|
||||
body,
|
||||
emptyList(),
|
||||
System.currentTimeMillis(),
|
||||
if (recipient.isDistributionList) distributionListSentTimestamps.getOrPut(preUploadResults.first()) { System.currentTimeMillis() } else System.currentTimeMillis(),
|
||||
-1,
|
||||
TimeUnit.SECONDS.toMillis(recipient.expiresInSeconds.toLong()),
|
||||
isViewOnce,
|
||||
@@ -239,7 +240,7 @@ class MediaSelectionRepository(context: Context) {
|
||||
if (isStory && preUploadResults.size > 1) {
|
||||
preUploadResults.forEach {
|
||||
val list = storyMessages[it] ?: mutableListOf()
|
||||
list.add(OutgoingSecureMediaMessage(message).withSentTimestamp(System.currentTimeMillis()))
|
||||
list.add(OutgoingSecureMediaMessage(message).withSentTimestamp(if (recipient.isDistributionList) distributionListSentTimestamps.getOrPut(it) { System.currentTimeMillis() } else System.currentTimeMillis()))
|
||||
storyMessages[it] = list
|
||||
|
||||
// XXX We must do this to avoid sending out messages to the same recipient with the same
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
package org.thoughtcrime.securesms.mediasend.v2.text.send
|
||||
|
||||
import io.reactivex.rxjava3.core.Completable
|
||||
import io.reactivex.rxjava3.core.Single
|
||||
import org.signal.core.util.ThreadUtil
|
||||
import org.thoughtcrime.securesms.contacts.paged.ContactSearchKey
|
||||
@@ -44,6 +43,7 @@ class TextStoryPostSendRepository {
|
||||
private fun performSend(contactSearchKey: Set<ContactSearchKey>, textStoryPostCreationState: TextStoryPostCreationState, linkPreview: LinkPreview?): Single<TextStoryPostSendResult> {
|
||||
return Single.fromCallable {
|
||||
val messages: MutableList<OutgoingSecureMediaMessage> = mutableListOf()
|
||||
val distributionListSentTimestamp = System.currentTimeMillis()
|
||||
|
||||
for (contact in contactSearchKey) {
|
||||
val recipient = Recipient.resolved(contact.requireShareContact().recipientId.get())
|
||||
@@ -63,7 +63,7 @@ class TextStoryPostSendRepository {
|
||||
recipient,
|
||||
serializeTextStoryState(textStoryPostCreationState),
|
||||
emptyList(),
|
||||
System.currentTimeMillis(),
|
||||
if (recipient.isDistributionList) distributionListSentTimestamp else System.currentTimeMillis(),
|
||||
-1,
|
||||
0,
|
||||
false,
|
||||
@@ -83,9 +83,9 @@ class TextStoryPostSendRepository {
|
||||
ThreadUtil.sleep(5)
|
||||
}
|
||||
|
||||
messages.map { Stories.sendIndividualStory(it) }
|
||||
Stories.sendTextStories(messages)
|
||||
}.flatMap { messages ->
|
||||
Completable.concat(messages).toSingleDefault<TextStoryPostSendResult>(TextStoryPostSendResult.Success)
|
||||
messages.toSingleDefault<TextStoryPostSendResult>(TextStoryPostSendResult.Success)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user