Preclude cancelation of pre-uploaded video attachments.

Addresses ##10225.
This commit is contained in:
Nicholas Tinsley
2024-08-30 12:23:26 -04:00
parent 2b1bbdda15
commit d683b8a321
13 changed files with 137 additions and 56 deletions

View File

@@ -52,10 +52,10 @@ import org.thoughtcrime.securesms.jobs.AttachmentCompressionJob;
import org.thoughtcrime.securesms.jobs.AttachmentCopyJob;
import org.thoughtcrime.securesms.jobs.AttachmentMarkUploadedJob;
import org.thoughtcrime.securesms.jobs.AttachmentUploadJob;
import org.thoughtcrime.securesms.jobs.IndividualSendJob;
import org.thoughtcrime.securesms.jobs.ProfileKeySendJob;
import org.thoughtcrime.securesms.jobs.PushDistributionListSendJob;
import org.thoughtcrime.securesms.jobs.PushGroupSendJob;
import org.thoughtcrime.securesms.jobs.IndividualSendJob;
import org.thoughtcrime.securesms.jobs.ReactionSendJob;
import org.thoughtcrime.securesms.jobs.RemoteDeleteSendJob;
import org.thoughtcrime.securesms.keyvalue.SignalStore;
@@ -251,12 +251,11 @@ public class MessageSender {
}
}
public static long sendPushWithPreUploadedMedia(final Context context,
final OutgoingMessage message,
final Collection<PreUploadResult> preUploadResults,
final long threadId,
final MessageTable.InsertListener insertListener)
{
public static boolean sendPushWithPreUploadedMedia(final Context context,
final OutgoingMessage message,
final Collection<PreUploadResult> preUploadResults,
final long threadId,
final MessageTable.InsertListener insertListener) {
Log.i(TAG, "Sending media message with pre-uploads to " + message.getThreadRecipient().getId() + ", thread: " + threadId + ", pre-uploads: " + preUploadResults);
Preconditions.checkArgument(message.getAttachments().isEmpty(), "If the media is pre-uploaded, there should be no attachments on the message.");
@@ -267,24 +266,30 @@ public class MessageSender {
Recipient recipient = message.getThreadRecipient();
long allocatedThreadId = threadTable.getOrCreateValidThreadId(message.getThreadRecipient(), threadId);
long messageId = mmsDatabase.insertMessageOutbox(applyUniversalExpireTimerIfNecessary(context, recipient, message, allocatedThreadId),
allocatedThreadId,
false,
insertListener);
List<AttachmentId> attachmentIds = Stream.of(preUploadResults).map(PreUploadResult::getAttachmentId).toList();
List<String> jobIds = Stream.of(preUploadResults).map(PreUploadResult::getJobIds).flatMap(Stream::of).toList();
if (!attachmentDatabase.hasAttachments(attachmentIds)) {
Log.w(TAG, "Attachments not found in database for " + message.getThreadRecipient().getId() + ", thread: " + threadId + ", pre-uploads: " + preUploadResults);
return false;
}
long messageId = mmsDatabase.insertMessageOutbox(applyUniversalExpireTimerIfNecessary(context, recipient, message, allocatedThreadId),
allocatedThreadId,
false,
insertListener);
attachmentDatabase.updateMessageId(attachmentIds, messageId, message.getStoryType().isStory());
sendMessageInternal(context, recipient, SendType.SIGNAL, messageId, jobIds, false);
onMessageSent();
threadTable.update(allocatedThreadId, true, true);
return allocatedThreadId;
return true;
} catch (MmsException e) {
Log.w(TAG, e);
return threadId;
return false;
}
}