Fix issue where stories with links would fail to send.

fork-5.53.8
Alex Hart 2022-03-16 13:44:22 -03:00 zatwierdzone przez Cody Henthorne
rodzic 19d3bbc70a
commit 7f4a12c179
3 zmienionych plików z 25 dodań i 30 usunięć

Wyświetl plik

@ -1,6 +1,7 @@
package org.thoughtcrime.securesms.mediasend.v2.text.send
import android.content.Context
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
@ -17,7 +18,7 @@ import org.thoughtcrime.securesms.mediasend.v2.text.TextStoryPostCreationState
import org.thoughtcrime.securesms.mms.OutgoingMediaMessage
import org.thoughtcrime.securesms.mms.OutgoingSecureMediaMessage
import org.thoughtcrime.securesms.recipients.Recipient
import org.thoughtcrime.securesms.sms.MessageSender
import org.thoughtcrime.securesms.stories.Stories
import org.thoughtcrime.securesms.util.Base64
class TextStoryPostSendRepository(context: Context) {
@ -93,8 +94,9 @@ class TextStoryPostSendRepository(context: Context) {
ThreadUtil.sleep(5)
}
MessageSender.sendMediaBroadcast(context, messages, emptyList())
TextStoryPostSendResult.Success
messages.map { Stories.sendIndividualStory(it) }
}.flatMap { messages ->
Completable.concat(messages).toSingleDefault<TextStoryPostSendResult>(TextStoryPostSendResult.Success)
}
}

Wyświetl plik

@ -231,7 +231,6 @@ public class MessageSender {
attachmentDatabase.updateMessageId(preUploadAttachmentIds, primaryMessageId);
messageIds.add(primaryMessageId);
uploadLinkPreviews(primaryMessage, primaryMessageId, jobManager, preUploadJobIds, messageDependsOnIds);
if (messages.size() > 0) {
List<OutgoingSecureMediaMessage> secondaryMessages = messages.subList(1, messages.size());
@ -260,7 +259,6 @@ public class MessageSender {
attachmentDatabase.updateMessageId(attachmentIds, messageId);
messageIds.add(messageId);
uploadLinkPreviews(secondaryMessage, messageId, jobManager, preUploadJobIds, messageDependsOnIds);
}
for (int i = 0; i < attachmentCopies.size(); i++) {
@ -295,31 +293,6 @@ public class MessageSender {
}
}
@WorkerThread
private static void uploadLinkPreviews(@NonNull OutgoingMediaMessage mediaMessage,
long outgoingMessageId,
@NonNull JobManager jobManager,
@NonNull List<String> preUploadJobIds,
@NonNull List<String> messageDependsOnIds)
{
if (!mediaMessage.getLinkPreviews().isEmpty()) {
try {
MmsMessageRecord freshRecord = (MmsMessageRecord) SignalDatabase.mms().getMessageRecord(outgoingMessageId);
freshRecord.getLinkPreviews()
.stream()
.map(LinkPreview::getAttachmentId)
.filter(Objects::nonNull)
.forEach(previewId -> {
Job job = new AttachmentUploadJob(previewId);
jobManager.add(job, preUploadJobIds);
messageDependsOnIds.add(job.getId());
});
} catch (NoSuchMessageException e) {
throw new AssertionError("Cannot fetch record we just inserted");
}
}
}
/**
* @return A result if the attachment was enqueued, or null if it failed to enqueue or shouldn't
* be enqueued (like in the case of a local self-send).

Wyświetl plik

@ -1,11 +1,16 @@
package org.thoughtcrime.securesms.stories
import androidx.annotation.WorkerThread
import androidx.fragment.app.FragmentManager
import io.reactivex.rxjava3.core.Completable
import org.thoughtcrime.securesms.R
import org.thoughtcrime.securesms.contacts.HeaderAction
import org.thoughtcrime.securesms.dependencies.ApplicationDependencies
import org.thoughtcrime.securesms.keyvalue.SignalStore
import org.thoughtcrime.securesms.mediasend.v2.stories.ChooseStoryTypeBottomSheet
import org.thoughtcrime.securesms.mms.OutgoingMediaMessage
import org.thoughtcrime.securesms.recipients.Recipient
import org.thoughtcrime.securesms.sms.MessageSender
import org.thoughtcrime.securesms.util.BottomSheetUtil
import org.thoughtcrime.securesms.util.FeatureFlags
@ -28,4 +33,19 @@ object Stories {
ChooseStoryTypeBottomSheet().show(fragmentManager, BottomSheetUtil.STANDARD_BOTTOM_SHEET_FRAGMENT_TAG)
}
}
@WorkerThread
fun sendIndividualStory(message: OutgoingMediaMessage): Completable {
return Completable.create { emitter ->
MessageSender.send(
ApplicationDependencies.getApplication(),
message,
-1L,
false,
null
) {
emitter.onComplete()
}
}
}
}