Skip to content

Commit 5173f61

Browse files
Disappearing messages fixes
1 parent 032a2e6 commit 5173f61

File tree

4 files changed

+16
-17
lines changed

4 files changed

+16
-17
lines changed

app/src/main/java/org/thoughtcrime/securesms/database/MmsDatabase.kt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -367,6 +367,11 @@ class MmsDatabase
367367
contentValues.put(READ, 1)
368368
contentValues.put(BODY, displayedMessage)
369369
contentValues.put(HAS_MENTION, 0)
370+
371+
// Clear the expiration fields so that the "message is deleted" is never expired.
372+
contentValues.put(EXPIRE_STARTED, 0)
373+
contentValues.put(EXPIRES_IN, 0)
374+
370375
database.update(TABLE_NAME, contentValues, ID_WHERE, arrayOf(messageId.toString()))
371376
val attachmentDatabase = get(context).attachmentDatabase()
372377
queue { attachmentDatabase.deleteAttachmentsForMessage(messageId) }

app/src/main/java/org/thoughtcrime/securesms/database/SmsDatabase.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -246,6 +246,10 @@ public void markAsDeleted(long messageId, boolean isOutgoing, String displayedMe
246246
contentValues.put(BODY, displayedMessage);
247247
contentValues.put(HAS_MENTION, 0);
248248
contentValues.put(STATUS, Status.STATUS_NONE);
249+
// Clear the expiration fields so that the "message is deleted" is never expired.
250+
contentValues.put(EXPIRE_STARTED, 0);
251+
contentValues.put(EXPIRES_IN, 0);
252+
249253
database.update(TABLE_NAME, contentValues, ID_WHERE, new String[] {String.valueOf(messageId)});
250254

251255
updateTypeBitmask(messageId, Types.BASE_TYPE_MASK,

app/src/main/java/org/thoughtcrime/securesms/database/Storage.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1694,7 +1694,7 @@ open class Storage @Inject constructor(
16941694
val expirationConfig = getExpirationConfiguration(threadId)
16951695
val expiryMode = expirationConfig?.expiryMode?.coerceSendToRead() ?: ExpiryMode.NONE
16961696
val expiresInMillis = expiryMode.expiryMillis
1697-
val expireStartedAt = if (expiryMode is ExpiryMode.AfterSend) sentTimestamp else 0
1697+
val expireStartedAt = if (expiryMode != ExpiryMode.NONE) clock.currentTimeMills() else 0
16981698
val callMessage = IncomingTextMessage.fromCallInfo(callMessageType, address, Optional.absent(), sentTimestamp, expiresInMillis, expireStartedAt)
16991699
smsDatabase.insertCallMessage(callMessage)
17001700
}

app/src/main/java/org/thoughtcrime/securesms/service/ExpiringMessageManager.kt

Lines changed: 6 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -203,7 +203,6 @@ class ExpiringMessageManager @Inject constructor(
203203
}
204204
}
205205

206-
207206
override fun onMessageSent(message: Message) {
208207
// When a message is sent, we'll schedule deletion immediately if we have an expiry mode,
209208
// even if the expiry mode is set to AfterRead, as we don't have a reliable way to know
@@ -212,31 +211,22 @@ class ExpiringMessageManager @Inject constructor(
212211
// As for the receiver, they will be able to disappear the message correctly after
213212
// they've done reading it.
214213
val messageId = message.id
215-
val sentTimestamp = message.sentTimestamp
216-
if (message.expiryMode != ExpiryMode.NONE && messageId != null && sentTimestamp != null) {
217-
// If the expiryMode is set to AfterRead, the start time must be greater than the sent timestamp.
218-
// This is due to the assumption downstream that `expiryStarted == sentTimestamp` means expiryMode is AfterSend.
219-
val startTime = if (message.expiryMode is ExpiryMode.AfterRead) {
220-
sentTimestamp + 1 // Ensure start time is after sent timestamp
221-
} else {
222-
sentTimestamp
223-
}
224-
225-
getDatabase(messageId.mms).markExpireStarted(messageId.id, startTime)
214+
if (message.expiryMode != ExpiryMode.NONE && messageId != null) {
215+
getDatabase(messageId.mms)
216+
.markExpireStarted(messageId.id, clock.currentTimeMills())
226217
}
227218
}
228219

229220
override fun onMessageReceived(message: Message) {
230221
// When we receive a message, we'll schedule deletion if it has an expiry mode set to
231222
// AfterSend, as the message would be considered sent from the sender's perspective.
232223
val messageId = message.id
233-
val sentTimestamp = message.sentTimestamp
234-
if (message.expiryMode is ExpiryMode.AfterSend && messageId != null && sentTimestamp != null) {
235-
getDatabase(messageId.mms).markExpireStarted(messageId.id, sentTimestamp)
224+
if (message.expiryMode is ExpiryMode.AfterSend && messageId != null) {
225+
getDatabase(messageId.mms)
226+
.markExpireStarted(messageId.id, clock.currentTimeMills())
236227
}
237228
}
238229

239-
240230
private suspend fun processDatabase(db: MessagingDatabase) {
241231
while (true) {
242232
val expiredMessages = db.getExpiredMessageIDs(clock.currentTimeMills())

0 commit comments

Comments
 (0)