From 6847e0e4da0235597060c64d53186cb5de0c6d2a Mon Sep 17 00:00:00 2001 From: Sagar <85388413+Sagar0-0@users.noreply.github.com> Date: Fri, 28 Mar 2025 00:10:59 +0530 Subject: [PATCH] Update conversation list for scheduled group message. --- .../securesms/jobs/IndividualSendJob.java | 82 ++++++++++--------- .../securesms/jobs/PushGroupSendJob.java | 3 + 2 files changed, 45 insertions(+), 40 deletions(-) diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/IndividualSendJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/IndividualSendJob.java index 307bac9249..6c09b9dc45 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/IndividualSendJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/IndividualSendJob.java @@ -72,11 +72,11 @@ public class IndividualSendJob extends PushSendJob { public IndividualSendJob(long messageId, @NonNull Recipient recipient, boolean hasMedia, boolean isScheduledSend) { this(new Parameters.Builder() - .setQueue(isScheduledSend ? recipient.getId().toScheduledSendQueueKey() : recipient.getId().toQueueKey(hasMedia)) - .addConstraint(NetworkConstraint.KEY) - .setLifespan(TimeUnit.DAYS.toMillis(1)) - .setMaxAttempts(Parameters.UNLIMITED) - .build(), + .setQueue(isScheduledSend ? recipient.getId().toScheduledSendQueueKey() : recipient.getId().toQueueKey(hasMedia)) + .addConstraint(NetworkConstraint.KEY) + .setLifespan(TimeUnit.DAYS.toMillis(1)) + .setMaxAttempts(Parameters.UNLIMITED) + .build(), messageId); } @@ -141,11 +141,11 @@ public class IndividualSendJob extends PushSendJob { { SignalLocalMetrics.IndividualMessageSend.onJobStarted(messageId); - ExpiringMessageManager expirationManager = AppDependencies.getExpiringMessageManager(); - MessageTable database = SignalDatabase.messages(); - OutgoingMessage message = database.getOutgoingMessage(messageId); - long threadId = database.getMessageRecord(messageId).getThreadId(); - MessageRecord originalEditedMessage = message.getMessageToEdit() > 0 ? SignalDatabase.messages().getMessageRecordOrNull(message.getMessageToEdit()) : null; + ExpiringMessageManager expirationManager = AppDependencies.getExpiringMessageManager(); + MessageTable database = SignalDatabase.messages(); + OutgoingMessage message = database.getOutgoingMessage(messageId); + long threadId = database.getMessageRecord(messageId).getThreadId(); + MessageRecord originalEditedMessage = message.getMessageToEdit() > 0 ? SignalDatabase.messages().getMessageRecordOrNull(message.getMessageToEdit()) : null; if (database.isSent(messageId)) { warn(TAG, String.valueOf(message.getSentTimeMillis()), "Message " + messageId + " was already sent. Ignoring."); @@ -153,7 +153,8 @@ public class IndividualSendJob extends PushSendJob { } try { - log(TAG, String.valueOf(message.getSentTimeMillis()), "Sending message: " + messageId + ", Recipient: " + message.getThreadRecipient().getId() + ", Thread: " + threadId + ", Attachments: " + buildAttachmentString(message.getAttachments()) + ", Editing: " + (originalEditedMessage != null ? originalEditedMessage.getDateSent() : "N/A")); + log(TAG, String.valueOf(message.getSentTimeMillis()), "Sending message: " + messageId + ", Recipient: " + message.getThreadRecipient() + .getId() + ", Thread: " + threadId + ", Attachments: " + buildAttachmentString(message.getAttachments()) + ", Editing: " + (originalEditedMessage != null ? originalEditedMessage.getDateSent() : "N/A")); RecipientUtil.shareProfileIfFirstSecureMessage(message.getThreadRecipient()); @@ -259,33 +260,33 @@ public class IndividualSendJob extends PushSendJob { throw new UndeliverableMessageException(messageRecipient.getId() + " not registered!"); } - SignalServiceMessageSender messageSender = AppDependencies.getSignalServiceMessageSender(); - SignalServiceAddress address = RecipientUtil.toSignalServiceAddress(context, messageRecipient); - List attachments = Stream.of(message.getAttachments()).filterNot(Attachment::isSticker).toList(); - List serviceAttachments = getAttachmentPointersFor(attachments); - Optional profileKey = getProfileKey(messageRecipient); - Optional sticker = getStickerFor(message); - List sharedContacts = getSharedContactsFor(message); - List previews = getPreviewsFor(message); - SignalServiceDataMessage.GiftBadge giftBadge = getGiftBadgeFor(message); - SignalServiceDataMessage.Payment payment = getPayment(message); - List bodyRanges = getBodyRanges(message); - SignalServiceDataMessage.Builder mediaMessageBuilder = SignalServiceDataMessage.newBuilder() - .withBody(message.getBody()) - .withAttachments(serviceAttachments) - .withTimestamp(message.getSentTimeMillis()) - .withExpiration((int)(message.getExpiresIn() / 1000)) - .withExpireTimerVersion(message.getExpireTimerVersion()) - .withViewOnce(message.isViewOnce()) - .withProfileKey(profileKey.orElse(null)) - .withSticker(sticker.orElse(null)) - .withSharedContacts(sharedContacts) - .withPreviews(previews) - .withGiftBadge(giftBadge) - .asExpirationUpdate(message.isExpirationUpdate()) - .asEndSessionMessage(message.isEndSession()) - .withPayment(payment) - .withBodyRanges(bodyRanges); + SignalServiceMessageSender messageSender = AppDependencies.getSignalServiceMessageSender(); + SignalServiceAddress address = RecipientUtil.toSignalServiceAddress(context, messageRecipient); + List attachments = Stream.of(message.getAttachments()).filterNot(Attachment::isSticker).toList(); + List serviceAttachments = getAttachmentPointersFor(attachments); + Optional profileKey = getProfileKey(messageRecipient); + Optional sticker = getStickerFor(message); + List sharedContacts = getSharedContactsFor(message); + List previews = getPreviewsFor(message); + SignalServiceDataMessage.GiftBadge giftBadge = getGiftBadgeFor(message); + SignalServiceDataMessage.Payment payment = getPayment(message); + List bodyRanges = getBodyRanges(message); + SignalServiceDataMessage.Builder mediaMessageBuilder = SignalServiceDataMessage.newBuilder() + .withBody(message.getBody()) + .withAttachments(serviceAttachments) + .withTimestamp(message.getSentTimeMillis()) + .withExpiration((int) (message.getExpiresIn() / 1000)) + .withExpireTimerVersion(message.getExpireTimerVersion()) + .withViewOnce(message.isViewOnce()) + .withProfileKey(profileKey.orElse(null)) + .withSticker(sticker.orElse(null)) + .withSharedContacts(sharedContacts) + .withPreviews(previews) + .withGiftBadge(giftBadge) + .asExpirationUpdate(message.isExpirationUpdate()) + .asEndSessionMessage(message.isEndSession()) + .withPayment(payment) + .withBodyRanges(bodyRanges); if (message.getParentStoryId() != null) { try { @@ -315,7 +316,7 @@ public class IndividualSendJob extends PushSendJob { if (originalEditedMessage != null) { if (Util.equals(SignalStore.account().getAci(), address.getServiceId())) { - SendMessageResult result = messageSender.sendSelfSyncEditMessage(new SignalServiceEditMessage(originalEditedMessage.getDateSent(), mediaMessage)); + SendMessageResult result = messageSender.sendSelfSyncEditMessage(new SignalServiceEditMessage(originalEditedMessage.getDateSent(), mediaMessage)); SignalDatabase.messageLog().insertIfPossible(messageRecipient.getId(), message.getSentTimeMillis(), result, ContentHint.RESENDABLE, new MessageId(messageId), false); return SealedSenderAccessUtil.getSealedSenderCertificate() != null; @@ -332,7 +333,7 @@ public class IndividualSendJob extends PushSendJob { return result.getSuccess().isUnidentified(); } } else if (Util.equals(SignalStore.account().getAci(), address.getServiceId())) { - SendMessageResult result = messageSender.sendSyncMessage(mediaMessage); + SendMessageResult result = messageSender.sendSyncMessage(mediaMessage); SignalDatabase.messageLog().insertIfPossible(messageRecipient.getId(), message.getSentTimeMillis(), result, ContentHint.RESENDABLE, new MessageId(messageId), false); return SealedSenderAccessUtil.getSealedSenderCertificate() != null; } else { @@ -398,6 +399,7 @@ public class IndividualSendJob extends PushSendJob { JsonJobData data = JsonJobData.deserialize(serializedData); return data.getLong(KEY_MESSAGE_ID); } + private static class MetricEventListener implements SignalServiceMessageSender.IndividualSendEvents { private final long messageId; diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/PushGroupSendJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/PushGroupSendJob.java index c238ed2bb2..82e69d2f97 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/PushGroupSendJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/PushGroupSendJob.java @@ -474,6 +474,9 @@ public final class PushGroupSendJob extends PushSendJob { markAttachmentsUploaded(messageId, message); + // For scheduled messages, which may not have updated the thread with it's snippet yet + SignalDatabase.threads().updateSilently(threadId, false); + if (skippedRecipients.size() > 0) { SignalDatabase.groupReceipts().setSkipped(skippedRecipients, messageId); }