mirror of
https://github.com/oxen-io/session-android.git
synced 2024-11-30 13:35:18 +00:00
Use AttachmentUploadJob in PushGroupSendJob.
This commit is contained in:
parent
1502b0ae3e
commit
2209ff2272
@ -3,12 +3,14 @@ package org.thoughtcrime.securesms.jobs;
|
|||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.support.annotation.NonNull;
|
import android.support.annotation.NonNull;
|
||||||
import android.support.annotation.Nullable;
|
import android.support.annotation.Nullable;
|
||||||
|
import android.support.annotation.WorkerThread;
|
||||||
|
|
||||||
import com.annimon.stream.Collectors;
|
import com.annimon.stream.Collectors;
|
||||||
import com.annimon.stream.Stream;
|
import com.annimon.stream.Stream;
|
||||||
|
|
||||||
import org.thoughtcrime.securesms.ApplicationContext;
|
import org.thoughtcrime.securesms.ApplicationContext;
|
||||||
import org.thoughtcrime.securesms.attachments.Attachment;
|
import org.thoughtcrime.securesms.attachments.Attachment;
|
||||||
|
import org.thoughtcrime.securesms.attachments.DatabaseAttachment;
|
||||||
import org.thoughtcrime.securesms.crypto.UnidentifiedAccessUtil;
|
import org.thoughtcrime.securesms.crypto.UnidentifiedAccessUtil;
|
||||||
import org.thoughtcrime.securesms.database.Address;
|
import org.thoughtcrime.securesms.database.Address;
|
||||||
import org.thoughtcrime.securesms.database.DatabaseFactory;
|
import org.thoughtcrime.securesms.database.DatabaseFactory;
|
||||||
@ -18,8 +20,11 @@ import org.thoughtcrime.securesms.database.NoSuchMessageException;
|
|||||||
import org.thoughtcrime.securesms.database.documents.IdentityKeyMismatch;
|
import org.thoughtcrime.securesms.database.documents.IdentityKeyMismatch;
|
||||||
import org.thoughtcrime.securesms.database.documents.NetworkFailure;
|
import org.thoughtcrime.securesms.database.documents.NetworkFailure;
|
||||||
import org.thoughtcrime.securesms.dependencies.InjectableType;
|
import org.thoughtcrime.securesms.dependencies.InjectableType;
|
||||||
|
import org.thoughtcrime.securesms.jobmanager.ChainParameters;
|
||||||
|
import org.thoughtcrime.securesms.jobmanager.JobManager;
|
||||||
import org.thoughtcrime.securesms.jobmanager.JobParameters;
|
import org.thoughtcrime.securesms.jobmanager.JobParameters;
|
||||||
import org.thoughtcrime.securesms.jobmanager.SafeData;
|
import org.thoughtcrime.securesms.jobmanager.SafeData;
|
||||||
|
import org.thoughtcrime.securesms.logging.Log;
|
||||||
import org.thoughtcrime.securesms.mms.MediaConstraints;
|
import org.thoughtcrime.securesms.mms.MediaConstraints;
|
||||||
import org.thoughtcrime.securesms.mms.MmsException;
|
import org.thoughtcrime.securesms.mms.MmsException;
|
||||||
import org.thoughtcrime.securesms.mms.OutgoingGroupMediaMessage;
|
import org.thoughtcrime.securesms.mms.OutgoingGroupMediaMessage;
|
||||||
@ -85,6 +90,29 @@ public class PushGroupSendJob extends PushSendJob implements InjectableType {
|
|||||||
this.filterRecipientId = -1;
|
this.filterRecipientId = -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@WorkerThread
|
||||||
|
public static void enqueue(@NonNull Context context, @NonNull JobManager jobManager, long messageId, @NonNull Address destination, @Nullable Address filterAddress) {
|
||||||
|
try {
|
||||||
|
MmsDatabase database = DatabaseFactory.getMmsDatabase(context);
|
||||||
|
OutgoingMediaMessage message = database.getOutgoingMessage(messageId);
|
||||||
|
List<AttachmentUploadJob> attachmentJobs = Stream.of(message.getAttachments()).map(a -> new AttachmentUploadJob(context, ((DatabaseAttachment) a).getAttachmentId())).toList();
|
||||||
|
ChainParameters chainParams = new ChainParameters.Builder().setGroupId(destination.serialize()).build();
|
||||||
|
|
||||||
|
if (attachmentJobs.isEmpty()) {
|
||||||
|
jobManager.add(new PushGroupSendJob(context, messageId, destination, filterAddress));
|
||||||
|
} else {
|
||||||
|
jobManager.startChain(attachmentJobs)
|
||||||
|
.then(new PushGroupSendJob(context, messageId, destination, filterAddress))
|
||||||
|
.enqueue(chainParams);
|
||||||
|
}
|
||||||
|
|
||||||
|
} catch (NoSuchMessageException | MmsException e) {
|
||||||
|
Log.w(TAG, "Failed to enqueue message.", e);
|
||||||
|
DatabaseFactory.getMmsDatabase(context).markAsSentFailed(messageId);
|
||||||
|
notifyMediaMessageDeliveryFailed(context, messageId);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void initialize(@NonNull SafeData data) {
|
protected void initialize(@NonNull SafeData data) {
|
||||||
messageId = data.getLong(KEY_MESSAGE_ID);
|
messageId = data.getLong(KEY_MESSAGE_ID);
|
||||||
@ -175,11 +203,6 @@ public class PushGroupSendJob extends PushSendJob implements InjectableType {
|
|||||||
database.markAsSentFailed(messageId);
|
database.markAsSentFailed(messageId);
|
||||||
notifyMediaMessageDeliveryFailed(context, messageId);
|
notifyMediaMessageDeliveryFailed(context, messageId);
|
||||||
}
|
}
|
||||||
|
|
||||||
} catch (InvalidNumberException | RecipientFormattingException | UndeliverableMessageException e) {
|
|
||||||
warn(TAG, e);
|
|
||||||
database.markAsSentFailed(messageId);
|
|
||||||
notifyMediaMessageDeliveryFailed(context, messageId);
|
|
||||||
} catch (UntrustedIdentityException e) {
|
} catch (UntrustedIdentityException e) {
|
||||||
warn(TAG, e);
|
warn(TAG, e);
|
||||||
database.markAsSentFailed(messageId);
|
database.markAsSentFailed(messageId);
|
||||||
@ -200,19 +223,16 @@ public class PushGroupSendJob extends PushSendJob implements InjectableType {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private List<SendMessageResult> deliver(OutgoingMediaMessage message, @NonNull List<Address> destinations)
|
private List<SendMessageResult> deliver(OutgoingMediaMessage message, @NonNull List<Address> destinations)
|
||||||
throws IOException, RecipientFormattingException, InvalidNumberException,
|
throws IOException, UntrustedIdentityException
|
||||||
UndeliverableMessageException, UntrustedIdentityException
|
|
||||||
{
|
{
|
||||||
rotateSenderCertificateIfNecessary();
|
rotateSenderCertificateIfNecessary();
|
||||||
|
|
||||||
String groupId = message.getRecipient().getAddress().toGroupString();
|
String groupId = message.getRecipient().getAddress().toGroupString();
|
||||||
Optional<byte[]> profileKey = getProfileKey(message.getRecipient());
|
Optional<byte[]> profileKey = getProfileKey(message.getRecipient());
|
||||||
MediaConstraints mediaConstraints = MediaConstraints.getPushMediaConstraints();
|
List<SignalServiceAttachment> attachmentPointers = getAttachmentPointersFor(message.getAttachments());
|
||||||
List<Attachment> scaledAttachments = scaleAndStripExifFromAttachments(mediaConstraints, message.getAttachments());
|
Optional<Quote> quote = getQuoteFor(message);
|
||||||
List<SignalServiceAttachment> attachmentStreams = getAttachmentsFor(scaledAttachments);
|
List<SharedContact> sharedContacts = getSharedContactsFor(message);
|
||||||
Optional<Quote> quote = getQuoteFor(message);
|
List<SignalServiceAddress> addresses = Stream.of(destinations).map(this::getPushAddress).toList();
|
||||||
List<SharedContact> sharedContacts = getSharedContactsFor(message);
|
|
||||||
List<SignalServiceAddress> addresses = Stream.of(destinations).map(this::getPushAddress).toList();
|
|
||||||
|
|
||||||
List<Optional<UnidentifiedAccessPair>> unidentifiedAccess = Stream.of(addresses)
|
List<Optional<UnidentifiedAccessPair>> unidentifiedAccess = Stream.of(addresses)
|
||||||
.map(address -> Address.fromSerialized(address.getNumber()))
|
.map(address -> Address.fromSerialized(address.getNumber()))
|
||||||
@ -223,7 +243,7 @@ public class PushGroupSendJob extends PushSendJob implements InjectableType {
|
|||||||
if (message.isGroup()) {
|
if (message.isGroup()) {
|
||||||
OutgoingGroupMediaMessage groupMessage = (OutgoingGroupMediaMessage) message;
|
OutgoingGroupMediaMessage groupMessage = (OutgoingGroupMediaMessage) message;
|
||||||
GroupContext groupContext = groupMessage.getGroupContext();
|
GroupContext groupContext = groupMessage.getGroupContext();
|
||||||
SignalServiceAttachment avatar = attachmentStreams.isEmpty() ? null : attachmentStreams.get(0);
|
SignalServiceAttachment avatar = attachmentPointers.isEmpty() ? null : attachmentPointers.get(0);
|
||||||
SignalServiceGroup.Type type = groupMessage.isGroupQuit() ? SignalServiceGroup.Type.QUIT : SignalServiceGroup.Type.UPDATE;
|
SignalServiceGroup.Type type = groupMessage.isGroupQuit() ? SignalServiceGroup.Type.QUIT : SignalServiceGroup.Type.UPDATE;
|
||||||
SignalServiceGroup group = new SignalServiceGroup(type, GroupUtil.getDecodedId(groupId), groupContext.getName(), groupContext.getMembersList(), avatar);
|
SignalServiceGroup group = new SignalServiceGroup(type, GroupUtil.getDecodedId(groupId), groupContext.getName(), groupContext.getMembersList(), avatar);
|
||||||
SignalServiceDataMessage groupDataMessage = SignalServiceDataMessage.newBuilder()
|
SignalServiceDataMessage groupDataMessage = SignalServiceDataMessage.newBuilder()
|
||||||
@ -238,7 +258,7 @@ public class PushGroupSendJob extends PushSendJob implements InjectableType {
|
|||||||
SignalServiceDataMessage groupMessage = SignalServiceDataMessage.newBuilder()
|
SignalServiceDataMessage groupMessage = SignalServiceDataMessage.newBuilder()
|
||||||
.withTimestamp(message.getSentTimeMillis())
|
.withTimestamp(message.getSentTimeMillis())
|
||||||
.asGroupMessage(group)
|
.asGroupMessage(group)
|
||||||
.withAttachments(attachmentStreams)
|
.withAttachments(attachmentPointers)
|
||||||
.withBody(message.getBody())
|
.withBody(message.getBody())
|
||||||
.withExpiration((int)(message.getExpiresIn() / 1000))
|
.withExpiration((int)(message.getExpiresIn() / 1000))
|
||||||
.asExpirationUpdate(message.isExpirationUpdate())
|
.asExpirationUpdate(message.isExpirationUpdate())
|
||||||
|
@ -142,7 +142,7 @@ public abstract class PushSendJob extends SendJob {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected @Nullable List<SignalServiceAttachment> getAttachmentPointersFor(List<Attachment> attachments) {
|
protected @NonNull List<SignalServiceAttachment> getAttachmentPointersFor(List<Attachment> attachments) {
|
||||||
return Stream.of(attachments).map(this::getAttachmentPointerFor).filter(a -> a != null).toList();
|
return Stream.of(attachments).map(this::getAttachmentPointerFor).filter(a -> a != null).toList();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -204,7 +204,7 @@ public class MessageSender {
|
|||||||
|
|
||||||
private static void sendGroupPush(Context context, Recipient recipient, long messageId, Address filterAddress) {
|
private static void sendGroupPush(Context context, Recipient recipient, long messageId, Address filterAddress) {
|
||||||
JobManager jobManager = ApplicationContext.getInstance(context).getJobManager();
|
JobManager jobManager = ApplicationContext.getInstance(context).getJobManager();
|
||||||
jobManager.add(new PushGroupSendJob(context, messageId, recipient.getAddress(), filterAddress));
|
PushGroupSendJob.enqueue(context, jobManager, messageId, recipient.getAddress(), filterAddress);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void sendSms(Context context, Recipient recipient, long messageId) {
|
private static void sendSms(Context context, Recipient recipient, long messageId) {
|
||||||
|
Loading…
Reference in New Issue
Block a user