mirror of
https://github.com/signalapp/Signal-Android.git
synced 2026-04-19 08:09:12 +01:00
Rename OutgoingMediaMessage -> OutgoingMessage.
This commit is contained in:
@@ -28,7 +28,7 @@ import org.thoughtcrime.securesms.contacts.SelectedContact;
|
||||
import org.thoughtcrime.securesms.database.SignalDatabase;
|
||||
import org.thoughtcrime.securesms.groups.SelectionLimits;
|
||||
import org.thoughtcrime.securesms.keyvalue.SignalStore;
|
||||
import org.thoughtcrime.securesms.mms.OutgoingMediaMessage;
|
||||
import org.thoughtcrime.securesms.mms.OutgoingMessage;
|
||||
import org.thoughtcrime.securesms.recipients.Recipient;
|
||||
import org.thoughtcrime.securesms.recipients.RecipientId;
|
||||
import org.thoughtcrime.securesms.sms.MessageSender;
|
||||
@@ -254,7 +254,7 @@ public class InviteActivity extends PassphraseRequiredActivity implements Contac
|
||||
Recipient recipient = Recipient.resolved(recipientId);
|
||||
int subscriptionId = recipient.getDefaultSubscriptionId().orElse(-1);
|
||||
|
||||
MessageSender.send(context, OutgoingMediaMessage.sms(recipient, message, subscriptionId), -1L, true, null, null);
|
||||
MessageSender.send(context, OutgoingMessage.sms(recipient, message, subscriptionId), -1L, true, null, null);
|
||||
|
||||
if (recipient.getContactUri() != null) {
|
||||
SignalDatabase.recipients().setHasSentInvite(recipient.getId());
|
||||
|
||||
@@ -5,7 +5,7 @@ import org.signal.libsignal.zkgroup.InvalidInputException
|
||||
import org.signal.libsignal.zkgroup.receipts.ReceiptCredentialPresentation
|
||||
import org.thoughtcrime.securesms.R
|
||||
import org.thoughtcrime.securesms.database.model.databaseprotos.GiftBadge
|
||||
import org.thoughtcrime.securesms.mms.OutgoingMediaMessage
|
||||
import org.thoughtcrime.securesms.mms.OutgoingMessage
|
||||
import org.thoughtcrime.securesms.recipients.Recipient
|
||||
import org.thoughtcrime.securesms.util.Base64
|
||||
import java.lang.Integer.min
|
||||
@@ -29,8 +29,8 @@ object Gifts {
|
||||
giftBadge: GiftBadge,
|
||||
sentTimestamp: Long,
|
||||
expiresIn: Long
|
||||
): OutgoingMediaMessage {
|
||||
return OutgoingMediaMessage(
|
||||
): OutgoingMessage {
|
||||
return OutgoingMessage(
|
||||
recipient = recipient,
|
||||
body = Base64.encodeBytes(giftBadge.toByteArray()),
|
||||
isSecure = true,
|
||||
|
||||
@@ -9,7 +9,7 @@ import org.thoughtcrime.securesms.database.ThreadTable
|
||||
import org.thoughtcrime.securesms.groups.GroupChangeException
|
||||
import org.thoughtcrime.securesms.groups.GroupManager
|
||||
import org.thoughtcrime.securesms.keyvalue.SignalStore
|
||||
import org.thoughtcrime.securesms.mms.OutgoingMediaMessage
|
||||
import org.thoughtcrime.securesms.mms.OutgoingMessage
|
||||
import org.thoughtcrime.securesms.recipients.Recipient
|
||||
import org.thoughtcrime.securesms.recipients.RecipientId
|
||||
import org.thoughtcrime.securesms.sms.MessageSender
|
||||
@@ -39,7 +39,7 @@ class ExpireTimerSettingsRepository(val context: Context) {
|
||||
}
|
||||
} else {
|
||||
SignalDatabase.recipients.setExpireMessages(recipientId, newExpirationTime)
|
||||
val outgoingMessage = OutgoingMediaMessage.expirationUpdateMessage(Recipient.resolved(recipientId), System.currentTimeMillis(), newExpirationTime * 1000L)
|
||||
val outgoingMessage = OutgoingMessage.expirationUpdateMessage(Recipient.resolved(recipientId), System.currentTimeMillis(), newExpirationTime * 1000L)
|
||||
MessageSender.send(context, outgoingMessage, getThreadId(recipientId), false, null, null)
|
||||
consumer.invoke(Result.success(newExpirationTime))
|
||||
}
|
||||
|
||||
@@ -20,7 +20,7 @@ import org.thoughtcrime.securesms.database.model.RecipientRecord
|
||||
import org.thoughtcrime.securesms.dependencies.ApplicationDependencies
|
||||
import org.thoughtcrime.securesms.groups.GroupId
|
||||
import org.thoughtcrime.securesms.keyvalue.SignalStore
|
||||
import org.thoughtcrime.securesms.mms.OutgoingMediaMessage
|
||||
import org.thoughtcrime.securesms.mms.OutgoingMessage
|
||||
import org.thoughtcrime.securesms.recipients.Recipient
|
||||
import org.thoughtcrime.securesms.recipients.RecipientForeverObserver
|
||||
import org.thoughtcrime.securesms.recipients.RecipientId
|
||||
@@ -243,7 +243,7 @@ class InternalConversationSettingsFragment : DSLSettingsFragment(
|
||||
val splitThreadId: Long = SignalDatabase.threads.getOrCreateThreadIdFor(splitRecipient)
|
||||
|
||||
val messageId: Long = SignalDatabase.sms.insertMessageOutbox(
|
||||
OutgoingMediaMessage.text(splitRecipient, "Test Message ${System.currentTimeMillis()}", 0),
|
||||
OutgoingMessage.text(splitRecipient, "Test Message ${System.currentTimeMillis()}", 0),
|
||||
splitThreadId,
|
||||
false,
|
||||
null
|
||||
|
||||
@@ -142,7 +142,7 @@ import org.thoughtcrime.securesms.messagerequests.MessageRequestState;
|
||||
import org.thoughtcrime.securesms.messagerequests.MessageRequestViewModel;
|
||||
import org.thoughtcrime.securesms.mms.AttachmentManager;
|
||||
import org.thoughtcrime.securesms.mms.GlideApp;
|
||||
import org.thoughtcrime.securesms.mms.OutgoingMediaMessage;
|
||||
import org.thoughtcrime.securesms.mms.OutgoingMessage;
|
||||
import org.thoughtcrime.securesms.mms.PartAuthority;
|
||||
import org.thoughtcrime.securesms.mms.Slide;
|
||||
import org.thoughtcrime.securesms.mms.TextSlide;
|
||||
@@ -1194,7 +1194,7 @@ public class ConversationFragment extends LoggingFragment implements Multiselect
|
||||
Toast.LENGTH_LONG).show();
|
||||
}
|
||||
|
||||
public long stageOutgoingMessage(OutgoingMediaMessage message) {
|
||||
public long stageOutgoingMessage(OutgoingMessage message) {
|
||||
MessageRecord messageRecord = MessageTable.readerFor(message, threadId).getCurrent();
|
||||
|
||||
if (getListAdapter() != null) {
|
||||
|
||||
@@ -237,7 +237,7 @@ import org.thoughtcrime.securesms.mms.GlideApp;
|
||||
import org.thoughtcrime.securesms.mms.GlideRequests;
|
||||
import org.thoughtcrime.securesms.mms.ImageSlide;
|
||||
import org.thoughtcrime.securesms.mms.MediaConstraints;
|
||||
import org.thoughtcrime.securesms.mms.OutgoingMediaMessage;
|
||||
import org.thoughtcrime.securesms.mms.OutgoingMessage;
|
||||
import org.thoughtcrime.securesms.mms.QuoteId;
|
||||
import org.thoughtcrime.securesms.mms.QuoteModel;
|
||||
import org.thoughtcrime.securesms.mms.Slide;
|
||||
@@ -309,7 +309,6 @@ import org.thoughtcrime.securesms.wallpaper.ChatWallpaperDimLevelUtil;
|
||||
import org.whispersystems.signalservice.api.SignalSessionLock;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.security.SecureRandom;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
@@ -2971,29 +2970,29 @@ public class ConversationParentFragment extends Fragment
|
||||
}
|
||||
|
||||
private void sendMediaMessage(@NonNull MediaSendActivityResult result) {
|
||||
long thread = this.threadId;
|
||||
long expiresIn = TimeUnit.SECONDS.toMillis(recipient.get().getExpiresInSeconds());
|
||||
QuoteModel quote = result.isViewOnce() ? null : inputPanel.getQuote().orElse(null);
|
||||
List<Mention> mentions = new ArrayList<>(result.getMentions());
|
||||
OutgoingMediaMessage message = new OutgoingMediaMessage(recipient.get(),
|
||||
result.getBody(),
|
||||
Collections.emptyList(),
|
||||
System.currentTimeMillis(),
|
||||
-1,
|
||||
expiresIn,
|
||||
result.isViewOnce(),
|
||||
distributionType,
|
||||
result.getStoryType(),
|
||||
null,
|
||||
false,
|
||||
quote,
|
||||
Collections.emptyList(),
|
||||
Collections.emptyList(),
|
||||
mentions,
|
||||
Collections.emptySet(),
|
||||
Collections.emptySet(),
|
||||
null,
|
||||
true);
|
||||
long thread = this.threadId;
|
||||
long expiresIn = TimeUnit.SECONDS.toMillis(recipient.get().getExpiresInSeconds());
|
||||
QuoteModel quote = result.isViewOnce() ? null : inputPanel.getQuote().orElse(null);
|
||||
List<Mention> mentions = new ArrayList<>(result.getMentions());
|
||||
OutgoingMessage message = new OutgoingMessage(recipient.get(),
|
||||
result.getBody(),
|
||||
Collections.emptyList(),
|
||||
System.currentTimeMillis(),
|
||||
-1,
|
||||
expiresIn,
|
||||
result.isViewOnce(),
|
||||
distributionType,
|
||||
result.getStoryType(),
|
||||
null,
|
||||
false,
|
||||
quote,
|
||||
Collections.emptyList(),
|
||||
Collections.emptyList(),
|
||||
mentions,
|
||||
Collections.emptySet(),
|
||||
Collections.emptySet(),
|
||||
null,
|
||||
true);
|
||||
|
||||
final Context context = requireContext().getApplicationContext();
|
||||
|
||||
@@ -3066,30 +3065,30 @@ public class ConversationParentFragment extends Fragment
|
||||
}
|
||||
}
|
||||
|
||||
OutgoingMediaMessage outgoingMessageCandidate = new OutgoingMediaMessage(Recipient.resolved(recipientId),
|
||||
OutgoingMediaMessage.buildMessage(slideDeck, body),
|
||||
slideDeck.asAttachments(),
|
||||
System.currentTimeMillis(),
|
||||
sendType.getSimSubscriptionIdOr(-1),
|
||||
expiresIn,
|
||||
viewOnce,
|
||||
distributionType,
|
||||
StoryType.NONE,
|
||||
null,
|
||||
false,
|
||||
quote,
|
||||
contacts,
|
||||
previews,
|
||||
mentions,
|
||||
Collections.emptySet(),
|
||||
Collections.emptySet(),
|
||||
null,
|
||||
false);
|
||||
OutgoingMessage outgoingMessageCandidate = new OutgoingMessage(Recipient.resolved(recipientId),
|
||||
OutgoingMessage.buildMessage(slideDeck, body),
|
||||
slideDeck.asAttachments(),
|
||||
System.currentTimeMillis(),
|
||||
sendType.getSimSubscriptionIdOr(-1),
|
||||
expiresIn,
|
||||
viewOnce,
|
||||
distributionType,
|
||||
StoryType.NONE,
|
||||
null,
|
||||
false,
|
||||
quote,
|
||||
contacts,
|
||||
previews,
|
||||
mentions,
|
||||
Collections.emptySet(),
|
||||
Collections.emptySet(),
|
||||
null,
|
||||
false);
|
||||
|
||||
final SettableFuture<Void> future = new SettableFuture<>();
|
||||
final Context context = requireContext().getApplicationContext();
|
||||
|
||||
final OutgoingMediaMessage outgoingMessage;
|
||||
final OutgoingMessage outgoingMessage;
|
||||
|
||||
if (sendPush) {
|
||||
outgoingMessage = outgoingMessageCandidate.makeSecure();
|
||||
@@ -3137,13 +3136,13 @@ public class ConversationParentFragment extends Fragment
|
||||
final String messageBody = getMessage();
|
||||
final boolean sendPush = sendType.usesSignalTransport();
|
||||
|
||||
OutgoingMediaMessage message;
|
||||
OutgoingMessage message;
|
||||
|
||||
if (sendPush) {
|
||||
message = OutgoingMediaMessage.text(recipient.get(), messageBody, expiresIn, System.currentTimeMillis());
|
||||
message = OutgoingMessage.text(recipient.get(), messageBody, expiresIn, System.currentTimeMillis());
|
||||
ApplicationDependencies.getTypingStatusSender().onTypingStopped(thread);
|
||||
} else {
|
||||
message = OutgoingMediaMessage.sms(recipient.get(), messageBody, sendType.getSimSubscriptionIdOr(-1));
|
||||
message = OutgoingMessage.sms(recipient.get(), messageBody, sendType.getSimSubscriptionIdOr(-1));
|
||||
}
|
||||
|
||||
Permissions.with(this)
|
||||
|
||||
@@ -80,7 +80,7 @@ import org.thoughtcrime.securesms.linkpreview.LinkPreview;
|
||||
import org.thoughtcrime.securesms.mms.IncomingMediaMessage;
|
||||
import org.thoughtcrime.securesms.mms.MessageGroupContext;
|
||||
import org.thoughtcrime.securesms.mms.MmsException;
|
||||
import org.thoughtcrime.securesms.mms.OutgoingMediaMessage;
|
||||
import org.thoughtcrime.securesms.mms.OutgoingMessage;
|
||||
import org.thoughtcrime.securesms.mms.QuoteModel;
|
||||
import org.thoughtcrime.securesms.mms.SlideDeck;
|
||||
import org.thoughtcrime.securesms.recipients.Recipient;
|
||||
@@ -2194,7 +2194,7 @@ public class MessageTable extends DatabaseTable implements MmsSmsColumns, Recipi
|
||||
}
|
||||
}
|
||||
|
||||
public OutgoingMediaMessage getOutgoingMessage(long messageId)
|
||||
public OutgoingMessage getOutgoingMessage(long messageId)
|
||||
throws MmsException, NoSuchMessageException
|
||||
{
|
||||
AttachmentTable attachmentDatabase = SignalDatabase.attachments();
|
||||
@@ -2265,15 +2265,15 @@ public class MessageTable extends DatabaseTable implements MmsSmsColumns, Recipi
|
||||
}
|
||||
|
||||
if (body != null && (Types.isGroupQuit(outboxType) || Types.isGroupUpdate(outboxType))) {
|
||||
return OutgoingMediaMessage.groupUpdateMessage(recipient, new MessageGroupContext(body, Types.isGroupV2(outboxType)), attachments, timestamp, 0, false, quote, contacts, previews, mentions);
|
||||
return OutgoingMessage.groupUpdateMessage(recipient, new MessageGroupContext(body, Types.isGroupV2(outboxType)), attachments, timestamp, 0, false, quote, contacts, previews, mentions);
|
||||
} else if (Types.isExpirationTimerUpdate(outboxType)) {
|
||||
return OutgoingMediaMessage.expirationUpdateMessage(recipient, timestamp, expiresIn);
|
||||
return OutgoingMessage.expirationUpdateMessage(recipient, timestamp, expiresIn);
|
||||
} else if (Types.isPaymentsNotification(outboxType)) {
|
||||
return OutgoingMediaMessage.paymentNotificationMessage(recipient, Objects.requireNonNull(body), timestamp, expiresIn);
|
||||
return OutgoingMessage.paymentNotificationMessage(recipient, Objects.requireNonNull(body), timestamp, expiresIn);
|
||||
} else if (Types.isPaymentsRequestToActivate(outboxType)) {
|
||||
return OutgoingMediaMessage.requestToActivatePaymentsMessage(recipient, timestamp, expiresIn);
|
||||
return OutgoingMessage.requestToActivatePaymentsMessage(recipient, timestamp, expiresIn);
|
||||
} else if (Types.isPaymentsActivated(outboxType)) {
|
||||
return OutgoingMediaMessage.paymentsActivatedMessage(recipient, timestamp, expiresIn);
|
||||
return OutgoingMessage.paymentsActivatedMessage(recipient, timestamp, expiresIn);
|
||||
}
|
||||
|
||||
GiftBadge giftBadge = null;
|
||||
@@ -2281,25 +2281,25 @@ public class MessageTable extends DatabaseTable implements MmsSmsColumns, Recipi
|
||||
giftBadge = GiftBadge.parseFrom(Base64.decode(body));
|
||||
}
|
||||
|
||||
OutgoingMediaMessage message = new OutgoingMediaMessage(recipient,
|
||||
body,
|
||||
attachments,
|
||||
timestamp,
|
||||
subscriptionId,
|
||||
expiresIn,
|
||||
viewOnce,
|
||||
distributionType,
|
||||
storyType,
|
||||
parentStoryId,
|
||||
Types.isStoryReaction(outboxType),
|
||||
quote,
|
||||
contacts,
|
||||
previews,
|
||||
mentions,
|
||||
networkFailures,
|
||||
mismatches,
|
||||
giftBadge,
|
||||
Types.isSecureType(outboxType));
|
||||
OutgoingMessage message = new OutgoingMessage(recipient,
|
||||
body,
|
||||
attachments,
|
||||
timestamp,
|
||||
subscriptionId,
|
||||
expiresIn,
|
||||
viewOnce,
|
||||
distributionType,
|
||||
storyType,
|
||||
parentStoryId,
|
||||
Types.isStoryReaction(outboxType),
|
||||
quote,
|
||||
contacts,
|
||||
previews,
|
||||
mentions,
|
||||
networkFailures,
|
||||
mismatches,
|
||||
giftBadge,
|
||||
Types.isSecureType(outboxType));
|
||||
|
||||
return message;
|
||||
}
|
||||
@@ -2703,7 +2703,7 @@ public class MessageTable extends DatabaseTable implements MmsSmsColumns, Recipi
|
||||
}
|
||||
}
|
||||
|
||||
public long insertMessageOutbox(@NonNull OutgoingMediaMessage message,
|
||||
public long insertMessageOutbox(@NonNull OutgoingMessage message,
|
||||
long threadId,
|
||||
boolean forceSms,
|
||||
@Nullable InsertListener insertListener)
|
||||
@@ -2712,7 +2712,7 @@ public class MessageTable extends DatabaseTable implements MmsSmsColumns, Recipi
|
||||
return insertMessageOutbox(message, threadId, forceSms, GroupReceiptTable.STATUS_UNDELIVERED, insertListener);
|
||||
}
|
||||
|
||||
public long insertMessageOutbox(@NonNull OutgoingMediaMessage message,
|
||||
public long insertMessageOutbox(@NonNull OutgoingMessage message,
|
||||
long threadId, boolean forceSms, int defaultReceiptStatus,
|
||||
@Nullable InsertListener insertListener)
|
||||
throws MmsException
|
||||
@@ -3335,7 +3335,7 @@ public class MessageTable extends DatabaseTable implements MmsSmsColumns, Recipi
|
||||
return new SmsReader(cursor);
|
||||
}
|
||||
|
||||
public static OutgoingMmsReader readerFor(OutgoingMediaMessage message, long threadId) {
|
||||
public static OutgoingMmsReader readerFor(OutgoingMessage message, long threadId) {
|
||||
return new OutgoingMmsReader(message, threadId);
|
||||
}
|
||||
|
||||
@@ -4263,12 +4263,12 @@ public class MessageTable extends DatabaseTable implements MmsSmsColumns, Recipi
|
||||
|
||||
public static class OutgoingMmsReader {
|
||||
|
||||
private final Context context;
|
||||
private final OutgoingMediaMessage message;
|
||||
private final long id;
|
||||
private final Context context;
|
||||
private final OutgoingMessage message;
|
||||
private final long id;
|
||||
private final long threadId;
|
||||
|
||||
public OutgoingMmsReader(OutgoingMediaMessage message, long threadId) {
|
||||
public OutgoingMmsReader(OutgoingMessage message, long threadId) {
|
||||
this.context = ApplicationDependencies.getApplication();
|
||||
this.message = message;
|
||||
this.id = new SecureRandom().nextLong();
|
||||
|
||||
@@ -19,7 +19,7 @@ import org.thoughtcrime.securesms.database.SignalDatabase;
|
||||
import org.thoughtcrime.securesms.database.ThreadTable;
|
||||
import org.thoughtcrime.securesms.groups.GroupManager.GroupActionResult;
|
||||
import org.thoughtcrime.securesms.mms.MessageGroupContext;
|
||||
import org.thoughtcrime.securesms.mms.OutgoingMediaMessage;
|
||||
import org.thoughtcrime.securesms.mms.OutgoingMessage;
|
||||
import org.thoughtcrime.securesms.profiles.AvatarHelper;
|
||||
import org.thoughtcrime.securesms.providers.BlobProvider;
|
||||
import org.thoughtcrime.securesms.recipients.Recipient;
|
||||
@@ -174,16 +174,16 @@ final class GroupManagerV1 {
|
||||
avatarAttachment = new UriAttachment(avatarUri, MediaUtil.IMAGE_PNG, AttachmentTable.TRANSFER_PROGRESS_DONE, avatar.length, null, false, false, false, false, null, null, null, null, null);
|
||||
}
|
||||
|
||||
OutgoingMediaMessage outgoingMessage = OutgoingMediaMessage.groupUpdateMessage(groupRecipient,
|
||||
new MessageGroupContext(groupContext),
|
||||
Collections.singletonList(avatarAttachment),
|
||||
System.currentTimeMillis(),
|
||||
0,
|
||||
false,
|
||||
null,
|
||||
Collections.emptyList(),
|
||||
Collections.emptyList(),
|
||||
Collections.emptyList());
|
||||
OutgoingMessage outgoingMessage = OutgoingMessage.groupUpdateMessage(groupRecipient,
|
||||
new MessageGroupContext(groupContext),
|
||||
Collections.singletonList(avatarAttachment),
|
||||
System.currentTimeMillis(),
|
||||
0,
|
||||
false,
|
||||
null,
|
||||
Collections.emptyList(),
|
||||
Collections.emptyList(),
|
||||
Collections.emptyList());
|
||||
|
||||
long threadId = MessageSender.send(context, outgoingMessage, -1, false, null, null);
|
||||
|
||||
@@ -208,14 +208,14 @@ final class GroupManagerV1 {
|
||||
long threadId = threadTable.getOrCreateThreadIdFor(recipient);
|
||||
|
||||
recipientTable.setExpireMessages(recipient.getId(), expirationTime);
|
||||
OutgoingMediaMessage outgoingMessage = OutgoingMediaMessage.expirationUpdateMessage(recipient, System.currentTimeMillis(), expirationTime * 1000L);
|
||||
OutgoingMessage outgoingMessage = OutgoingMessage.expirationUpdateMessage(recipient, System.currentTimeMillis(), expirationTime * 1000L);
|
||||
MessageSender.send(context, outgoingMessage, threadId, false, null, null);
|
||||
}
|
||||
|
||||
@WorkerThread
|
||||
private static Optional<OutgoingMediaMessage> createGroupLeaveMessage(@NonNull Context context,
|
||||
@NonNull GroupId.V1 groupId,
|
||||
@NonNull Recipient groupRecipient)
|
||||
private static Optional<OutgoingMessage> createGroupLeaveMessage(@NonNull Context context,
|
||||
@NonNull GroupId.V1 groupId,
|
||||
@NonNull Recipient groupRecipient)
|
||||
{
|
||||
GroupTable groupDatabase = SignalDatabase.groups();
|
||||
|
||||
|
||||
@@ -46,7 +46,7 @@ import org.thoughtcrime.securesms.jobs.PushGroupSilentUpdateSendJob;
|
||||
import org.thoughtcrime.securesms.jobs.RequestGroupV2InfoJob;
|
||||
import org.thoughtcrime.securesms.keyvalue.SignalStore;
|
||||
import org.thoughtcrime.securesms.mms.MmsException;
|
||||
import org.thoughtcrime.securesms.mms.OutgoingMediaMessage;
|
||||
import org.thoughtcrime.securesms.mms.OutgoingMessage;
|
||||
import org.thoughtcrime.securesms.profiles.AvatarHelper;
|
||||
import org.thoughtcrime.securesms.recipients.Recipient;
|
||||
import org.thoughtcrime.securesms.recipients.RecipientId;
|
||||
@@ -1264,7 +1264,7 @@ final class GroupManagerV2 {
|
||||
GroupId.V2 groupId = GroupId.v2(masterKey);
|
||||
Recipient groupRecipient = Recipient.externalGroupExact(groupId);
|
||||
DecryptedGroupV2Context decryptedGroupV2Context = GroupProtoUtil.createDecryptedGroupV2Context(masterKey, groupMutation, signedGroupChange);
|
||||
OutgoingMediaMessage outgoingMessage = OutgoingMediaMessage.groupUpdateMessage(groupRecipient, decryptedGroupV2Context, System.currentTimeMillis());
|
||||
OutgoingMessage outgoingMessage = OutgoingMessage.groupUpdateMessage(groupRecipient, decryptedGroupV2Context, System.currentTimeMillis());
|
||||
|
||||
|
||||
DecryptedGroupChange plainGroupChange = groupMutation.getGroupChange();
|
||||
|
||||
@@ -41,7 +41,7 @@ import org.thoughtcrime.securesms.jobs.RequestGroupV2InfoJob;
|
||||
import org.thoughtcrime.securesms.jobs.RetrieveProfileJob;
|
||||
import org.thoughtcrime.securesms.keyvalue.SignalStore;
|
||||
import org.thoughtcrime.securesms.mms.MmsException;
|
||||
import org.thoughtcrime.securesms.mms.OutgoingMediaMessage;
|
||||
import org.thoughtcrime.securesms.mms.OutgoingMessage;
|
||||
import org.thoughtcrime.securesms.recipients.Recipient;
|
||||
import org.thoughtcrime.securesms.recipients.RecipientId;
|
||||
import org.thoughtcrime.securesms.sms.IncomingGroupUpdateMessage;
|
||||
@@ -512,7 +512,7 @@ public class GroupsV2StateProcessor {
|
||||
.build();
|
||||
|
||||
DecryptedGroupV2Context decryptedGroupV2Context = GroupProtoUtil.createDecryptedGroupV2Context(masterKey, new GroupMutation(decryptedGroup, simulatedGroupChange, simulatedGroupState), null);
|
||||
OutgoingMediaMessage leaveMessage = OutgoingMediaMessage.groupUpdateMessage(groupRecipient, decryptedGroupV2Context, System.currentTimeMillis());
|
||||
OutgoingMessage leaveMessage = OutgoingMessage.groupUpdateMessage(groupRecipient, decryptedGroupV2Context, System.currentTimeMillis());
|
||||
|
||||
try {
|
||||
MessageTable mmsDatabase = SignalDatabase.mms();
|
||||
@@ -738,13 +738,13 @@ public class GroupsV2StateProcessor {
|
||||
|
||||
if (outgoing) {
|
||||
try {
|
||||
MessageTable mmsDatabase = SignalDatabase.mms();
|
||||
ThreadTable threadTable = SignalDatabase.threads();
|
||||
RecipientId recipientId = recipientTable.getOrInsertFromGroupId(groupId);
|
||||
Recipient recipient = Recipient.resolved(recipientId);
|
||||
OutgoingMediaMessage outgoingMessage = OutgoingMediaMessage.groupUpdateMessage(recipient, decryptedGroupV2Context, timestamp);
|
||||
long threadId = threadTable.getOrCreateThreadIdFor(recipient);
|
||||
long messageId = mmsDatabase.insertMessageOutbox(outgoingMessage, threadId, false, null);
|
||||
MessageTable mmsDatabase = SignalDatabase.mms();
|
||||
ThreadTable threadTable = SignalDatabase.threads();
|
||||
RecipientId recipientId = recipientTable.getOrInsertFromGroupId(groupId);
|
||||
Recipient recipient = Recipient.resolved(recipientId);
|
||||
OutgoingMessage outgoingMessage = OutgoingMessage.groupUpdateMessage(recipient, decryptedGroupV2Context, timestamp);
|
||||
long threadId = threadTable.getOrCreateThreadIdFor(recipient);
|
||||
long messageId = mmsDatabase.insertMessageOutbox(outgoingMessage, threadId, false, null);
|
||||
|
||||
mmsDatabase.markAsSent(messageId, true);
|
||||
threadTable.update(threadId, false, false);
|
||||
|
||||
@@ -13,7 +13,7 @@ import org.thoughtcrime.securesms.contacts.avatars.ProfileContactPhoto;
|
||||
import org.thoughtcrime.securesms.database.MmsSmsTable;
|
||||
import org.thoughtcrime.securesms.database.RecipientTable;
|
||||
import org.thoughtcrime.securesms.database.SignalDatabase;
|
||||
import org.thoughtcrime.securesms.mms.OutgoingMediaMessage;
|
||||
import org.thoughtcrime.securesms.mms.OutgoingMessage;
|
||||
import org.thoughtcrime.securesms.recipients.Recipient;
|
||||
import org.thoughtcrime.securesms.recipients.RecipientId;
|
||||
import org.thoughtcrime.securesms.sms.MessageSender;
|
||||
@@ -78,7 +78,7 @@ public class InsightsRepository implements InsightsDashboardViewModel.Repository
|
||||
int subscriptionId = resolved.getDefaultSubscriptionId().orElse(-1);
|
||||
String message = context.getString(R.string.InviteActivity_lets_switch_to_signal, context.getString(R.string.install_url));
|
||||
|
||||
MessageSender.send(context, OutgoingMediaMessage.sms(resolved, message, subscriptionId), -1L, true, null, null);
|
||||
MessageSender.send(context, OutgoingMessage.sms(resolved, message, subscriptionId), -1L, true, null, null);
|
||||
|
||||
RecipientTable database = SignalDatabase.recipients();
|
||||
database.setHasSentInvite(recipient.getId());
|
||||
|
||||
@@ -43,7 +43,7 @@ import org.thoughtcrime.securesms.mms.CompatMmsConnection;
|
||||
import org.thoughtcrime.securesms.mms.MediaConstraints;
|
||||
import org.thoughtcrime.securesms.mms.MmsException;
|
||||
import org.thoughtcrime.securesms.mms.MmsSendResult;
|
||||
import org.thoughtcrime.securesms.mms.OutgoingMediaMessage;
|
||||
import org.thoughtcrime.securesms.mms.OutgoingMessage;
|
||||
import org.thoughtcrime.securesms.mms.PartAuthority;
|
||||
import org.thoughtcrime.securesms.notifications.v2.ConversationId;
|
||||
import org.thoughtcrime.securesms.phonenumbers.NumberUtil;
|
||||
@@ -80,8 +80,8 @@ public final class MmsSendJob extends SendJob {
|
||||
/** Enqueues compression jobs for attachments and finally the MMS send job. */
|
||||
@WorkerThread
|
||||
public static void enqueue(@NonNull Context context, @NonNull JobManager jobManager, long messageId) {
|
||||
MessageTable database = SignalDatabase.mms();
|
||||
OutgoingMediaMessage message;
|
||||
MessageTable database = SignalDatabase.mms();
|
||||
OutgoingMessage message;
|
||||
|
||||
try {
|
||||
message = database.getOutgoingMessage(messageId);
|
||||
@@ -122,8 +122,8 @@ public final class MmsSendJob extends SendJob {
|
||||
|
||||
@Override
|
||||
public void onSend() throws MmsException, NoSuchMessageException, IOException {
|
||||
MessageTable database = SignalDatabase.mms();
|
||||
OutgoingMediaMessage message = database.getOutgoingMessage(messageId);
|
||||
MessageTable database = SignalDatabase.mms();
|
||||
OutgoingMessage message = database.getOutgoingMessage(messageId);
|
||||
|
||||
if (database.isSent(messageId)) {
|
||||
Log.w(TAG, "Message " + messageId + " was already sent. Ignoring.");
|
||||
@@ -211,7 +211,7 @@ public final class MmsSendJob extends SendJob {
|
||||
}
|
||||
}
|
||||
|
||||
private void validateDestinations(OutgoingMediaMessage media, SendReq message) throws UndeliverableMessageException {
|
||||
private void validateDestinations(OutgoingMessage media, SendReq message) throws UndeliverableMessageException {
|
||||
validateDestinations(message.getTo());
|
||||
validateDestinations(message.getCc());
|
||||
validateDestinations(message.getBcc());
|
||||
@@ -225,7 +225,7 @@ public final class MmsSendJob extends SendJob {
|
||||
}
|
||||
}
|
||||
|
||||
private SendReq constructSendPdu(OutgoingMediaMessage message)
|
||||
private SendReq constructSendPdu(OutgoingMessage message)
|
||||
throws UndeliverableMessageException
|
||||
{
|
||||
SendReq req = new SendReq();
|
||||
|
||||
@@ -4,7 +4,7 @@ import org.signal.core.util.logging.Log
|
||||
import org.thoughtcrime.securesms.database.SignalDatabase
|
||||
import org.thoughtcrime.securesms.jobmanager.Data
|
||||
import org.thoughtcrime.securesms.jobmanager.Job
|
||||
import org.thoughtcrime.securesms.mms.OutgoingMediaMessage
|
||||
import org.thoughtcrime.securesms.mms.OutgoingMessage
|
||||
import org.thoughtcrime.securesms.net.NotPushRegisteredException
|
||||
import org.thoughtcrime.securesms.recipients.Recipient
|
||||
import org.thoughtcrime.securesms.recipients.RecipientId
|
||||
@@ -63,7 +63,7 @@ class PaymentNotificationSendJobV2 private constructor(
|
||||
|
||||
MessageSender.send(
|
||||
context,
|
||||
OutgoingMediaMessage.paymentNotificationMessage(
|
||||
OutgoingMessage.paymentNotificationMessage(
|
||||
recipient,
|
||||
uuid.toString(),
|
||||
System.currentTimeMillis(),
|
||||
|
||||
@@ -26,7 +26,7 @@ import org.thoughtcrime.securesms.jobmanager.impl.NetworkConstraint;
|
||||
import org.thoughtcrime.securesms.messages.GroupSendUtil;
|
||||
import org.thoughtcrime.securesms.messages.StorySendUtil;
|
||||
import org.thoughtcrime.securesms.mms.MmsException;
|
||||
import org.thoughtcrime.securesms.mms.OutgoingMediaMessage;
|
||||
import org.thoughtcrime.securesms.mms.OutgoingMessage;
|
||||
import org.thoughtcrime.securesms.recipients.Recipient;
|
||||
import org.thoughtcrime.securesms.recipients.RecipientId;
|
||||
import org.thoughtcrime.securesms.stories.Stories;
|
||||
@@ -96,7 +96,7 @@ public final class PushDistributionListSendJob extends PushSendJob {
|
||||
throw new AssertionError("Not a distribution list! MessageId: " + messageId);
|
||||
}
|
||||
|
||||
OutgoingMediaMessage message = SignalDatabase.mms().getOutgoingMessage(messageId);
|
||||
OutgoingMessage message = SignalDatabase.mms().getOutgoingMessage(messageId);
|
||||
|
||||
if (!message.getStoryType().isStory()) {
|
||||
throw new AssertionError("Only story messages are currently supported! MessageId: " + messageId);
|
||||
@@ -139,7 +139,7 @@ public final class PushDistributionListSendJob extends PushSendJob {
|
||||
throws IOException, MmsException, NoSuchMessageException, RetryLaterException
|
||||
{
|
||||
MessageTable database = SignalDatabase.mms();
|
||||
OutgoingMediaMessage message = database.getOutgoingMessage(messageId);
|
||||
OutgoingMessage message = database.getOutgoingMessage(messageId);
|
||||
Set<NetworkFailure> existingNetworkFailures = new HashSet<>(message.getNetworkFailures());
|
||||
Set<IdentityKeyMismatch> existingIdentityMismatches = new HashSet<>(message.getIdentityKeyMismatches());
|
||||
|
||||
@@ -190,7 +190,7 @@ public final class PushDistributionListSendJob extends PushSendJob {
|
||||
SignalDatabase.mms().markAsSentFailed(messageId);
|
||||
}
|
||||
|
||||
private List<SendMessageResult> deliver(@NonNull OutgoingMediaMessage message, @NonNull List<Recipient> destinations)
|
||||
private List<SendMessageResult> deliver(@NonNull OutgoingMessage message, @NonNull List<Recipient> destinations)
|
||||
throws IOException, UntrustedIdentityException, UndeliverableMessageException
|
||||
{
|
||||
try {
|
||||
|
||||
@@ -36,7 +36,7 @@ import org.thoughtcrime.securesms.messages.GroupSendUtil;
|
||||
import org.thoughtcrime.securesms.messages.StorySendUtil;
|
||||
import org.thoughtcrime.securesms.mms.MessageGroupContext;
|
||||
import org.thoughtcrime.securesms.mms.MmsException;
|
||||
import org.thoughtcrime.securesms.mms.OutgoingMediaMessage;
|
||||
import org.thoughtcrime.securesms.mms.OutgoingMessage;
|
||||
import org.thoughtcrime.securesms.recipients.Recipient;
|
||||
import org.thoughtcrime.securesms.recipients.RecipientId;
|
||||
import org.thoughtcrime.securesms.recipients.RecipientUtil;
|
||||
@@ -112,9 +112,9 @@ public final class PushGroupSendJob extends PushSendJob {
|
||||
throw new AssertionError("Not a group!");
|
||||
}
|
||||
|
||||
MessageTable database = SignalDatabase.mms();
|
||||
OutgoingMediaMessage message = database.getOutgoingMessage(messageId);
|
||||
Set<String> attachmentUploadIds = enqueueCompressingAndUploadAttachmentsChains(jobManager, message);
|
||||
MessageTable database = SignalDatabase.mms();
|
||||
OutgoingMessage message = database.getOutgoingMessage(messageId);
|
||||
Set<String> attachmentUploadIds = enqueueCompressingAndUploadAttachmentsChains(jobManager, message);
|
||||
|
||||
if (message.getGiftBadge() != null) {
|
||||
throw new MmsException("Cannot send a gift badge to a group!");
|
||||
@@ -140,7 +140,7 @@ public final class PushGroupSendJob extends PushSendJob {
|
||||
.build();
|
||||
}
|
||||
|
||||
private static boolean isGv2UpdateMessage(@NonNull OutgoingMediaMessage message) {
|
||||
private static boolean isGv2UpdateMessage(@NonNull OutgoingMessage message) {
|
||||
return message.isGroupUpdate() && message.isV2Group();
|
||||
}
|
||||
|
||||
@@ -160,9 +160,9 @@ public final class PushGroupSendJob extends PushSendJob {
|
||||
{
|
||||
SignalLocalMetrics.GroupMessageSend.onJobStarted(messageId);
|
||||
|
||||
MessageTable database = SignalDatabase.mms();
|
||||
OutgoingMediaMessage message = database.getOutgoingMessage(messageId);
|
||||
long threadId = database.getMessageRecord(messageId).getThreadId();
|
||||
MessageTable database = SignalDatabase.mms();
|
||||
OutgoingMessage message = database.getOutgoingMessage(messageId);
|
||||
long threadId = database.getMessageRecord(messageId).getThreadId();
|
||||
Set<NetworkFailure> existingNetworkFailures = new HashSet<>(message.getNetworkFailures());
|
||||
Set<IdentityKeyMismatch> existingIdentityMismatches = new HashSet<>(message.getIdentityKeyMismatches());
|
||||
|
||||
@@ -234,7 +234,7 @@ public final class PushGroupSendJob extends PushSendJob {
|
||||
SignalDatabase.mms().markAsSentFailed(messageId);
|
||||
}
|
||||
|
||||
private List<SendMessageResult> deliver(OutgoingMediaMessage message, @NonNull Recipient groupRecipient, @NonNull List<Recipient> destinations)
|
||||
private List<SendMessageResult> deliver(OutgoingMessage message, @NonNull Recipient groupRecipient, @NonNull List<Recipient> destinations)
|
||||
throws IOException, UntrustedIdentityException, UndeliverableMessageException
|
||||
{
|
||||
try {
|
||||
@@ -373,7 +373,7 @@ public final class PushGroupSendJob extends PushSendJob {
|
||||
long messageId,
|
||||
long threadId,
|
||||
@Nullable Recipient groupRecipient,
|
||||
@NonNull OutgoingMediaMessage message,
|
||||
@NonNull OutgoingMessage message,
|
||||
@NonNull List<SendMessageResult> results,
|
||||
@NonNull List<Recipient> target,
|
||||
@NonNull List<RecipientId> skipped,
|
||||
|
||||
@@ -18,7 +18,7 @@ import org.thoughtcrime.securesms.jobmanager.Job;
|
||||
import org.thoughtcrime.securesms.keyvalue.SignalStore;
|
||||
import org.thoughtcrime.securesms.messages.GroupSendUtil;
|
||||
import org.thoughtcrime.securesms.mms.MessageGroupContext;
|
||||
import org.thoughtcrime.securesms.mms.OutgoingMediaMessage;
|
||||
import org.thoughtcrime.securesms.mms.OutgoingMessage;
|
||||
import org.thoughtcrime.securesms.net.NotPushRegisteredException;
|
||||
import org.thoughtcrime.securesms.recipients.Recipient;
|
||||
import org.thoughtcrime.securesms.recipients.RecipientId;
|
||||
@@ -68,7 +68,7 @@ public final class PushGroupSilentUpdateSendJob extends BaseJob {
|
||||
public static @NonNull Job create(@NonNull Context context,
|
||||
@NonNull GroupId.V2 groupId,
|
||||
@NonNull DecryptedGroup decryptedGroup,
|
||||
@NonNull OutgoingMediaMessage groupMessage)
|
||||
@NonNull OutgoingMessage groupMessage)
|
||||
{
|
||||
List<UUID> memberUuids = DecryptedGroupUtil.toUuidList(decryptedGroup.getMembersList());
|
||||
List<UUID> pendingUuids = DecryptedGroupUtil.pendingToUuidList(decryptedGroup.getPendingMembersList());
|
||||
|
||||
@@ -24,7 +24,7 @@ import org.thoughtcrime.securesms.jobmanager.Job;
|
||||
import org.thoughtcrime.securesms.jobmanager.JobManager;
|
||||
import org.thoughtcrime.securesms.keyvalue.SignalStore;
|
||||
import org.thoughtcrime.securesms.mms.MmsException;
|
||||
import org.thoughtcrime.securesms.mms.OutgoingMediaMessage;
|
||||
import org.thoughtcrime.securesms.mms.OutgoingMessage;
|
||||
import org.thoughtcrime.securesms.recipients.Recipient;
|
||||
import org.thoughtcrime.securesms.recipients.RecipientId;
|
||||
import org.thoughtcrime.securesms.recipients.RecipientUtil;
|
||||
@@ -83,9 +83,9 @@ public class PushMediaSendJob extends PushSendJob {
|
||||
throw new AssertionError("No ServiceId!");
|
||||
}
|
||||
|
||||
MessageTable database = SignalDatabase.mms();
|
||||
OutgoingMediaMessage message = database.getOutgoingMessage(messageId);
|
||||
Set<String> attachmentUploadIds = enqueueCompressingAndUploadAttachmentsChains(jobManager, message);
|
||||
MessageTable database = SignalDatabase.mms();
|
||||
OutgoingMessage message = database.getOutgoingMessage(messageId);
|
||||
Set<String> attachmentUploadIds = enqueueCompressingAndUploadAttachmentsChains(jobManager, message);
|
||||
|
||||
jobManager.add(new PushMediaSendJob(messageId, recipient, attachmentUploadIds.size() > 0), attachmentUploadIds, recipient.getId().toQueueKey());
|
||||
|
||||
@@ -116,9 +116,9 @@ public class PushMediaSendJob extends PushSendJob {
|
||||
throws IOException, MmsException, NoSuchMessageException, UndeliverableMessageException, RetryLaterException
|
||||
{
|
||||
ExpiringMessageManager expirationManager = ApplicationDependencies.getExpiringMessageManager();
|
||||
MessageTable database = SignalDatabase.mms();
|
||||
OutgoingMediaMessage message = database.getOutgoingMessage(messageId);
|
||||
long threadId = database.getMessageRecord(messageId).getThreadId();
|
||||
MessageTable database = SignalDatabase.mms();
|
||||
OutgoingMessage message = database.getOutgoingMessage(messageId);
|
||||
long threadId = database.getMessageRecord(messageId).getThreadId();
|
||||
|
||||
if (database.isSent(messageId)) {
|
||||
warn(TAG, String.valueOf(message.getSentTimeMillis()), "Message " + messageId + " was already sent. Ignoring.");
|
||||
@@ -191,7 +191,7 @@ public class PushMediaSendJob extends PushSendJob {
|
||||
notifyMediaMessageDeliveryFailed(context, messageId);
|
||||
}
|
||||
|
||||
private boolean deliver(OutgoingMediaMessage message)
|
||||
private boolean deliver(OutgoingMessage message)
|
||||
throws IOException, InsecureFallbackApprovalException, UntrustedIdentityException, UndeliverableMessageException
|
||||
{
|
||||
if (message.getRecipient() == null) {
|
||||
@@ -285,7 +285,7 @@ public class PushMediaSendJob extends PushSendJob {
|
||||
}
|
||||
}
|
||||
|
||||
private SignalServiceDataMessage.Payment getPayment(OutgoingMediaMessage message) {
|
||||
private SignalServiceDataMessage.Payment getPayment(OutgoingMessage message) {
|
||||
if (message.isPaymentsNotification()) {
|
||||
UUID paymentUuid = UuidUtil.parseOrThrow(message.getBody());
|
||||
PaymentTable.PaymentTransaction payment = SignalDatabase.payments().getPayment(paymentUuid);
|
||||
|
||||
@@ -2,7 +2,6 @@ package org.thoughtcrime.securesms.jobs;
|
||||
|
||||
import android.content.Context;
|
||||
import android.graphics.Bitmap;
|
||||
import android.media.Image;
|
||||
import android.os.Build;
|
||||
import android.text.TextUtils;
|
||||
|
||||
@@ -41,9 +40,8 @@ import org.thoughtcrime.securesms.jobmanager.impl.NetworkConstraint;
|
||||
import org.thoughtcrime.securesms.keyvalue.CertificateType;
|
||||
import org.thoughtcrime.securesms.keyvalue.SignalStore;
|
||||
import org.thoughtcrime.securesms.linkpreview.LinkPreview;
|
||||
import org.thoughtcrime.securesms.mms.DecryptableStreamUriLoader;
|
||||
import org.thoughtcrime.securesms.mms.DecryptableStreamUriLoader.DecryptableUri;
|
||||
import org.thoughtcrime.securesms.mms.OutgoingMediaMessage;
|
||||
import org.thoughtcrime.securesms.mms.OutgoingMessage;
|
||||
import org.thoughtcrime.securesms.mms.PartAuthority;
|
||||
import org.thoughtcrime.securesms.mms.QuoteModel;
|
||||
import org.thoughtcrime.securesms.net.NotPushRegisteredException;
|
||||
@@ -203,7 +201,7 @@ public abstract class PushSendJob extends SendJob {
|
||||
return null;
|
||||
}
|
||||
|
||||
protected static Set<String> enqueueCompressingAndUploadAttachmentsChains(@NonNull JobManager jobManager, OutgoingMediaMessage message) {
|
||||
protected static Set<String> enqueueCompressingAndUploadAttachmentsChains(@NonNull JobManager jobManager, OutgoingMessage message) {
|
||||
List<Attachment> attachments = new LinkedList<>();
|
||||
|
||||
attachments.addAll(message.getAttachments());
|
||||
@@ -301,7 +299,7 @@ public abstract class PushSendJob extends SendJob {
|
||||
}
|
||||
}
|
||||
|
||||
protected Optional<SignalServiceDataMessage.Quote> getQuoteFor(OutgoingMediaMessage message) throws IOException {
|
||||
protected Optional<SignalServiceDataMessage.Quote> getQuoteFor(OutgoingMessage message) throws IOException {
|
||||
if (message.getOutgoingQuote() == null) return Optional.empty();
|
||||
|
||||
long quoteId = message.getOutgoingQuote().getId();
|
||||
@@ -364,7 +362,7 @@ public abstract class PushSendJob extends SendJob {
|
||||
}
|
||||
}
|
||||
|
||||
protected Optional<SignalServiceDataMessage.Sticker> getStickerFor(OutgoingMediaMessage message) {
|
||||
protected Optional<SignalServiceDataMessage.Sticker> getStickerFor(OutgoingMessage message) {
|
||||
Attachment stickerAttachment = Stream.of(message.getAttachments()).filter(Attachment::isSticker).findFirst().orElse(null);
|
||||
|
||||
if (stickerAttachment == null) {
|
||||
@@ -386,7 +384,7 @@ public abstract class PushSendJob extends SendJob {
|
||||
}
|
||||
}
|
||||
|
||||
protected Optional<SignalServiceDataMessage.Reaction> getStoryReactionFor(@NonNull OutgoingMediaMessage message, @NonNull SignalServiceDataMessage.StoryContext storyContext) {
|
||||
protected Optional<SignalServiceDataMessage.Reaction> getStoryReactionFor(@NonNull OutgoingMessage message, @NonNull SignalServiceDataMessage.StoryContext storyContext) {
|
||||
if (message.isStoryReaction()) {
|
||||
return Optional.of(new SignalServiceDataMessage.Reaction(message.getBody(),
|
||||
false,
|
||||
@@ -397,7 +395,7 @@ public abstract class PushSendJob extends SendJob {
|
||||
}
|
||||
}
|
||||
|
||||
List<SharedContact> getSharedContactsFor(OutgoingMediaMessage mediaMessage) {
|
||||
List<SharedContact> getSharedContactsFor(OutgoingMessage mediaMessage) {
|
||||
List<SharedContact> sharedContacts = new LinkedList<>();
|
||||
|
||||
for (Contact contact : mediaMessage.getSharedContacts()) {
|
||||
@@ -417,7 +415,7 @@ public abstract class PushSendJob extends SendJob {
|
||||
return sharedContacts;
|
||||
}
|
||||
|
||||
List<SignalServicePreview> getPreviewsFor(OutgoingMediaMessage mediaMessage) {
|
||||
List<SignalServicePreview> getPreviewsFor(OutgoingMessage mediaMessage) {
|
||||
return Stream.of(mediaMessage.getLinkPreviews()).map(lp -> {
|
||||
SignalServiceAttachment attachment = lp.getThumbnail().isPresent() ? getAttachmentPointerFor(lp.getThumbnail().get()) : null;
|
||||
return new SignalServicePreview(lp.getUrl(), lp.getTitle(), lp.getDescription(), lp.getDate(), Optional.ofNullable(attachment));
|
||||
@@ -430,7 +428,7 @@ public abstract class PushSendJob extends SendJob {
|
||||
.toList();
|
||||
}
|
||||
|
||||
@Nullable SignalServiceDataMessage.GiftBadge getGiftBadgeFor(@NonNull OutgoingMediaMessage message) throws UndeliverableMessageException {
|
||||
@Nullable SignalServiceDataMessage.GiftBadge getGiftBadgeFor(@NonNull OutgoingMessage message) throws UndeliverableMessageException {
|
||||
GiftBadge giftBadge = message.getGiftBadge();
|
||||
if (giftBadge == null) {
|
||||
return null;
|
||||
|
||||
@@ -14,7 +14,7 @@ import org.thoughtcrime.securesms.database.AttachmentTable;
|
||||
import org.thoughtcrime.securesms.database.SignalDatabase;
|
||||
import org.thoughtcrime.securesms.jobmanager.Job;
|
||||
import org.thoughtcrime.securesms.keyvalue.SignalStore;
|
||||
import org.thoughtcrime.securesms.mms.OutgoingMediaMessage;
|
||||
import org.thoughtcrime.securesms.mms.OutgoingMessage;
|
||||
import org.thoughtcrime.securesms.util.Util;
|
||||
|
||||
import java.util.LinkedList;
|
||||
@@ -45,7 +45,7 @@ public abstract class SendJob extends BaseJob {
|
||||
|
||||
protected abstract void onSend() throws Exception;
|
||||
|
||||
protected static void markAttachmentsUploaded(long messageId, @NonNull OutgoingMediaMessage message) {
|
||||
protected static void markAttachmentsUploaded(long messageId, @NonNull OutgoingMessage message) {
|
||||
List<Attachment> attachments = new LinkedList<>();
|
||||
|
||||
attachments.addAll(message.getAttachments());
|
||||
|
||||
@@ -5,7 +5,7 @@ import org.thoughtcrime.securesms.database.SignalDatabase
|
||||
import org.thoughtcrime.securesms.jobmanager.Data
|
||||
import org.thoughtcrime.securesms.jobmanager.Job
|
||||
import org.thoughtcrime.securesms.keyvalue.SignalStore
|
||||
import org.thoughtcrime.securesms.mms.OutgoingMediaMessage
|
||||
import org.thoughtcrime.securesms.mms.OutgoingMessage
|
||||
import org.thoughtcrime.securesms.net.NotPushRegisteredException
|
||||
import org.thoughtcrime.securesms.recipients.Recipient
|
||||
import org.thoughtcrime.securesms.sms.MessageSender
|
||||
@@ -45,7 +45,7 @@ class SendPaymentsActivatedJob(parameters: Parameters) : BaseJob(parameters) {
|
||||
if (recipient != null) {
|
||||
MessageSender.send(
|
||||
context,
|
||||
OutgoingMediaMessage.paymentsActivatedMessage(recipient, System.currentTimeMillis(), 0),
|
||||
OutgoingMessage.paymentsActivatedMessage(recipient, System.currentTimeMillis(), 0),
|
||||
threadId,
|
||||
false,
|
||||
null,
|
||||
|
||||
@@ -30,7 +30,7 @@ import org.thoughtcrime.securesms.mediasend.SentMediaQualityTransform
|
||||
import org.thoughtcrime.securesms.mediasend.VideoEditorFragment
|
||||
import org.thoughtcrime.securesms.mediasend.VideoTrimTransform
|
||||
import org.thoughtcrime.securesms.mms.MediaConstraints
|
||||
import org.thoughtcrime.securesms.mms.OutgoingMediaMessage
|
||||
import org.thoughtcrime.securesms.mms.OutgoingMessage
|
||||
import org.thoughtcrime.securesms.mms.SentMediaQuality
|
||||
import org.thoughtcrime.securesms.mms.Slide
|
||||
import org.thoughtcrime.securesms.providers.BlobProvider
|
||||
@@ -229,9 +229,9 @@ class MediaSelectionRepository(context: Context) {
|
||||
isViewOnce: Boolean,
|
||||
storyClips: List<Media>
|
||||
) {
|
||||
val nonStoryMessages: MutableList<OutgoingMediaMessage> = ArrayList(contacts.size)
|
||||
val storyPreUploadMessages: MutableMap<PreUploadResult, MutableList<OutgoingMediaMessage>> = mutableMapOf()
|
||||
val storyClipMessages: MutableList<OutgoingMediaMessage> = ArrayList()
|
||||
val nonStoryMessages: MutableList<OutgoingMessage> = ArrayList(contacts.size)
|
||||
val storyPreUploadMessages: MutableMap<PreUploadResult, MutableList<OutgoingMessage>> = mutableMapOf()
|
||||
val storyClipMessages: MutableList<OutgoingMessage> = ArrayList()
|
||||
val distributionListPreUploadSentTimestamps: MutableMap<PreUploadResult, Long> = mutableMapOf()
|
||||
val distributionListStoryClipsSentTimestamps: MutableMap<MediaKey, Long> = mutableMapOf()
|
||||
|
||||
@@ -249,7 +249,7 @@ class MediaSelectionRepository(context: Context) {
|
||||
else -> StoryType.NONE
|
||||
}
|
||||
|
||||
val message = OutgoingMediaMessage(
|
||||
val message = OutgoingMessage(
|
||||
recipient = recipient,
|
||||
body = body,
|
||||
sentTimeMillis = if (recipient.isDistributionList) distributionListPreUploadSentTimestamps.getOrPut(preUploadResults.first()) { System.currentTimeMillis() } else System.currentTimeMillis(),
|
||||
@@ -279,7 +279,7 @@ class MediaSelectionRepository(context: Context) {
|
||||
|
||||
storyClips.forEach {
|
||||
storyClipMessages.add(
|
||||
OutgoingMediaMessage(
|
||||
OutgoingMessage(
|
||||
recipient = recipient,
|
||||
body = body,
|
||||
attachments = listOf(MediaUploadRepository.asAttachment(context, it)),
|
||||
|
||||
@@ -16,7 +16,7 @@ import org.thoughtcrime.securesms.keyvalue.StorySend
|
||||
import org.thoughtcrime.securesms.linkpreview.LinkPreview
|
||||
import org.thoughtcrime.securesms.mediasend.v2.UntrustedRecords
|
||||
import org.thoughtcrime.securesms.mediasend.v2.text.TextStoryPostCreationState
|
||||
import org.thoughtcrime.securesms.mms.OutgoingMediaMessage
|
||||
import org.thoughtcrime.securesms.mms.OutgoingMessage
|
||||
import org.thoughtcrime.securesms.providers.BlobProvider
|
||||
import org.thoughtcrime.securesms.recipients.Recipient
|
||||
import org.thoughtcrime.securesms.stories.Stories
|
||||
@@ -59,7 +59,7 @@ class TextStoryPostSendRepository {
|
||||
|
||||
private fun performSend(contactSearchKey: Set<ContactSearchKey>, textStoryPostCreationState: TextStoryPostCreationState, linkPreview: LinkPreview?): Single<TextStoryPostSendResult> {
|
||||
return Single.fromCallable {
|
||||
val messages: MutableList<OutgoingMediaMessage> = mutableListOf()
|
||||
val messages: MutableList<OutgoingMessage> = mutableListOf()
|
||||
val distributionListSentTimestamp = System.currentTimeMillis()
|
||||
|
||||
for (contact in contactSearchKey) {
|
||||
@@ -76,7 +76,7 @@ class TextStoryPostSendRepository {
|
||||
else -> StoryType.NONE
|
||||
}
|
||||
|
||||
val message = OutgoingMediaMessage(
|
||||
val message = OutgoingMessage(
|
||||
recipient = recipient,
|
||||
body = serializeTextStoryState(textStoryPostCreationState),
|
||||
timestamp = if (recipient.isDistributionList) distributionListSentTimestamp else System.currentTimeMillis(),
|
||||
|
||||
@@ -103,7 +103,7 @@ import org.thoughtcrime.securesms.linkpreview.LinkPreview;
|
||||
import org.thoughtcrime.securesms.linkpreview.LinkPreviewUtil;
|
||||
import org.thoughtcrime.securesms.mms.IncomingMediaMessage;
|
||||
import org.thoughtcrime.securesms.mms.MmsException;
|
||||
import org.thoughtcrime.securesms.mms.OutgoingMediaMessage;
|
||||
import org.thoughtcrime.securesms.mms.OutgoingMessage;
|
||||
import org.thoughtcrime.securesms.mms.QuoteModel;
|
||||
import org.thoughtcrime.securesms.mms.SlideDeck;
|
||||
import org.thoughtcrime.securesms.mms.StickerSlide;
|
||||
@@ -774,8 +774,8 @@ public final class MessageContentProcessor {
|
||||
log(envelopeTimestamp, "Synchronize end session message.");
|
||||
|
||||
MessageTable database = SignalDatabase.sms();
|
||||
Recipient recipient = getSyncMessageDestination(message);
|
||||
OutgoingMediaMessage outgoingEndSessionMessage = OutgoingMediaMessage.endSessionMessage(recipient, message.getTimestamp());
|
||||
Recipient recipient = getSyncMessageDestination(message);
|
||||
OutgoingMessage outgoingEndSessionMessage = OutgoingMessage.endSessionMessage(recipient, message.getTimestamp());
|
||||
|
||||
long threadId = SignalDatabase.threads().getOrCreateThreadIdFor(recipient);
|
||||
|
||||
@@ -1959,9 +1959,9 @@ public final class MessageContentProcessor {
|
||||
MessageTable database = SignalDatabase.mms();
|
||||
Recipient recipient = getSyncMessageDestination(message);
|
||||
|
||||
OutgoingMediaMessage expirationUpdateMessage = OutgoingMediaMessage.expirationUpdateMessage(recipient,
|
||||
message.getTimestamp(),
|
||||
TimeUnit.SECONDS.toMillis(message.getDataMessage().get().getExpiresInSeconds()));
|
||||
OutgoingMessage expirationUpdateMessage = OutgoingMessage.expirationUpdateMessage(recipient,
|
||||
message.getTimestamp(),
|
||||
TimeUnit.SECONDS.toMillis(message.getDataMessage().get().getExpiresInSeconds()));
|
||||
|
||||
long threadId = SignalDatabase.threads().getOrCreateThreadIdFor(recipient);
|
||||
long messageId = database.insertMessageOutbox(expirationUpdateMessage, threadId, false, null);
|
||||
@@ -2019,25 +2019,25 @@ public final class MessageContentProcessor {
|
||||
return -1L;
|
||||
}
|
||||
|
||||
OutgoingMediaMessage mediaMessage = new OutgoingMediaMessage(recipient,
|
||||
body,
|
||||
Collections.emptyList(),
|
||||
message.getTimestamp(),
|
||||
-1,
|
||||
expiresInMillis,
|
||||
false,
|
||||
ThreadTable.DistributionTypes.DEFAULT,
|
||||
StoryType.NONE,
|
||||
parentStoryId,
|
||||
message.getDataMessage().get().getReaction().isPresent(),
|
||||
quoteModel,
|
||||
Collections.emptyList(),
|
||||
Collections.emptyList(),
|
||||
getMentions(message.getDataMessage().get().getMentions()).orElse(Collections.emptyList()),
|
||||
Collections.emptySet(),
|
||||
Collections.emptySet(),
|
||||
null,
|
||||
true);
|
||||
OutgoingMessage mediaMessage = new OutgoingMessage(recipient,
|
||||
body,
|
||||
Collections.emptyList(),
|
||||
message.getTimestamp(),
|
||||
-1,
|
||||
expiresInMillis,
|
||||
false,
|
||||
ThreadTable.DistributionTypes.DEFAULT,
|
||||
StoryType.NONE,
|
||||
parentStoryId,
|
||||
message.getDataMessage().get().getReaction().isPresent(),
|
||||
quoteModel,
|
||||
Collections.emptyList(),
|
||||
Collections.emptyList(),
|
||||
getMentions(message.getDataMessage().get().getMentions()).orElse(Collections.emptyList()),
|
||||
Collections.emptySet(),
|
||||
Collections.emptySet(),
|
||||
null,
|
||||
true);
|
||||
|
||||
if (recipient.getExpiresInSeconds() != message.getDataMessage().get().getExpiresInSeconds()) {
|
||||
handleSynchronizeSentExpirationUpdate(message);
|
||||
@@ -2138,25 +2138,25 @@ public final class MessageContentProcessor {
|
||||
return;
|
||||
}
|
||||
|
||||
OutgoingMediaMessage mediaMessage = new OutgoingMediaMessage(recipient,
|
||||
textStoryBody,
|
||||
pendingAttachments,
|
||||
sentAtTimestamp,
|
||||
-1,
|
||||
0,
|
||||
false,
|
||||
ThreadTable.DistributionTypes.DEFAULT,
|
||||
storyType,
|
||||
null,
|
||||
false,
|
||||
null,
|
||||
Collections.emptyList(),
|
||||
linkPreviews,
|
||||
Collections.emptyList(),
|
||||
Collections.emptySet(),
|
||||
Collections.emptySet(),
|
||||
null,
|
||||
true);
|
||||
OutgoingMessage mediaMessage = new OutgoingMessage(recipient,
|
||||
textStoryBody,
|
||||
pendingAttachments,
|
||||
sentAtTimestamp,
|
||||
-1,
|
||||
0,
|
||||
false,
|
||||
ThreadTable.DistributionTypes.DEFAULT,
|
||||
storyType,
|
||||
null,
|
||||
false,
|
||||
null,
|
||||
Collections.emptyList(),
|
||||
linkPreviews,
|
||||
Collections.emptyList(),
|
||||
Collections.emptySet(),
|
||||
Collections.emptySet(),
|
||||
null,
|
||||
true);
|
||||
|
||||
MessageTable database = SignalDatabase.mms();
|
||||
long threadId = SignalDatabase.threads().getOrCreateThreadIdFor(recipient);
|
||||
@@ -2233,25 +2233,25 @@ public final class MessageContentProcessor {
|
||||
syncAttachments.add(sticker.get());
|
||||
}
|
||||
|
||||
OutgoingMediaMessage mediaMessage = new OutgoingMediaMessage(recipients,
|
||||
message.getDataMessage().get().getBody().orElse(null),
|
||||
syncAttachments,
|
||||
message.getTimestamp(),
|
||||
-1,
|
||||
TimeUnit.SECONDS.toMillis(message.getDataMessage().get().getExpiresInSeconds()),
|
||||
viewOnce,
|
||||
ThreadTable.DistributionTypes.DEFAULT,
|
||||
StoryType.NONE,
|
||||
null,
|
||||
false,
|
||||
quote.orElse(null),
|
||||
sharedContacts.orElse(Collections.emptyList()),
|
||||
previews.orElse(Collections.emptyList()),
|
||||
mentions.orElse(Collections.emptyList()),
|
||||
Collections.emptySet(),
|
||||
Collections.emptySet(),
|
||||
giftBadge.orElse(null),
|
||||
true);
|
||||
OutgoingMessage mediaMessage = new OutgoingMessage(recipients,
|
||||
message.getDataMessage().get().getBody().orElse(null),
|
||||
syncAttachments,
|
||||
message.getTimestamp(),
|
||||
-1,
|
||||
TimeUnit.SECONDS.toMillis(message.getDataMessage().get().getExpiresInSeconds()),
|
||||
viewOnce,
|
||||
ThreadTable.DistributionTypes.DEFAULT,
|
||||
StoryType.NONE,
|
||||
null,
|
||||
false,
|
||||
quote.orElse(null),
|
||||
sharedContacts.orElse(Collections.emptyList()),
|
||||
previews.orElse(Collections.emptyList()),
|
||||
mentions.orElse(Collections.emptyList()),
|
||||
Collections.emptySet(),
|
||||
Collections.emptySet(),
|
||||
giftBadge.orElse(null),
|
||||
true);
|
||||
|
||||
if (recipients.getExpiresInSeconds() != message.getDataMessage().get().getExpiresInSeconds()) {
|
||||
handleSynchronizeSentExpirationUpdate(message);
|
||||
@@ -2426,24 +2426,24 @@ public final class MessageContentProcessor {
|
||||
long messageId;
|
||||
|
||||
if (isGroup) {
|
||||
OutgoingMediaMessage outgoingMediaMessage = new OutgoingMediaMessage(recipient,
|
||||
new SlideDeck(),
|
||||
body,
|
||||
message.getTimestamp(),
|
||||
-1,
|
||||
expiresInMillis,
|
||||
false,
|
||||
StoryType.NONE,
|
||||
Collections.emptyList(),
|
||||
Collections.emptyList(),
|
||||
true);
|
||||
OutgoingMessage outgoingMessage = new OutgoingMessage(recipient,
|
||||
new SlideDeck(),
|
||||
body,
|
||||
message.getTimestamp(),
|
||||
-1,
|
||||
expiresInMillis,
|
||||
false,
|
||||
StoryType.NONE,
|
||||
Collections.emptyList(),
|
||||
Collections.emptyList(),
|
||||
true);
|
||||
|
||||
messageId = SignalDatabase.mms().insertMessageOutbox(outgoingMediaMessage, threadId, false, GroupReceiptTable.STATUS_UNKNOWN, null);
|
||||
messageId = SignalDatabase.mms().insertMessageOutbox(outgoingMessage, threadId, false, GroupReceiptTable.STATUS_UNKNOWN, null);
|
||||
database = SignalDatabase.mms();
|
||||
|
||||
updateGroupReceiptStatus(message, messageId, recipient.requireGroupId());
|
||||
} else {
|
||||
OutgoingMediaMessage outgoingTextMessage = OutgoingMediaMessage.text(recipient, body, expiresInMillis, message.getTimestamp());
|
||||
OutgoingMessage outgoingTextMessage = OutgoingMessage.text(recipient, body, expiresInMillis, message.getTimestamp());
|
||||
|
||||
messageId = SignalDatabase.sms().insertMessageOutbox(outgoingTextMessage, threadId, false, null);
|
||||
database = SignalDatabase.sms();
|
||||
|
||||
@@ -2,7 +2,7 @@ package org.thoughtcrime.securesms.messages
|
||||
|
||||
import com.google.protobuf.InvalidProtocolBufferException
|
||||
import org.thoughtcrime.securesms.database.model.databaseprotos.StoryTextPost
|
||||
import org.thoughtcrime.securesms.mms.OutgoingMediaMessage
|
||||
import org.thoughtcrime.securesms.mms.OutgoingMessage
|
||||
import org.thoughtcrime.securesms.util.Base64
|
||||
import org.whispersystems.signalservice.api.messages.SignalServicePreview
|
||||
import org.whispersystems.signalservice.api.messages.SignalServiceTextAttachment
|
||||
@@ -12,7 +12,7 @@ import kotlin.math.roundToInt
|
||||
object StorySendUtil {
|
||||
@JvmStatic
|
||||
@Throws(InvalidProtocolBufferException::class)
|
||||
fun deserializeBodyToStoryTextAttachment(message: OutgoingMediaMessage, getPreviewsFor: (OutgoingMediaMessage) -> List<SignalServicePreview>): SignalServiceTextAttachment {
|
||||
fun deserializeBodyToStoryTextAttachment(message: OutgoingMessage, getPreviewsFor: (OutgoingMessage) -> List<SignalServicePreview>): SignalServiceTextAttachment {
|
||||
val storyTextPost = StoryTextPost.parseFrom(Base64.decode(message.body))
|
||||
val preview = if (message.linkPreviews.isEmpty()) {
|
||||
Optional.empty()
|
||||
|
||||
@@ -463,7 +463,7 @@ public class AttachmentManager {
|
||||
.setTitle(context.getString(R.string.AttachmentManager__not_activated_payments, recipient.getShortDisplayName(context)))
|
||||
.setMessage(context.getString(R.string.AttachmentManager__request_to_activate_payments))
|
||||
.setPositiveButton(context.getString(R.string.AttachmentManager__send_request), (dialog, which) -> {
|
||||
OutgoingMediaMessage outgoingMessage = OutgoingMediaMessage.requestToActivatePaymentsMessage(recipient, System.currentTimeMillis(), 0);
|
||||
OutgoingMessage outgoingMessage = OutgoingMessage.requestToActivatePaymentsMessage(recipient, System.currentTimeMillis(), 0);
|
||||
MessageSender.send(context, outgoingMessage, SignalDatabase.threads().getOrCreateThreadIdFor(recipient), false, null, null);
|
||||
})
|
||||
.setNegativeButton(context.getString(R.string.AttachmentManager__cancel), null)
|
||||
|
||||
@@ -15,9 +15,9 @@ import org.thoughtcrime.securesms.recipients.Recipient
|
||||
import org.thoughtcrime.securesms.sms.GroupV2UpdateMessageUtil
|
||||
|
||||
/**
|
||||
* Outgoing media message for all outgoing media messages (push/mms, group updates, expiration updates, payments, etc.)
|
||||
* Represents all the data needed for an outgoing message.
|
||||
*/
|
||||
data class OutgoingMediaMessage(
|
||||
data class OutgoingMessage(
|
||||
val recipient: Recipient,
|
||||
val sentTimeMillis: Long,
|
||||
val body: String = "",
|
||||
@@ -127,15 +127,15 @@ data class OutgoingMediaMessage(
|
||||
isSecure = isSecure
|
||||
)
|
||||
|
||||
fun withExpiry(expiresIn: Long): OutgoingMediaMessage {
|
||||
fun withExpiry(expiresIn: Long): OutgoingMessage {
|
||||
return copy(expiresIn = expiresIn)
|
||||
}
|
||||
|
||||
fun stripAttachments(): OutgoingMediaMessage {
|
||||
fun stripAttachments(): OutgoingMessage {
|
||||
return copy(attachments = emptyList())
|
||||
}
|
||||
|
||||
fun makeSecure(): OutgoingMediaMessage {
|
||||
fun makeSecure(): OutgoingMessage {
|
||||
return copy(isSecure = true)
|
||||
}
|
||||
|
||||
@@ -153,8 +153,8 @@ data class OutgoingMediaMessage(
|
||||
* A literal, insecure SMS message.
|
||||
*/
|
||||
@JvmStatic
|
||||
fun sms(recipient: Recipient, body: String, subscriptionId: Int): OutgoingMediaMessage {
|
||||
return OutgoingMediaMessage(
|
||||
fun sms(recipient: Recipient, body: String, subscriptionId: Int): OutgoingMessage {
|
||||
return OutgoingMessage(
|
||||
recipient = recipient,
|
||||
sentTimeMillis = System.currentTimeMillis(),
|
||||
body = body,
|
||||
@@ -167,8 +167,8 @@ data class OutgoingMediaMessage(
|
||||
* A secure message that only contains text.
|
||||
*/
|
||||
@JvmStatic
|
||||
fun text(recipient: Recipient, body: String, expiresIn: Long, sentTimeMillis: Long = System.currentTimeMillis()): OutgoingMediaMessage {
|
||||
return OutgoingMediaMessage(
|
||||
fun text(recipient: Recipient, body: String, expiresIn: Long, sentTimeMillis: Long = System.currentTimeMillis()): OutgoingMessage {
|
||||
return OutgoingMessage(
|
||||
recipient = recipient,
|
||||
sentTimeMillis = sentTimeMillis,
|
||||
body = body,
|
||||
@@ -182,10 +182,10 @@ data class OutgoingMediaMessage(
|
||||
* Helper for creating a group update message when a state change occurs and needs to be sent to others.
|
||||
*/
|
||||
@JvmStatic
|
||||
fun groupUpdateMessage(recipient: Recipient, group: DecryptedGroupV2Context, sentTimeMillis: Long): OutgoingMediaMessage {
|
||||
fun groupUpdateMessage(recipient: Recipient, group: DecryptedGroupV2Context, sentTimeMillis: Long): OutgoingMessage {
|
||||
val groupContext = MessageGroupContext(group)
|
||||
|
||||
return OutgoingMediaMessage(
|
||||
return OutgoingMessage(
|
||||
recipient = recipient,
|
||||
body = groupContext.encodedGroupContext,
|
||||
sentTimeMillis = sentTimeMillis,
|
||||
@@ -211,8 +211,8 @@ data class OutgoingMediaMessage(
|
||||
contacts: List<Contact> = emptyList(),
|
||||
previews: List<LinkPreview> = emptyList(),
|
||||
mentions: List<Mention> = emptyList()
|
||||
): OutgoingMediaMessage {
|
||||
return OutgoingMediaMessage(
|
||||
): OutgoingMessage {
|
||||
return OutgoingMessage(
|
||||
recipient = recipient,
|
||||
body = groupContext.encodedGroupContext,
|
||||
isGroup = true,
|
||||
@@ -240,8 +240,8 @@ data class OutgoingMediaMessage(
|
||||
sentTimeMillis: Long,
|
||||
storyType: StoryType,
|
||||
linkPreviews: List<LinkPreview>
|
||||
): OutgoingMediaMessage {
|
||||
return OutgoingMediaMessage(
|
||||
): OutgoingMessage {
|
||||
return OutgoingMessage(
|
||||
recipient = recipient,
|
||||
body = body,
|
||||
sentTimeMillis = sentTimeMillis,
|
||||
@@ -255,8 +255,8 @@ data class OutgoingMediaMessage(
|
||||
* Specialized message sent to request someone activate payments.
|
||||
*/
|
||||
@JvmStatic
|
||||
fun requestToActivatePaymentsMessage(recipient: Recipient, sentTimeMillis: Long, expiresIn: Long): OutgoingMediaMessage {
|
||||
return OutgoingMediaMessage(
|
||||
fun requestToActivatePaymentsMessage(recipient: Recipient, sentTimeMillis: Long, expiresIn: Long): OutgoingMessage {
|
||||
return OutgoingMessage(
|
||||
recipient = recipient,
|
||||
sentTimeMillis = sentTimeMillis,
|
||||
expiresIn = expiresIn,
|
||||
@@ -271,8 +271,8 @@ data class OutgoingMediaMessage(
|
||||
* be sent to those that sent requests prior to activation.
|
||||
*/
|
||||
@JvmStatic
|
||||
fun paymentsActivatedMessage(recipient: Recipient, sentTimeMillis: Long, expiresIn: Long): OutgoingMediaMessage {
|
||||
return OutgoingMediaMessage(
|
||||
fun paymentsActivatedMessage(recipient: Recipient, sentTimeMillis: Long, expiresIn: Long): OutgoingMessage {
|
||||
return OutgoingMessage(
|
||||
recipient = recipient,
|
||||
sentTimeMillis = sentTimeMillis,
|
||||
expiresIn = expiresIn,
|
||||
@@ -286,8 +286,8 @@ data class OutgoingMediaMessage(
|
||||
* Type of message sent when sending a payment to another Signal contact.
|
||||
*/
|
||||
@JvmStatic
|
||||
fun paymentNotificationMessage(recipient: Recipient, paymentUuid: String, sentTimeMillis: Long, expiresIn: Long): OutgoingMediaMessage {
|
||||
return OutgoingMediaMessage(
|
||||
fun paymentNotificationMessage(recipient: Recipient, paymentUuid: String, sentTimeMillis: Long, expiresIn: Long): OutgoingMessage {
|
||||
return OutgoingMessage(
|
||||
recipient = recipient,
|
||||
body = paymentUuid,
|
||||
sentTimeMillis = sentTimeMillis,
|
||||
@@ -301,8 +301,8 @@ data class OutgoingMediaMessage(
|
||||
* Helper for creating expiration update messages.
|
||||
*/
|
||||
@JvmStatic
|
||||
fun expirationUpdateMessage(recipient: Recipient, sentTimeMillis: Long, expiresIn: Long): OutgoingMediaMessage {
|
||||
return OutgoingMediaMessage(
|
||||
fun expirationUpdateMessage(recipient: Recipient, sentTimeMillis: Long, expiresIn: Long): OutgoingMessage {
|
||||
return OutgoingMessage(
|
||||
recipient = recipient,
|
||||
sentTimeMillis = sentTimeMillis,
|
||||
expiresIn = expiresIn,
|
||||
@@ -316,8 +316,8 @@ data class OutgoingMediaMessage(
|
||||
* Message for when you have verified the identity of a contact.
|
||||
*/
|
||||
@JvmStatic
|
||||
fun identityVerifiedMessage(recipient: Recipient, sentTimeMillis: Long): OutgoingMediaMessage {
|
||||
return OutgoingMediaMessage(
|
||||
fun identityVerifiedMessage(recipient: Recipient, sentTimeMillis: Long): OutgoingMessage {
|
||||
return OutgoingMessage(
|
||||
recipient = recipient,
|
||||
sentTimeMillis = sentTimeMillis,
|
||||
isIdentityVerified = true,
|
||||
@@ -330,8 +330,8 @@ data class OutgoingMediaMessage(
|
||||
* Message for when the verification status of an identity is getting set to the default.
|
||||
*/
|
||||
@JvmStatic
|
||||
fun identityDefaultMessage(recipient: Recipient, sentTimeMillis: Long): OutgoingMediaMessage {
|
||||
return OutgoingMediaMessage(
|
||||
fun identityDefaultMessage(recipient: Recipient, sentTimeMillis: Long): OutgoingMessage {
|
||||
return OutgoingMessage(
|
||||
recipient = recipient,
|
||||
sentTimeMillis = sentTimeMillis,
|
||||
isIdentityDefault = true,
|
||||
@@ -345,8 +345,8 @@ data class OutgoingMediaMessage(
|
||||
* but it doesn't hurt to support receiving them in sync messages.
|
||||
*/
|
||||
@JvmStatic
|
||||
fun endSessionMessage(recipient: Recipient, sentTimeMillis: Long): OutgoingMediaMessage {
|
||||
return OutgoingMediaMessage(
|
||||
fun endSessionMessage(recipient: Recipient, sentTimeMillis: Long): OutgoingMessage {
|
||||
return OutgoingMessage(
|
||||
recipient = recipient,
|
||||
sentTimeMillis = sentTimeMillis,
|
||||
isEndSession = true,
|
||||
@@ -31,7 +31,7 @@ import org.thoughtcrime.securesms.database.SignalDatabase;
|
||||
import org.thoughtcrime.securesms.database.model.ParentStoryId;
|
||||
import org.thoughtcrime.securesms.database.model.StoryType;
|
||||
import org.thoughtcrime.securesms.dependencies.ApplicationDependencies;
|
||||
import org.thoughtcrime.securesms.mms.OutgoingMediaMessage;
|
||||
import org.thoughtcrime.securesms.mms.OutgoingMessage;
|
||||
import org.thoughtcrime.securesms.notifications.v2.DefaultMessageNotifier;
|
||||
import org.thoughtcrime.securesms.notifications.v2.ConversationId;
|
||||
import org.thoughtcrime.securesms.recipients.Recipient;
|
||||
@@ -82,35 +82,35 @@ public class RemoteReplyReceiver extends BroadcastReceiver {
|
||||
|
||||
switch (replyMethod) {
|
||||
case GroupMessage: {
|
||||
OutgoingMediaMessage reply = new OutgoingMediaMessage(recipient,
|
||||
responseText.toString(),
|
||||
new LinkedList<>(),
|
||||
System.currentTimeMillis(),
|
||||
subscriptionId,
|
||||
expiresIn,
|
||||
false,
|
||||
0,
|
||||
StoryType.NONE,
|
||||
parentStoryId,
|
||||
false,
|
||||
null,
|
||||
Collections.emptyList(),
|
||||
Collections.emptyList(),
|
||||
Collections.emptyList(),
|
||||
Collections.emptySet(),
|
||||
Collections.emptySet(),
|
||||
null,
|
||||
recipient.isPushGroup());
|
||||
OutgoingMessage reply = new OutgoingMessage(recipient,
|
||||
responseText.toString(),
|
||||
new LinkedList<>(),
|
||||
System.currentTimeMillis(),
|
||||
subscriptionId,
|
||||
expiresIn,
|
||||
false,
|
||||
0,
|
||||
StoryType.NONE,
|
||||
parentStoryId,
|
||||
false,
|
||||
null,
|
||||
Collections.emptyList(),
|
||||
Collections.emptyList(),
|
||||
Collections.emptyList(),
|
||||
Collections.emptySet(),
|
||||
Collections.emptySet(),
|
||||
null,
|
||||
recipient.isPushGroup());
|
||||
threadId = MessageSender.send(context, reply, -1, false, null, null);
|
||||
break;
|
||||
}
|
||||
case SecureMessage: {
|
||||
OutgoingMediaMessage reply = OutgoingMediaMessage.text(recipient, responseText.toString(), expiresIn, System.currentTimeMillis());
|
||||
OutgoingMessage reply = OutgoingMessage.text(recipient, responseText.toString(), expiresIn, System.currentTimeMillis());
|
||||
threadId = MessageSender.send(context, reply, -1, false, null, null);
|
||||
break;
|
||||
}
|
||||
case UnsecuredSmsMessage: {
|
||||
OutgoingMediaMessage reply = OutgoingMediaMessage.sms(recipient, responseText.toString(), subscriptionId);
|
||||
OutgoingMessage reply = OutgoingMessage.sms(recipient, responseText.toString(), subscriptionId);
|
||||
threadId = MessageSender.send(context, reply, -1, true, null, null);
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -24,7 +24,7 @@ import org.thoughtcrime.securesms.jobs.MultiDeviceMessageRequestResponseJob;
|
||||
import org.thoughtcrime.securesms.jobs.RefreshOwnProfileJob;
|
||||
import org.thoughtcrime.securesms.jobs.RotateProfileKeyJob;
|
||||
import org.thoughtcrime.securesms.keyvalue.SignalStore;
|
||||
import org.thoughtcrime.securesms.mms.OutgoingMediaMessage;
|
||||
import org.thoughtcrime.securesms.mms.OutgoingMessage;
|
||||
import org.thoughtcrime.securesms.sms.MessageSender;
|
||||
import org.thoughtcrime.securesms.storage.StorageSyncHelper;
|
||||
import org.whispersystems.signalservice.api.push.ServiceId;
|
||||
@@ -319,7 +319,7 @@ public class RecipientUtil {
|
||||
|
||||
if (threadId == -1 || !SignalDatabase.mmsSms().hasMeaningfulMessage(threadId)) {
|
||||
SignalDatabase.recipients().setExpireMessages(recipient.getId(), defaultTimer);
|
||||
OutgoingMediaMessage outgoingMessage = OutgoingMediaMessage.expirationUpdateMessage(recipient, System.currentTimeMillis(), defaultTimer * 1000L);
|
||||
OutgoingMessage outgoingMessage = OutgoingMessage.expirationUpdateMessage(recipient, System.currentTimeMillis(), defaultTimer * 1000L);
|
||||
MessageSender.send(context, outgoingMessage, SignalDatabase.threads().getOrCreateThreadIdFor(recipient), false, null, null);
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -8,7 +8,7 @@ import android.widget.Toast;
|
||||
|
||||
import org.signal.core.util.logging.Log;
|
||||
import org.thoughtcrime.securesms.R;
|
||||
import org.thoughtcrime.securesms.mms.OutgoingMediaMessage;
|
||||
import org.thoughtcrime.securesms.mms.OutgoingMessage;
|
||||
import org.thoughtcrime.securesms.recipients.Recipient;
|
||||
import org.thoughtcrime.securesms.sms.MessageSender;
|
||||
import org.thoughtcrime.securesms.util.Rfc5724Uri;
|
||||
@@ -50,7 +50,7 @@ public class QuickResponseService extends IntentService {
|
||||
int subscriptionId = recipient.getDefaultSubscriptionId().orElse(-1);
|
||||
|
||||
if (!TextUtils.isEmpty(content)) {
|
||||
MessageSender.send(this, OutgoingMediaMessage.sms(recipient, content, subscriptionId), -1, false, null, null);
|
||||
MessageSender.send(this, OutgoingMessage.sms(recipient, content, subscriptionId), -1, false, null, null);
|
||||
}
|
||||
} catch (URISyntaxException e) {
|
||||
Toast.makeText(this, R.string.QuickResponseService_problem_sending_message, Toast.LENGTH_LONG).show();
|
||||
|
||||
@@ -33,7 +33,7 @@ import org.thoughtcrime.securesms.linkpreview.LinkPreview;
|
||||
import org.thoughtcrime.securesms.mediasend.Media;
|
||||
import org.thoughtcrime.securesms.mediasend.v2.text.TextStoryBackgroundColors;
|
||||
import org.thoughtcrime.securesms.mms.ImageSlide;
|
||||
import org.thoughtcrime.securesms.mms.OutgoingMediaMessage;
|
||||
import org.thoughtcrime.securesms.mms.OutgoingMessage;
|
||||
import org.thoughtcrime.securesms.mms.SentMediaQuality;
|
||||
import org.thoughtcrime.securesms.mms.Slide;
|
||||
import org.thoughtcrime.securesms.mms.SlideDeck;
|
||||
@@ -86,7 +86,7 @@ public final class MultiShareSender {
|
||||
boolean isMmsEnabled = Util.isMmsCapable(context);
|
||||
String message = multiShareArgs.getDraftText();
|
||||
SlideDeck slideDeck;
|
||||
List<OutgoingMediaMessage> storiesBatch = new LinkedList<>();
|
||||
List<OutgoingMessage> storiesBatch = new LinkedList<>();
|
||||
ChatColors generatedTextStoryBackgroundColor = TextStoryBackgroundColors.getRandomBackgroundColor();
|
||||
|
||||
try {
|
||||
@@ -164,7 +164,7 @@ public final class MultiShareSender {
|
||||
if (!storiesBatch.isEmpty()) {
|
||||
MessageSender.sendStories(context,
|
||||
storiesBatch.stream()
|
||||
.map(OutgoingMediaMessage::makeSecure)
|
||||
.map(OutgoingMessage::makeSecure)
|
||||
.collect(Collectors.toList()),
|
||||
null,
|
||||
null);
|
||||
@@ -210,7 +210,7 @@ public final class MultiShareSender {
|
||||
boolean isStory,
|
||||
long sentTimestamp,
|
||||
boolean canSendAsTextStory,
|
||||
@NonNull List<OutgoingMediaMessage> storiesToBatchSend,
|
||||
@NonNull List<OutgoingMessage> storiesToBatchSend,
|
||||
@NonNull ChatColors generatedTextStoryBackgroundColor)
|
||||
{
|
||||
String body = multiShareArgs.getDraftText();
|
||||
@@ -223,7 +223,7 @@ public final class MultiShareSender {
|
||||
}
|
||||
}
|
||||
|
||||
List<OutgoingMediaMessage> outgoingMessages = new ArrayList<>();
|
||||
List<OutgoingMessage> outgoingMessages = new ArrayList<>();
|
||||
|
||||
if (isStory) {
|
||||
final StoryType storyType;
|
||||
@@ -238,19 +238,19 @@ public final class MultiShareSender {
|
||||
}
|
||||
|
||||
if (multiShareArgs.isTextStory()) {
|
||||
OutgoingMediaMessage outgoingMediaMessage = new OutgoingMediaMessage(recipient,
|
||||
new SlideDeck(),
|
||||
body,
|
||||
sentTimestamp,
|
||||
subscriptionId,
|
||||
0L,
|
||||
false,
|
||||
storyType.toTextStoryType(),
|
||||
buildLinkPreviews(context, multiShareArgs.getLinkPreview()),
|
||||
Collections.emptyList(),
|
||||
false);
|
||||
OutgoingMessage outgoingMessage = new OutgoingMessage(recipient,
|
||||
new SlideDeck(),
|
||||
body,
|
||||
sentTimestamp,
|
||||
subscriptionId,
|
||||
0L,
|
||||
false,
|
||||
storyType.toTextStoryType(),
|
||||
buildLinkPreviews(context, multiShareArgs.getLinkPreview()),
|
||||
Collections.emptyList(),
|
||||
false);
|
||||
|
||||
outgoingMessages.add(outgoingMediaMessage);
|
||||
outgoingMessages.add(outgoingMessage);
|
||||
} else if (canSendAsTextStory) {
|
||||
outgoingMessages.add(generateTextStory(context, recipient, multiShareArgs, sentTimestamp, storyType, generatedTextStoryBackgroundColor));
|
||||
} else {
|
||||
@@ -272,45 +272,45 @@ public final class MultiShareSender {
|
||||
SlideDeck singletonDeck = new SlideDeck();
|
||||
singletonDeck.addSlide(slide);
|
||||
|
||||
OutgoingMediaMessage outgoingMediaMessage = new OutgoingMediaMessage(recipient,
|
||||
singletonDeck,
|
||||
body,
|
||||
sentTimestamp,
|
||||
subscriptionId,
|
||||
0L,
|
||||
false,
|
||||
storyType,
|
||||
Collections.emptyList(),
|
||||
validatedMentions,
|
||||
false);
|
||||
OutgoingMessage outgoingMessage = new OutgoingMessage(recipient,
|
||||
singletonDeck,
|
||||
body,
|
||||
sentTimestamp,
|
||||
subscriptionId,
|
||||
0L,
|
||||
false,
|
||||
storyType,
|
||||
Collections.emptyList(),
|
||||
validatedMentions,
|
||||
false);
|
||||
|
||||
outgoingMessages.add(outgoingMediaMessage);
|
||||
outgoingMessages.add(outgoingMessage);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
OutgoingMediaMessage outgoingMediaMessage = new OutgoingMediaMessage(recipient,
|
||||
slideDeck,
|
||||
body,
|
||||
sentTimestamp,
|
||||
subscriptionId,
|
||||
expiresIn,
|
||||
isViewOnce,
|
||||
StoryType.NONE,
|
||||
buildLinkPreviews(context, multiShareArgs.getLinkPreview()),
|
||||
validatedMentions,
|
||||
false);
|
||||
OutgoingMessage outgoingMessage = new OutgoingMessage(recipient,
|
||||
slideDeck,
|
||||
body,
|
||||
sentTimestamp,
|
||||
subscriptionId,
|
||||
expiresIn,
|
||||
isViewOnce,
|
||||
StoryType.NONE,
|
||||
buildLinkPreviews(context, multiShareArgs.getLinkPreview()),
|
||||
validatedMentions,
|
||||
false);
|
||||
|
||||
outgoingMessages.add(outgoingMediaMessage);
|
||||
outgoingMessages.add(outgoingMessage);
|
||||
}
|
||||
|
||||
if (isStory) {
|
||||
storiesToBatchSend.addAll(outgoingMessages);
|
||||
} else if (shouldSendAsPush(recipient, forceSms)) {
|
||||
for (final OutgoingMediaMessage outgoingMessage : outgoingMessages) {
|
||||
for (final OutgoingMessage outgoingMessage : outgoingMessages) {
|
||||
MessageSender.send(context, outgoingMessage.makeSecure(), threadId, false, null, null);
|
||||
}
|
||||
} else {
|
||||
for (final OutgoingMediaMessage outgoingMessage : outgoingMessages) {
|
||||
for (final OutgoingMessage outgoingMessage : outgoingMessages) {
|
||||
MessageSender.send(context, outgoingMessage, threadId, forceSms, null, null);
|
||||
}
|
||||
}
|
||||
@@ -386,24 +386,24 @@ public final class MultiShareSender {
|
||||
{
|
||||
String body = multiShareArgs.getDraftText() == null ? "" : multiShareArgs.getDraftText();
|
||||
|
||||
OutgoingMediaMessage outgoingMessage;
|
||||
OutgoingMessage outgoingMessage;
|
||||
if (shouldSendAsPush(recipient, forceSms)) {
|
||||
outgoingMessage = OutgoingMediaMessage.text(recipient, body, expiresIn, System.currentTimeMillis());
|
||||
outgoingMessage = OutgoingMessage.text(recipient, body, expiresIn, System.currentTimeMillis());
|
||||
} else {
|
||||
outgoingMessage = OutgoingMediaMessage.sms(recipient, body, subscriptionId);
|
||||
outgoingMessage = OutgoingMessage.sms(recipient, body, subscriptionId);
|
||||
}
|
||||
|
||||
MessageSender.send(context, outgoingMessage, threadId, forceSms, null, null);
|
||||
}
|
||||
|
||||
private static @NonNull OutgoingMediaMessage generateTextStory(@NonNull Context context,
|
||||
@NonNull Recipient recipient,
|
||||
@NonNull MultiShareArgs multiShareArgs,
|
||||
long sentTimestamp,
|
||||
@NonNull StoryType storyType,
|
||||
@NonNull ChatColors background)
|
||||
private static @NonNull OutgoingMessage generateTextStory(@NonNull Context context,
|
||||
@NonNull Recipient recipient,
|
||||
@NonNull MultiShareArgs multiShareArgs,
|
||||
long sentTimestamp,
|
||||
@NonNull StoryType storyType,
|
||||
@NonNull ChatColors background)
|
||||
{
|
||||
return OutgoingMediaMessage.textStoryMessage(
|
||||
return OutgoingMessage.textStoryMessage(
|
||||
recipient,
|
||||
Base64.encodeBytes(StoryTextPost.newBuilder()
|
||||
.setBody(getBodyForTextStory(multiShareArgs.getDraftText(), multiShareArgs.getLinkPreview()))
|
||||
|
||||
@@ -67,7 +67,7 @@ import org.thoughtcrime.securesms.keyvalue.SignalStore;
|
||||
import org.thoughtcrime.securesms.linkpreview.LinkPreview;
|
||||
import org.thoughtcrime.securesms.mediasend.Media;
|
||||
import org.thoughtcrime.securesms.mms.MmsException;
|
||||
import org.thoughtcrime.securesms.mms.OutgoingMediaMessage;
|
||||
import org.thoughtcrime.securesms.mms.OutgoingMessage;
|
||||
import org.thoughtcrime.securesms.recipients.Recipient;
|
||||
import org.thoughtcrime.securesms.recipients.RecipientId;
|
||||
import org.thoughtcrime.securesms.recipients.RecipientUtil;
|
||||
@@ -107,7 +107,7 @@ public class MessageSender {
|
||||
}
|
||||
|
||||
public static void sendStories(@NonNull final Context context,
|
||||
@NonNull final List<OutgoingMediaMessage> messages,
|
||||
@NonNull final List<OutgoingMessage> messages,
|
||||
@Nullable final String metricId,
|
||||
@Nullable final MessageTable.InsertListener insertListener)
|
||||
{
|
||||
@@ -121,7 +121,7 @@ public class MessageSender {
|
||||
try {
|
||||
database.beginTransaction();
|
||||
|
||||
for (OutgoingMediaMessage message : messages) {
|
||||
for (OutgoingMessage message : messages) {
|
||||
long allocatedThreadId = threadTable.getOrCreateValidThreadId(message.getRecipient(), -1L, message.getDistributionType());
|
||||
long messageId = database.insertMessageOutbox(message.stripAttachments(), allocatedThreadId, false, insertListener);
|
||||
|
||||
@@ -136,9 +136,9 @@ public class MessageSender {
|
||||
}
|
||||
|
||||
for (int i = 0; i < messageIds.size(); i++) {
|
||||
long messageId = messageIds.get(i);
|
||||
OutgoingMediaMessage message = messages.get(i);
|
||||
Recipient recipient = message.getRecipient();
|
||||
long messageId = messageIds.get(i);
|
||||
OutgoingMessage message = messages.get(i);
|
||||
Recipient recipient = message.getRecipient();
|
||||
|
||||
if (recipient.isDistributionList()) {
|
||||
DistributionId distributionId = Objects.requireNonNull(SignalDatabase.distributionLists().getDistributionId(recipient.requireDistributionListId()));
|
||||
@@ -162,7 +162,7 @@ public class MessageSender {
|
||||
|
||||
for (int i = 0; i < messageIds.size(); i++) {
|
||||
long messageId = messageIds.get(i);
|
||||
OutgoingMediaMessage message = messages.get(i);
|
||||
OutgoingMessage message = messages.get(i);
|
||||
List<UploadDependencyGraph.Node> nodes = dependencyGraph.getDependencyMap().get(message);
|
||||
|
||||
if (nodes == null || nodes.isEmpty()) {
|
||||
@@ -196,9 +196,9 @@ public class MessageSender {
|
||||
}
|
||||
|
||||
for (int i = 0; i < messageIds.size(); i++) {
|
||||
long messageId = messageIds.get(i);
|
||||
OutgoingMediaMessage message = messages.get(i);
|
||||
Recipient recipient = message.getRecipient();
|
||||
long messageId = messageIds.get(i);
|
||||
OutgoingMessage message = messages.get(i);
|
||||
Recipient recipient = message.getRecipient();
|
||||
List<UploadDependencyGraph.Node> dependencies = dependencyGraph.getDependencyMap().get(message);
|
||||
|
||||
List<String> jobDependencyIds = (dependencies != null) ? dependencies.stream().map(UploadDependencyGraph.Node::getJobId).collect(Collectors.toList())
|
||||
@@ -219,7 +219,7 @@ public class MessageSender {
|
||||
}
|
||||
|
||||
public static long send(final Context context,
|
||||
final OutgoingMediaMessage message,
|
||||
final OutgoingMessage message,
|
||||
final long threadId,
|
||||
final boolean forceSms,
|
||||
@Nullable final String metricId,
|
||||
@@ -252,7 +252,7 @@ public class MessageSender {
|
||||
}
|
||||
|
||||
public static long sendPushWithPreUploadedMedia(final Context context,
|
||||
final OutgoingMediaMessage message,
|
||||
final OutgoingMessage message,
|
||||
final Collection<PreUploadResult> preUploadResults,
|
||||
final long threadId,
|
||||
final MessageTable.InsertListener insertListener)
|
||||
@@ -296,7 +296,7 @@ public class MessageSender {
|
||||
}
|
||||
|
||||
public static void sendMediaBroadcast(@NonNull Context context,
|
||||
@NonNull List<OutgoingMediaMessage> messages,
|
||||
@NonNull List<OutgoingMessage> messages,
|
||||
@NonNull Collection<PreUploadResult> preUploadResults,
|
||||
boolean overwritePreUploadMessageIds)
|
||||
{
|
||||
@@ -304,15 +304,15 @@ public class MessageSender {
|
||||
Preconditions.checkArgument(messages.size() > 0, "No messages!");
|
||||
Preconditions.checkArgument(Stream.of(messages).allMatch(m -> m.getAttachments().isEmpty()), "Messages can't have attachments! They should be pre-uploaded.");
|
||||
|
||||
JobManager jobManager = ApplicationDependencies.getJobManager();
|
||||
AttachmentTable attachmentDatabase = SignalDatabase.attachments();
|
||||
MessageTable mmsDatabase = SignalDatabase.mms();
|
||||
ThreadTable threadTable = SignalDatabase.threads();
|
||||
List<AttachmentId> preUploadAttachmentIds = Stream.of(preUploadResults).map(PreUploadResult::getAttachmentId).toList();
|
||||
List<String> preUploadJobIds = Stream.of(preUploadResults).map(PreUploadResult::getJobIds).flatMap(Stream::of).toList();
|
||||
List<Long> messageIds = new ArrayList<>(messages.size());
|
||||
List<String> messageDependsOnIds = new ArrayList<>(preUploadJobIds);
|
||||
OutgoingMediaMessage primaryMessage = messages.get(0);
|
||||
JobManager jobManager = ApplicationDependencies.getJobManager();
|
||||
AttachmentTable attachmentDatabase = SignalDatabase.attachments();
|
||||
MessageTable mmsDatabase = SignalDatabase.mms();
|
||||
ThreadTable threadTable = SignalDatabase.threads();
|
||||
List<AttachmentId> preUploadAttachmentIds = Stream.of(preUploadResults).map(PreUploadResult::getAttachmentId).toList();
|
||||
List<String> preUploadJobIds = Stream.of(preUploadResults).map(PreUploadResult::getJobIds).flatMap(Stream::of).toList();
|
||||
List<Long> messageIds = new ArrayList<>(messages.size());
|
||||
List<String> messageDependsOnIds = new ArrayList<>(preUploadJobIds);
|
||||
OutgoingMessage primaryMessage = messages.get(0);
|
||||
|
||||
mmsDatabase.beginTransaction();
|
||||
try {
|
||||
@@ -337,14 +337,14 @@ public class MessageSender {
|
||||
.toList();
|
||||
|
||||
if (messages.size() > 0) {
|
||||
List<OutgoingMediaMessage> secondaryMessages = overwritePreUploadMessageIds ? messages.subList(1, messages.size()) : messages;
|
||||
List<List<AttachmentId>> attachmentCopies = new ArrayList<>();
|
||||
List<OutgoingMessage> secondaryMessages = overwritePreUploadMessageIds ? messages.subList(1, messages.size()) : messages;
|
||||
List<List<AttachmentId>> attachmentCopies = new ArrayList<>();
|
||||
|
||||
for (int i = 0; i < preUploadAttachmentIds.size(); i++) {
|
||||
attachmentCopies.add(new ArrayList<>(messages.size()));
|
||||
}
|
||||
|
||||
for (OutgoingMediaMessage secondaryMessage : secondaryMessages) {
|
||||
for (OutgoingMessage secondaryMessage : secondaryMessages) {
|
||||
long allocatedThreadId = threadTable.getOrCreateThreadIdFor(secondaryMessage.getRecipient(), secondaryMessage.getDistributionType());
|
||||
long messageId = mmsDatabase.insertMessageOutbox(applyUniversalExpireTimerIfNecessary(context, secondaryMessage.getRecipient(), secondaryMessage, allocatedThreadId),
|
||||
allocatedThreadId,
|
||||
@@ -376,9 +376,9 @@ public class MessageSender {
|
||||
}
|
||||
|
||||
for (int i = 0; i < messageIds.size(); i++) {
|
||||
long messageId = messageIds.get(i);
|
||||
OutgoingMediaMessage message = messages.get(i);
|
||||
Recipient recipient = message.getRecipient();
|
||||
long messageId = messageIds.get(i);
|
||||
OutgoingMessage message = messages.get(i);
|
||||
Recipient recipient = message.getRecipient();
|
||||
|
||||
if (recipient.isDistributionList()) {
|
||||
List<RecipientId> members = SignalDatabase.distributionLists().getMembers(recipient.requireDistributionListId());
|
||||
@@ -507,11 +507,11 @@ public class MessageSender {
|
||||
EventBus.getDefault().postSticky(MessageSentEvent.INSTANCE);
|
||||
}
|
||||
|
||||
private static @NonNull OutgoingMediaMessage applyUniversalExpireTimerIfNecessary(@NonNull Context context, @NonNull Recipient recipient, @NonNull OutgoingMediaMessage outgoingMediaMessage, long threadId) {
|
||||
if (!outgoingMediaMessage.isExpirationUpdate() && outgoingMediaMessage.getExpiresIn() == 0 && RecipientUtil.setAndSendUniversalExpireTimerIfNecessary(context, recipient, threadId)) {
|
||||
return outgoingMediaMessage.withExpiry(TimeUnit.SECONDS.toMillis(SignalStore.settings().getUniversalExpireTimer()));
|
||||
private static @NonNull OutgoingMessage applyUniversalExpireTimerIfNecessary(@NonNull Context context, @NonNull Recipient recipient, @NonNull OutgoingMessage outgoingMessage, long threadId) {
|
||||
if (!outgoingMessage.isExpirationUpdate() && outgoingMessage.getExpiresIn() == 0 && RecipientUtil.setAndSendUniversalExpireTimerIfNecessary(context, recipient, threadId)) {
|
||||
return outgoingMessage.withExpiry(TimeUnit.SECONDS.toMillis(SignalStore.settings().getUniversalExpireTimer()));
|
||||
}
|
||||
return outgoingMediaMessage;
|
||||
return outgoingMessage;
|
||||
}
|
||||
|
||||
private static void sendMediaMessage(Context context, Recipient recipient, boolean forceSms, long messageId, @NonNull Collection<String> uploadJobIds)
|
||||
@@ -624,9 +624,9 @@ public class MessageSender {
|
||||
try {
|
||||
ExpiringMessageManager expirationManager = ApplicationDependencies.getExpiringMessageManager();
|
||||
MessageTable mmsDatabase = SignalDatabase.mms();
|
||||
MmsSmsTable mmsSmsDatabase = SignalDatabase.mmsSms();
|
||||
OutgoingMediaMessage message = mmsDatabase.getOutgoingMessage(messageId);
|
||||
SyncMessageId syncId = new SyncMessageId(Recipient.self().getId(), message.getSentTimeMillis());
|
||||
MmsSmsTable mmsSmsDatabase = SignalDatabase.mmsSms();
|
||||
OutgoingMessage message = mmsDatabase.getOutgoingMessage(messageId);
|
||||
SyncMessageId syncId = new SyncMessageId(Recipient.self().getId(), message.getSentTimeMillis());
|
||||
List<Attachment> attachments = new LinkedList<>();
|
||||
|
||||
|
||||
|
||||
@@ -12,7 +12,7 @@ import org.thoughtcrime.securesms.jobs.AttachmentCompressionJob
|
||||
import org.thoughtcrime.securesms.jobs.AttachmentCopyJob
|
||||
import org.thoughtcrime.securesms.jobs.AttachmentUploadJob
|
||||
import org.thoughtcrime.securesms.jobs.ResumableUploadSpecJob
|
||||
import org.thoughtcrime.securesms.mms.OutgoingMediaMessage
|
||||
import org.thoughtcrime.securesms.mms.OutgoingMessage
|
||||
|
||||
/**
|
||||
* Helper alias for working with JobIds.
|
||||
@@ -27,7 +27,7 @@ private typealias JobId = String
|
||||
* @param deferredJobQueue A list of job chains that can be executed on the job manager when ready (outside of a database transaction).
|
||||
*/
|
||||
class UploadDependencyGraph private constructor(
|
||||
val dependencyMap: Map<OutgoingMediaMessage, List<Node>>,
|
||||
val dependencyMap: Map<OutgoingMessage, List<Node>>,
|
||||
private val deferredJobQueue: List<JobManager.Chain>
|
||||
) {
|
||||
|
||||
@@ -100,7 +100,7 @@ class UploadDependencyGraph private constructor(
|
||||
@JvmStatic
|
||||
@WorkerThread
|
||||
fun create(
|
||||
messages: List<OutgoingMediaMessage>,
|
||||
messages: List<OutgoingMessage>,
|
||||
jobManager: JobManager,
|
||||
insertAttachmentForPreUpload: (Attachment) -> DatabaseAttachment
|
||||
): UploadDependencyGraph {
|
||||
@@ -111,8 +111,8 @@ class UploadDependencyGraph private constructor(
|
||||
* Produce a mapping of AttachmentKey{DatabaseAttachment,TransformProperties} -> Set<OutgoingMediaMessage>
|
||||
* This map represents which messages require a specific attachment.
|
||||
*/
|
||||
private fun buildAttachmentMap(messages: List<OutgoingMediaMessage>, insertAttachmentForPreUpload: (Attachment) -> DatabaseAttachment): Map<AttachmentKey<DatabaseAttachment>, Set<OutgoingMediaMessage>> {
|
||||
val attachmentMap = mutableMapOf<AttachmentKey<DatabaseAttachment>, Set<OutgoingMediaMessage>>()
|
||||
private fun buildAttachmentMap(messages: List<OutgoingMessage>, insertAttachmentForPreUpload: (Attachment) -> DatabaseAttachment): Map<AttachmentKey<DatabaseAttachment>, Set<OutgoingMessage>> {
|
||||
val attachmentMap = mutableMapOf<AttachmentKey<DatabaseAttachment>, Set<OutgoingMessage>>()
|
||||
val preUploadCache = mutableMapOf<AttachmentKey<UriAttachment>, DatabaseAttachment>()
|
||||
|
||||
for (message in messages) {
|
||||
@@ -125,12 +125,12 @@ class UploadDependencyGraph private constructor(
|
||||
for (attachmentKey in uniqueAttachments) {
|
||||
when (val attachment = attachmentKey.attachment) {
|
||||
is DatabaseAttachment -> {
|
||||
val messageIdList: Set<OutgoingMediaMessage> = attachmentMap.getOrDefault(attachment.asDatabaseAttachmentKey(), emptySet())
|
||||
val messageIdList: Set<OutgoingMessage> = attachmentMap.getOrDefault(attachment.asDatabaseAttachmentKey(), emptySet())
|
||||
attachmentMap[attachment.asDatabaseAttachmentKey()] = messageIdList + message
|
||||
}
|
||||
is UriAttachment -> {
|
||||
val dbAttachmentKey: AttachmentKey<DatabaseAttachment> = preUploadCache.getOrPut(attachment.asUriAttachmentKey()) { insertAttachmentForPreUpload(attachment) }.asDatabaseAttachmentKey()
|
||||
val messageIdList: Set<OutgoingMediaMessage> = attachmentMap.getOrDefault(dbAttachmentKey, emptySet())
|
||||
val messageIdList: Set<OutgoingMessage> = attachmentMap.getOrDefault(dbAttachmentKey, emptySet())
|
||||
attachmentMap[dbAttachmentKey] = messageIdList + message
|
||||
}
|
||||
else -> {
|
||||
@@ -148,7 +148,7 @@ class UploadDependencyGraph private constructor(
|
||||
* Each attachment will be uploaded exactly once and copied N times, where N is the number of messages in its set, minus 1 (the upload)
|
||||
* The resulting object contains a list of jobs that a subsequent send job can depend on, as well as a list of Chains which can be
|
||||
* enqueued to perform uploading. Since a send job can depend on multiple chains, it's cleaner to give back a mapping of
|
||||
* [OutgoingMediaMessage] -> [List<Node>] instead of forcing the caller to try to weave new jobs into the original chains.
|
||||
* [OutgoingMessage] -> [List<Node>] instead of forcing the caller to try to weave new jobs into the original chains.
|
||||
*
|
||||
* Each chain consists of:
|
||||
* 1. Compression job
|
||||
@@ -157,23 +157,23 @@ class UploadDependencyGraph private constructor(
|
||||
* 1. O to 1 copy jobs
|
||||
*/
|
||||
private fun buildDependencyGraph(
|
||||
attachmentIdToOutgoingMessagesMap: Map<AttachmentKey<DatabaseAttachment>, Set<OutgoingMediaMessage>>,
|
||||
attachmentIdToOutgoingMessagesMap: Map<AttachmentKey<DatabaseAttachment>, Set<OutgoingMessage>>,
|
||||
jobManager: JobManager,
|
||||
insertAttachmentForPreUpload: (Attachment) -> DatabaseAttachment
|
||||
): UploadDependencyGraph {
|
||||
val resultMap = mutableMapOf<OutgoingMediaMessage, List<Node>>()
|
||||
val resultMap = mutableMapOf<OutgoingMessage, List<Node>>()
|
||||
val jobQueue = mutableListOf<JobManager.Chain>()
|
||||
|
||||
for ((attachmentKey, messages) in attachmentIdToOutgoingMessagesMap) {
|
||||
val (uploadJobId, uploadChain) = createAttachmentUploadChain(jobManager, attachmentKey.attachment)
|
||||
val uploadMessage: OutgoingMediaMessage = messages.first()
|
||||
val copyMessages: List<OutgoingMediaMessage> = messages.drop(1)
|
||||
val uploadMessage: OutgoingMessage = messages.first()
|
||||
val copyMessages: List<OutgoingMessage> = messages.drop(1)
|
||||
|
||||
val uploadMessageDependencies: List<Node> = resultMap.getOrDefault(uploadMessage, emptyList())
|
||||
resultMap[uploadMessage] = uploadMessageDependencies + Node(uploadJobId, attachmentKey.attachment.attachmentId)
|
||||
|
||||
if (copyMessages.isNotEmpty()) {
|
||||
val copyAttachments: Map<OutgoingMediaMessage, AttachmentId> = copyMessages.associateWith { insertAttachmentForPreUpload(attachmentKey.attachment).attachmentId }
|
||||
val copyAttachments: Map<OutgoingMessage, AttachmentId> = copyMessages.associateWith { insertAttachmentForPreUpload(attachmentKey.attachment).attachmentId }
|
||||
val copyJob = AttachmentCopyJob(attachmentKey.attachment.attachmentId, copyAttachments.values.toList())
|
||||
|
||||
copyAttachments.forEach { (message, attachmentId) ->
|
||||
|
||||
@@ -25,7 +25,7 @@ import org.thoughtcrime.securesms.keyvalue.SignalStore
|
||||
import org.thoughtcrime.securesms.mediasend.Media
|
||||
import org.thoughtcrime.securesms.mediasend.v2.stories.ChooseStoryTypeBottomSheet
|
||||
import org.thoughtcrime.securesms.mms.MediaConstraints
|
||||
import org.thoughtcrime.securesms.mms.OutgoingMediaMessage
|
||||
import org.thoughtcrime.securesms.mms.OutgoingMessage
|
||||
import org.thoughtcrime.securesms.mms.SentMediaQuality
|
||||
import org.thoughtcrime.securesms.mms.VideoSlide
|
||||
import org.thoughtcrime.securesms.recipients.Recipient
|
||||
@@ -81,7 +81,7 @@ object Stories {
|
||||
}
|
||||
}
|
||||
|
||||
fun sendTextStories(messages: List<OutgoingMediaMessage>): Completable {
|
||||
fun sendTextStories(messages: List<OutgoingMessage>): Completable {
|
||||
return Completable.create { emitter ->
|
||||
MessageSender.sendStories(ApplicationDependencies.getApplication(), messages, null, null)
|
||||
emitter.onComplete()
|
||||
|
||||
@@ -19,7 +19,7 @@ import org.thoughtcrime.securesms.database.SignalDatabase
|
||||
import org.thoughtcrime.securesms.dependencies.ApplicationDependencies
|
||||
import org.thoughtcrime.securesms.mediasend.MediaSendActivityResult
|
||||
import org.thoughtcrime.securesms.mediasend.v2.MediaSelectionActivity
|
||||
import org.thoughtcrime.securesms.mms.OutgoingMediaMessage
|
||||
import org.thoughtcrime.securesms.mms.OutgoingMessage
|
||||
import org.thoughtcrime.securesms.recipients.Recipient
|
||||
import org.thoughtcrime.securesms.recipients.RecipientId
|
||||
import org.thoughtcrime.securesms.sharing.MultiShareArgs
|
||||
@@ -102,7 +102,7 @@ class AddToGroupStoryDelegate(
|
||||
Log.d(TAG, "Sending preupload media.")
|
||||
|
||||
val recipient = Recipient.resolved(result.recipientId)
|
||||
val secureMessage = OutgoingMediaMessage(
|
||||
val secureMessage = OutgoingMessage(
|
||||
recipient = recipient,
|
||||
timestamp = System.currentTimeMillis(),
|
||||
storyType = result.storyType,
|
||||
|
||||
@@ -9,7 +9,7 @@ import org.thoughtcrime.securesms.database.model.MediaMmsMessageRecord
|
||||
import org.thoughtcrime.securesms.database.model.MessageRecord
|
||||
import org.thoughtcrime.securesms.database.model.ParentStoryId
|
||||
import org.thoughtcrime.securesms.database.model.StoryType
|
||||
import org.thoughtcrime.securesms.mms.OutgoingMediaMessage
|
||||
import org.thoughtcrime.securesms.mms.OutgoingMessage
|
||||
import org.thoughtcrime.securesms.mms.QuoteModel
|
||||
import org.thoughtcrime.securesms.recipients.Recipient
|
||||
import org.thoughtcrime.securesms.recipients.RecipientId
|
||||
@@ -43,7 +43,7 @@ class StoryDirectReplyRepository(context: Context) {
|
||||
|
||||
MessageSender.send(
|
||||
context,
|
||||
OutgoingMediaMessage(
|
||||
OutgoingMessage(
|
||||
recipient,
|
||||
charSequence.toString(),
|
||||
emptyList(),
|
||||
|
||||
@@ -11,7 +11,7 @@ import org.thoughtcrime.securesms.database.model.Mention
|
||||
import org.thoughtcrime.securesms.database.model.ParentStoryId
|
||||
import org.thoughtcrime.securesms.database.model.StoryType
|
||||
import org.thoughtcrime.securesms.mediasend.v2.UntrustedRecords
|
||||
import org.thoughtcrime.securesms.mms.OutgoingMediaMessage
|
||||
import org.thoughtcrime.securesms.mms.OutgoingMessage
|
||||
import org.thoughtcrime.securesms.sms.MessageSender
|
||||
|
||||
/**
|
||||
@@ -41,7 +41,7 @@ object StoryGroupReplySender {
|
||||
Completable.create {
|
||||
MessageSender.send(
|
||||
context,
|
||||
OutgoingMediaMessage(
|
||||
OutgoingMessage(
|
||||
recipient = recipient,
|
||||
body = body.toString(),
|
||||
timestamp = System.currentTimeMillis(),
|
||||
|
||||
@@ -24,7 +24,7 @@ import org.thoughtcrime.securesms.database.model.IdentityRecord;
|
||||
import org.thoughtcrime.securesms.dependencies.ApplicationDependencies;
|
||||
import org.thoughtcrime.securesms.keyvalue.SignalStore;
|
||||
import org.thoughtcrime.securesms.mms.MmsException;
|
||||
import org.thoughtcrime.securesms.mms.OutgoingMediaMessage;
|
||||
import org.thoughtcrime.securesms.mms.OutgoingMessage;
|
||||
import org.thoughtcrime.securesms.notifications.v2.ConversationId;
|
||||
import org.thoughtcrime.securesms.recipients.Recipient;
|
||||
import org.thoughtcrime.securesms.recipients.RecipientId;
|
||||
@@ -84,11 +84,11 @@ public final class IdentityUtil {
|
||||
Recipient groupRecipient = Recipient.resolved(recipientId);
|
||||
long threadId = SignalDatabase.threads().getOrCreateThreadIdFor(groupRecipient);
|
||||
|
||||
OutgoingMediaMessage outgoing;
|
||||
OutgoingMessage outgoing;
|
||||
if (verified) {
|
||||
outgoing = OutgoingMediaMessage.identityVerifiedMessage(recipient, time);
|
||||
outgoing = OutgoingMessage.identityVerifiedMessage(recipient, time);
|
||||
} else {
|
||||
outgoing = OutgoingMediaMessage.identityDefaultMessage(recipient, time);
|
||||
outgoing = OutgoingMessage.identityDefaultMessage(recipient, time);
|
||||
}
|
||||
|
||||
try {
|
||||
@@ -110,11 +110,11 @@ public final class IdentityUtil {
|
||||
|
||||
smsDatabase.insertMessageInbox(incoming);
|
||||
} else {
|
||||
OutgoingMediaMessage outgoing;
|
||||
OutgoingMessage outgoing;
|
||||
if (verified) {
|
||||
outgoing = OutgoingMediaMessage.identityVerifiedMessage(recipient, time);
|
||||
outgoing = OutgoingMessage.identityVerifiedMessage(recipient, time);
|
||||
} else {
|
||||
outgoing = OutgoingMediaMessage.identityDefaultMessage(recipient, time);
|
||||
outgoing = OutgoingMessage.identityDefaultMessage(recipient, time);
|
||||
}
|
||||
|
||||
long threadId = SignalDatabase.threads().getOrCreateThreadIdFor(recipient);
|
||||
|
||||
Reference in New Issue
Block a user