Move to defined from_recipient_id and to_recipient_id columns on message table.

This commit is contained in:
Greyson Parrelli
2023-04-14 14:23:05 -04:00
committed by Cody Henthorne
parent d079f85eca
commit 279ad7945e
86 changed files with 944 additions and 719 deletions

View File

@@ -31,7 +31,7 @@ public class IncomingTextMessage implements Parcelable {
private static final String TAG = Log.tag(IncomingTextMessage.class);
private final String message;
private final RecipientId sender;
private final RecipientId authorId;
private final int senderDeviceId;
private final int protocol;
private final String serviceCenterAddress;
@@ -47,9 +47,9 @@ public class IncomingTextMessage implements Parcelable {
private final boolean unidentified;
@Nullable private final String serverGuid;
public IncomingTextMessage(@NonNull RecipientId sender, @NonNull SmsMessage message, int subscriptionId) {
public IncomingTextMessage(@NonNull RecipientId authorId, @NonNull SmsMessage message, int subscriptionId) {
this.message = message.getDisplayMessageBody();
this.sender = sender;
this.authorId = authorId;
this.senderDeviceId = SignalServiceAddress.DEFAULT_DEVICE_ID;
this.protocol = message.getProtocolIdentifier();
this.serviceCenterAddress = message.getServiceCenterAddress();
@@ -66,7 +66,7 @@ public class IncomingTextMessage implements Parcelable {
this.serverGuid = null;
}
public IncomingTextMessage(@NonNull RecipientId sender,
public IncomingTextMessage(@NonNull RecipientId authorId,
int senderDeviceId,
long sentTimestampMillis,
long serverTimestampMillis,
@@ -78,7 +78,7 @@ public class IncomingTextMessage implements Parcelable {
String serverGuid)
{
this.message = encodedBody;
this.sender = sender;
this.authorId = authorId;
this.senderDeviceId = senderDeviceId;
this.protocol = 31337;
this.serviceCenterAddress = "GCM";
@@ -97,7 +97,7 @@ public class IncomingTextMessage implements Parcelable {
public IncomingTextMessage(Parcel in) {
this.message = in.readString();
this.sender = in.readParcelable(IncomingTextMessage.class.getClassLoader());
this.authorId = in.readParcelable(IncomingTextMessage.class.getClassLoader());
this.senderDeviceId = in.readInt();
this.protocol = in.readInt();
this.serviceCenterAddress = in.readString();
@@ -116,8 +116,8 @@ public class IncomingTextMessage implements Parcelable {
public IncomingTextMessage(IncomingTextMessage base, String newBody) {
this.message = newBody;
this.sender = base.getSender();
this.senderDeviceId = base.getSenderDeviceId();
this.authorId = base.getAuthorId();
this.senderDeviceId = base.getAuthorDeviceId();
this.protocol = base.getProtocol();
this.serviceCenterAddress = base.getServiceCenterAddress();
this.replyPathPresent = base.isReplyPathPresent();
@@ -141,8 +141,8 @@ public class IncomingTextMessage implements Parcelable {
}
this.message = body.toString();
this.sender = fragments.get(0).getSender();
this.senderDeviceId = fragments.get(0).getSenderDeviceId();
this.authorId = fragments.get(0).getAuthorId();
this.senderDeviceId = fragments.get(0).getAuthorDeviceId();
this.protocol = fragments.get(0).getProtocol();
this.serviceCenterAddress = fragments.get(0).getServiceCenterAddress();
this.replyPathPresent = fragments.get(0).isReplyPathPresent();
@@ -186,11 +186,11 @@ public class IncomingTextMessage implements Parcelable {
return message;
}
public RecipientId getSender() {
return sender;
public RecipientId getAuthorId() {
return authorId;
}
public int getSenderDeviceId() {
public int getAuthorDeviceId() {
return senderDeviceId;
}
@@ -277,7 +277,7 @@ public class IncomingTextMessage implements Parcelable {
@Override
public void writeToParcel(Parcel out, int flags) {
out.writeString(message);
out.writeParcelable(sender, flags);
out.writeParcelable(authorId, flags);
out.writeInt(senderDeviceId);
out.writeInt(protocol);
out.writeString(serviceCenterAddress);

View File

@@ -120,13 +120,13 @@ public class MessageSender {
database.beginTransaction();
for (OutgoingMessage message : messages) {
long allocatedThreadId = threadTable.getOrCreateValidThreadId(message.getRecipient(), -1L, message.getDistributionType());
long allocatedThreadId = threadTable.getOrCreateValidThreadId(message.getThreadRecipient(), -1L, message.getDistributionType());
long messageId = database.insertMessageOutbox(message.stripAttachments(), allocatedThreadId, false, insertListener);
messageIds.add(messageId);
threads.add(allocatedThreadId);
if (message.getRecipient().isGroup() && message.getAttachments().isEmpty() && message.getLinkPreviews().isEmpty() && message.getSharedContacts().isEmpty()) {
if (message.getThreadRecipient().isGroup() && message.getAttachments().isEmpty() && message.getLinkPreviews().isEmpty() && message.getSharedContacts().isEmpty()) {
SignalLocalMetrics.GroupMessageSend.onInsertedIntoDatabase(messageId, metricId);
} else {
SignalLocalMetrics.GroupMessageSend.cancel(metricId);
@@ -136,7 +136,7 @@ public class MessageSender {
for (int i = 0; i < messageIds.size(); i++) {
long messageId = messageIds.get(i);
OutgoingMessage message = messages.get(i);
Recipient recipient = message.getRecipient();
Recipient recipient = message.getThreadRecipient();
if (recipient.isDistributionList()) {
DistributionId distributionId = Objects.requireNonNull(SignalDatabase.distributionLists().getDistributionId(recipient.requireDistributionListId()));
@@ -196,7 +196,7 @@ public class MessageSender {
for (int i = 0; i < messageIds.size(); i++) {
long messageId = messageIds.get(i);
OutgoingMessage message = messages.get(i);
Recipient recipient = message.getRecipient();
Recipient recipient = message.getThreadRecipient();
List<UploadDependencyGraph.Node> dependencies = dependencyGraph.getDependencyMap().get(message);
List<String> jobDependencyIds = (dependencies != null) ? dependencies.stream().map(UploadDependencyGraph.Node::getJobId).collect(Collectors.toList())
@@ -224,16 +224,16 @@ public class MessageSender {
@Nullable final String metricId,
@Nullable final MessageTable.InsertListener insertListener)
{
Log.i(TAG, "Sending media message to " + message.getRecipient().getId() + ", thread: " + threadId);
Log.i(TAG, "Sending media message to " + message.getThreadRecipient().getId() + ", thread: " + threadId);
try {
ThreadTable threadTable = SignalDatabase.threads();
MessageTable database = SignalDatabase.messages();
long allocatedThreadId = threadTable.getOrCreateValidThreadId(message.getRecipient(), threadId, message.getDistributionType());
Recipient recipient = message.getRecipient();
long allocatedThreadId = threadTable.getOrCreateValidThreadId(message.getThreadRecipient(), threadId, message.getDistributionType());
Recipient recipient = message.getThreadRecipient();
long messageId = database.insertMessageOutbox(applyUniversalExpireTimerIfNecessary(context, recipient, message, allocatedThreadId), allocatedThreadId, sendType != SendType.SIGNAL, insertListener);
if (message.getRecipient().isGroup() && message.getAttachments().isEmpty() && message.getLinkPreviews().isEmpty() && message.getSharedContacts().isEmpty()) {
if (message.getThreadRecipient().isGroup() && message.getAttachments().isEmpty() && message.getLinkPreviews().isEmpty() && message.getSharedContacts().isEmpty()) {
SignalLocalMetrics.GroupMessageSend.onInsertedIntoDatabase(messageId, metricId);
} else {
SignalLocalMetrics.GroupMessageSend.cancel(metricId);
@@ -256,7 +256,7 @@ public class MessageSender {
final long threadId,
final MessageTable.InsertListener insertListener)
{
Log.i(TAG, "Sending media message with pre-uploads to " + message.getRecipient().getId() + ", thread: " + threadId + ", pre-uploads: " + preUploadResults);
Log.i(TAG, "Sending media message with pre-uploads to " + message.getThreadRecipient().getId() + ", thread: " + threadId + ", pre-uploads: " + preUploadResults);
Preconditions.checkArgument(message.getAttachments().isEmpty(), "If the media is pre-uploaded, there should be no attachments on the message.");
try {
@@ -264,8 +264,8 @@ public class MessageSender {
MessageTable mmsDatabase = SignalDatabase.messages();
AttachmentTable attachmentDatabase = SignalDatabase.attachments();
Recipient recipient = message.getRecipient();
long allocatedThreadId = threadTable.getOrCreateValidThreadId(message.getRecipient(), threadId);
Recipient recipient = message.getThreadRecipient();
long allocatedThreadId = threadTable.getOrCreateValidThreadId(message.getThreadRecipient(), threadId);
long messageId = mmsDatabase.insertMessageOutbox(applyUniversalExpireTimerIfNecessary(context, recipient, message, allocatedThreadId),
allocatedThreadId,
false,
@@ -292,7 +292,7 @@ public class MessageSender {
@NonNull Collection<PreUploadResult> preUploadResults,
boolean overwritePreUploadMessageIds)
{
Log.i(TAG, "Sending media broadcast (overwrite: " + overwritePreUploadMessageIds + ") to " + Stream.of(messages).map(m -> m.getRecipient().getId()).toList());
Log.i(TAG, "Sending media broadcast (overwrite: " + overwritePreUploadMessageIds + ") to " + Stream.of(messages).map(m -> m.getThreadRecipient().getId()).toList());
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.");
@@ -309,8 +309,8 @@ public class MessageSender {
mmsDatabase.beginTransaction();
try {
if (overwritePreUploadMessageIds) {
long primaryThreadId = threadTable.getOrCreateThreadIdFor(primaryMessage.getRecipient(), primaryMessage.getDistributionType());
long primaryMessageId = mmsDatabase.insertMessageOutbox(applyUniversalExpireTimerIfNecessary(context, primaryMessage.getRecipient(), primaryMessage, primaryThreadId),
long primaryThreadId = threadTable.getOrCreateThreadIdFor(primaryMessage.getThreadRecipient(), primaryMessage.getDistributionType());
long primaryMessageId = mmsDatabase.insertMessageOutbox(applyUniversalExpireTimerIfNecessary(context, primaryMessage.getThreadRecipient(), primaryMessage, primaryThreadId),
primaryThreadId,
false,
null);
@@ -337,8 +337,8 @@ public class MessageSender {
}
for (OutgoingMessage secondaryMessage : secondaryMessages) {
long allocatedThreadId = threadTable.getOrCreateThreadIdFor(secondaryMessage.getRecipient(), secondaryMessage.getDistributionType());
long messageId = mmsDatabase.insertMessageOutbox(applyUniversalExpireTimerIfNecessary(context, secondaryMessage.getRecipient(), secondaryMessage, allocatedThreadId),
long allocatedThreadId = threadTable.getOrCreateThreadIdFor(secondaryMessage.getThreadRecipient(), secondaryMessage.getDistributionType());
long messageId = mmsDatabase.insertMessageOutbox(applyUniversalExpireTimerIfNecessary(context, secondaryMessage.getThreadRecipient(), secondaryMessage, allocatedThreadId),
allocatedThreadId,
false,
null);
@@ -370,7 +370,7 @@ public class MessageSender {
for (int i = 0; i < messageIds.size(); i++) {
long messageId = messageIds.get(i);
OutgoingMessage message = messages.get(i);
Recipient recipient = message.getRecipient();
Recipient recipient = message.getThreadRecipient();
if (recipient.isDistributionList()) {
List<RecipientId> members = SignalDatabase.distributionLists().getMembers(recipient.requireDistributionListId());
@@ -390,7 +390,7 @@ public class MessageSender {
for (int i = 0; i < messageIds.size(); i++) {
long messageId = messageIds.get(i);
Recipient recipient = messages.get(i).getRecipient();
Recipient recipient = messages.get(i).getThreadRecipient();
if (isLocalSelfSend(context, recipient, SendType.SIGNAL)) {
sendLocalMediaSelf(context, messageId);
@@ -473,7 +473,7 @@ public class MessageSender {
public static void resendGroupMessage(@NonNull Context context, @NonNull MessageRecord messageRecord, @NonNull Set<RecipientId> filterRecipientIds) {
if (!messageRecord.isMms()) throw new AssertionError("Not Group");
sendGroupPush(context, messageRecord.getRecipient(), messageRecord.getId(), filterRecipientIds, Collections.emptyList());
sendGroupPush(context, messageRecord.getToRecipient(), messageRecord.getId(), filterRecipientIds, Collections.emptyList());
onMessageSent();
}
@@ -481,14 +481,14 @@ public class MessageSender {
if (!messageRecord.isMms() && !((MmsMessageRecord) messageRecord).getStoryType().isStory()) {
throw new AssertionError("Not a story");
}
sendDistributionList(context, messageRecord.getRecipient(), messageRecord.getId(), filterRecipientIds, Collections.emptyList());
sendDistributionList(context, messageRecord.getToRecipient(), messageRecord.getId(), filterRecipientIds, Collections.emptyList());
onMessageSent();
}
public static void resend(Context context, MessageRecord messageRecord) {
long messageId = messageRecord.getId();
boolean forceSms = messageRecord.isForcedSms();
Recipient recipient = messageRecord.getRecipient();
Recipient recipient = messageRecord.getToRecipient();
SendType sendType;
@@ -658,9 +658,9 @@ public class MessageSender {
mmsDatabase.markAsSent(messageId, true);
mmsDatabase.markUnidentified(messageId, true);
mmsDatabase.incrementDeliveryReceiptCount(syncId, System.currentTimeMillis());
mmsDatabase.incrementReadReceiptCount(syncId, System.currentTimeMillis());
mmsDatabase.incrementViewedReceiptCount(syncId, System.currentTimeMillis());
mmsDatabase.incrementDeliveryReceiptCount(message.getSentTimeMillis(), Recipient.self().getId(), System.currentTimeMillis());
mmsDatabase.incrementReadReceiptCount(message.getSentTimeMillis(), Recipient.self().getId(), System.currentTimeMillis());
mmsDatabase.incrementViewedReceiptCount(message.getSentTimeMillis(), Recipient.self().getId(), System.currentTimeMillis());
if (message.getExpiresIn() > 0 && !message.isExpirationUpdate()) {
mmsDatabase.markExpireStarted(messageId);