Skip to content

Commit bab253c

Browse files
[SES-4285] - Simplify expiriation logic (#1312)
1 parent 97378e9 commit bab253c

40 files changed

+730
-508
lines changed

app/src/main/java/org/session/libsession/database/StorageProtocol.kt

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,7 @@ interface StorageProtocol {
116116
fun removeReceivedMessageTimestamps(timestamps: Set<Long>)
117117
fun getAttachmentsForMessage(mmsMessageId: Long): List<DatabaseAttachment>
118118
fun getMessageBy(timestamp: Long, author: String): MessageRecord?
119-
fun updateSentTimestamp(messageId: MessageId, openGroupSentTimestamp: Long, threadId: Long)
119+
fun updateSentTimestamp(messageId: MessageId, newTimestamp: Long)
120120
fun markAsResyncing(messageId: MessageId)
121121
fun markAsSyncing(messageId: MessageId)
122122
fun markAsSending(messageId: MessageId)
@@ -274,7 +274,6 @@ interface StorageProtocol {
274274
fun blockedContacts(): List<Recipient>
275275
fun getExpirationConfiguration(threadId: Long): ExpirationConfiguration?
276276
fun setExpirationConfiguration(config: ExpirationConfiguration)
277-
fun getExpiringMessages(messageIds: List<Long> = emptyList()): List<Pair<Long, Long>>
278277
fun updateDisappearingState(
279278
messageSender: String,
280279
threadID: Long,

app/src/main/java/org/session/libsession/messaging/messages/signal/IncomingMediaMessage.java

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package org.session.libsession.messaging.messages.signal;
22

3+
import org.jspecify.annotations.Nullable;
34
import org.session.libsession.messaging.messages.visible.VisibleMessage;
45
import org.session.libsession.messaging.sending_receiving.attachments.Attachment;
56
import org.session.libsession.messaging.sending_receiving.attachments.PointerAttachment;
@@ -13,6 +14,7 @@
1314
import org.session.libsignal.messages.SignalServiceGroup;
1415
import org.session.libsignal.utilities.Hex;
1516
import org.session.libsignal.utilities.guava.Optional;
17+
import org.thoughtcrime.securesms.database.model.content.MessageContent;
1618

1719
import java.util.Collections;
1820
import java.util.LinkedList;
@@ -28,9 +30,10 @@ public class IncomingMediaMessage {
2830
private final int subscriptionId;
2931
private final long expiresIn;
3032
private final long expireStartedAt;
31-
private final boolean expirationUpdate;
3233
private final boolean messageRequestResponse;
3334
private final boolean hasMention;
35+
@Nullable
36+
private final MessageContent messageContent;
3437

3538
private final DataExtractionNotificationInfoMessage dataExtractionNotification;
3639
private final QuoteModel quote;
@@ -44,25 +47,25 @@ public IncomingMediaMessage(Address from,
4447
int subscriptionId,
4548
long expiresIn,
4649
long expireStartedAt,
47-
boolean expirationUpdate,
4850
boolean messageRequestResponse,
4951
boolean hasMention,
5052
Optional<String> body,
5153
Optional<SignalServiceGroup> group,
5254
Optional<List<SignalServiceAttachment>> attachments,
55+
@Nullable MessageContent messageContent,
5356
Optional<QuoteModel> quote,
5457
Optional<List<Contact>> sharedContacts,
5558
Optional<List<LinkPreview>> linkPreviews,
5659
Optional<DataExtractionNotificationInfoMessage> dataExtractionNotification)
5760
{
61+
this.messageContent = messageContent;
5862
this.push = true;
5963
this.from = from;
6064
this.sentTimeMillis = sentTimeMillis;
6165
this.body = body.orNull();
6266
this.subscriptionId = subscriptionId;
6367
this.expiresIn = expiresIn;
6468
this.expireStartedAt = expireStartedAt;
65-
this.expirationUpdate = expirationUpdate;
6669
this.dataExtractionNotification = dataExtractionNotification.orNull();
6770
this.quote = quote.orNull();
6871
this.messageRequestResponse = messageRequestResponse;
@@ -96,8 +99,8 @@ public static IncomingMediaMessage from(VisibleMessage message,
9699
Optional<List<LinkPreview>> linkPreviews)
97100
{
98101
return new IncomingMediaMessage(from, message.getSentTimestamp(), -1, expiresIn, expireStartedAt,
99-
false, false, message.getHasMention(), Optional.fromNullable(message.getText()),
100-
group, Optional.fromNullable(attachments), quote, Optional.absent(), linkPreviews, Optional.absent());
102+
false, message.getHasMention(), Optional.fromNullable(message.getText()),
103+
group, Optional.fromNullable(attachments), null, quote, Optional.absent(), linkPreviews, Optional.absent());
101104
}
102105

103106
public int getSubscriptionId() {
@@ -120,12 +123,12 @@ public Address getGroupId() {
120123
return groupId;
121124
}
122125

123-
public boolean isPushMessage() {
124-
return push;
126+
public @Nullable MessageContent getMessageContent() {
127+
return messageContent;
125128
}
126129

127-
public boolean isExpirationUpdate() {
128-
return expirationUpdate;
130+
public boolean isPushMessage() {
131+
return push;
129132
}
130133

131134
public long getSentTimeMillis() {

app/src/main/java/org/session/libsession/messaging/messages/signal/OutgoingExpirationUpdateMessage.java

Lines changed: 0 additions & 35 deletions
This file was deleted.

app/src/main/java/org/session/libsession/messaging/messages/signal/OutgoingGroupMediaMessage.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
import org.session.libsession.messaging.sending_receiving.link_preview.LinkPreview;
1010
import org.session.libsession.messaging.sending_receiving.quotes.QuoteModel;
1111
import org.session.libsession.utilities.recipients.Recipient;
12+
import org.thoughtcrime.securesms.database.model.content.MessageContent;
1213

1314
import java.util.LinkedList;
1415
import java.util.List;
@@ -28,12 +29,13 @@ public OutgoingGroupMediaMessage(@NonNull Recipient recipient,
2829
boolean updateMessage,
2930
@Nullable QuoteModel quote,
3031
@NonNull List<Contact> contacts,
31-
@NonNull List<LinkPreview> previews)
32+
@NonNull List<LinkPreview> previews,
33+
@Nullable MessageContent messageContent)
3234
{
3335
super(recipient, body,
3436
new LinkedList<Attachment>() {{if (avatar != null) add(avatar);}},
3537
sentTime,
36-
DistributionTypes.CONVERSATION, expireIn, expireStartedAt, quote, contacts, previews);
38+
DistributionTypes.CONVERSATION, expireIn, expireStartedAt, quote, contacts, previews, messageContent);
3739

3840
this.groupID = groupId;
3941
this.isUpdateMessage = updateMessage;

app/src/main/java/org/session/libsession/messaging/messages/signal/OutgoingMediaMessage.java

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,11 +12,19 @@
1212
import org.session.libsession.utilities.IdentityKeyMismatch;
1313
import org.session.libsession.utilities.NetworkFailure;
1414
import org.session.libsession.utilities.recipients.Recipient;
15+
import org.thoughtcrime.securesms.database.model.content.MessageContent;
1516

1617
import java.util.Collections;
1718
import java.util.LinkedList;
1819
import java.util.List;
1920

21+
/**
22+
* Represents an outgoing mms message. Note this class is only used for saving messages
23+
* into the database. We will still use {@link org.session.libsession.messaging.messages.Message}
24+
* as a model when sending the message to the network.
25+
* <br/>
26+
* See {@link OutgoingTextMessage} for the sms table counterpart.
27+
*/
2028
public class OutgoingMediaMessage {
2129

2230
private final Recipient recipient;
@@ -28,6 +36,8 @@ public class OutgoingMediaMessage {
2836
private final long expiresIn;
2937
private final long expireStartedAt;
3038
private final QuoteModel outgoingQuote;
39+
@Nullable
40+
private final MessageContent messageContent;
3141

3242
private final List<NetworkFailure> networkFailures = new LinkedList<>();
3343
private final List<IdentityKeyMismatch> identityKeyMismatches = new LinkedList<>();
@@ -42,7 +52,8 @@ public OutgoingMediaMessage(Recipient recipient, String message,
4252
@NonNull List<Contact> contacts,
4353
@NonNull List<LinkPreview> linkPreviews,
4454
@NonNull List<NetworkFailure> networkFailures,
45-
@NonNull List<IdentityKeyMismatch> identityKeyMismatches)
55+
@NonNull List<IdentityKeyMismatch> identityKeyMismatches,
56+
@Nullable MessageContent messageContent)
4657
{
4758
this.recipient = recipient;
4859
this.body = message;
@@ -53,6 +64,7 @@ public OutgoingMediaMessage(Recipient recipient, String message,
5364
this.expiresIn = expiresIn;
5465
this.expireStartedAt = expireStartedAt;
5566
this.outgoingQuote = outgoingQuote;
67+
this.messageContent = messageContent;
5668

5769
this.contacts.addAll(contacts);
5870
this.linkPreviews.addAll(linkPreviews);
@@ -70,6 +82,7 @@ public OutgoingMediaMessage(OutgoingMediaMessage that) {
7082
this.expiresIn = that.expiresIn;
7183
this.expireStartedAt = that.expireStartedAt;
7284
this.outgoingQuote = that.outgoingQuote;
85+
this.messageContent = that.messageContent;
7386

7487
this.identityKeyMismatches.addAll(that.identityKeyMismatches);
7588
this.networkFailures.addAll(that.networkFailures);
@@ -91,7 +104,12 @@ public static OutgoingMediaMessage from(VisibleMessage message,
91104
}
92105
return new OutgoingMediaMessage(recipient, message.getText(), attachments, message.getSentTimestamp(), -1,
93106
expiresInMillis, expireStartedAt, DistributionTypes.DEFAULT, outgoingQuote,
94-
Collections.emptyList(), previews, Collections.emptyList(), Collections.emptyList());
107+
Collections.emptyList(), previews, Collections.emptyList(), Collections.emptyList(), null);
108+
}
109+
110+
@Nullable
111+
public MessageContent getMessageContent() {
112+
return messageContent;
95113
}
96114

97115
public Recipient getRecipient() {
@@ -114,8 +132,6 @@ public boolean isGroup() {
114132
return false;
115133
}
116134

117-
public boolean isExpirationUpdate() { return false; }
118-
119135
public long getSentTimeMillis() {
120136
return sentTimeMillis;
121137
}

app/src/main/java/org/session/libsession/messaging/messages/signal/OutgoingSecureMediaMessage.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import org.session.libsession.messaging.sending_receiving.link_preview.LinkPreview;
99
import org.session.libsession.messaging.sending_receiving.quotes.QuoteModel;
1010
import org.session.libsession.utilities.recipients.Recipient;
11+
import org.thoughtcrime.securesms.database.model.content.MessageContent;
1112

1213
import java.util.Collections;
1314
import java.util.List;
@@ -22,9 +23,10 @@ public OutgoingSecureMediaMessage(Recipient recipient, String body,
2223
long expireStartedAt,
2324
@Nullable QuoteModel quote,
2425
@NonNull List<Contact> contacts,
25-
@NonNull List<LinkPreview> previews)
26+
@NonNull List<LinkPreview> previews,
27+
@Nullable MessageContent messageContent)
2628
{
27-
super(recipient, body, attachments, sentTimeMillis, -1, expiresIn, expireStartedAt, distributionType, quote, contacts, previews, Collections.emptyList(), Collections.emptyList());
29+
super(recipient, body, attachments, sentTimeMillis, -1, expiresIn, expireStartedAt, distributionType, quote, contacts, previews, Collections.emptyList(), Collections.emptyList(), messageContent);
2830
}
2931

3032
public OutgoingSecureMediaMessage(OutgoingMediaMessage base) {

app/src/main/java/org/session/libsession/messaging/sending_receiving/MessageSender.kt

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -419,15 +419,13 @@ object MessageSender {
419419

420420
// Result Handling
421421
fun handleSuccessfulMessageSend(message: Message, destination: Destination, isSyncMessage: Boolean = false, openGroupSentTimestamp: Long = -1) {
422-
val threadId by lazy { requireNotNull(message.threadID) { "threadID for the message is null" } }
423422
val storage = MessagingModuleConfiguration.shared.storage
424423
val userPublicKey = storage.getUserPublicKey()!!
425424
// Ignore future self-sends
426425
storage.addReceivedMessageTimestamp(message.sentTimestamp!!)
427426
message.id?.let { messageId ->
428427
if (openGroupSentTimestamp != -1L && message is VisibleMessage) {
429428
storage.addReceivedMessageTimestamp(openGroupSentTimestamp)
430-
storage.updateSentTimestamp(messageId, openGroupSentTimestamp, threadId)
431429
message.sentTimestamp = openGroupSentTimestamp
432430
}
433431

@@ -473,6 +471,9 @@ object MessageSender {
473471
// Mark the message as sent.
474472
storage.markAsSent(messageId)
475473

474+
// Update the message sent timestamp
475+
storage.updateSentTimestamp(messageId, message.sentTimestamp!!)
476+
476477
// Start the disappearing messages timer if needed
477478
SSKEnvironment.shared.messageExpirationManager.onMessageSent(message)
478479
} ?: run {

app/src/main/java/org/session/libsession/messaging/sending_receiving/ReceivedMessageHandler.kt

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -171,7 +171,10 @@ fun MessageReceiver.cancelTypingIndicatorsIfNeeded(senderPublicKey: String) {
171171
}
172172

173173
private fun MessageReceiver.handleExpirationTimerUpdate(message: ExpirationTimerUpdate) {
174-
SSKEnvironment.shared.messageExpirationManager.insertExpirationTimerMessage(message)
174+
SSKEnvironment.shared.messageExpirationManager.run {
175+
insertExpirationTimerMessage(message)
176+
onMessageReceived(message)
177+
}
175178

176179
val isLegacyGroup = message.groupPublicKey != null && message.groupPublicKey?.startsWith(IdPrefix.GROUP.value) == false
177180

0 commit comments

Comments
 (0)