Hold onto last incoming and outgoing expiration update for 1 on 1 convos

This commit is contained in:
andrew 2023-12-06 03:32:14 +10:30
parent a4d3fa8897
commit 71b2f1ed6a

View File

@ -559,7 +559,7 @@ class MmsDatabase(context: Context, databaseHelper: SQLCipherOpenHelper) : Messa
runThreadUpdate: Boolean runThreadUpdate: Boolean
): Optional<InsertResult> { ): Optional<InsertResult> {
if (threadId < 0 ) throw MmsException("No thread ID supplied!") if (threadId < 0 ) throw MmsException("No thread ID supplied!")
deleteExpirationTimerMessages(threadId) deleteExpirationTimerMessages(threadId, false.takeUnless { retrieved.groupId != null })
val contentValues = ContentValues() val contentValues = ContentValues()
contentValues.put(DATE_SENT, retrieved.sentTimeMillis) contentValues.put(DATE_SENT, retrieved.sentTimeMillis)
contentValues.put(ADDRESS, retrieved.from.serialize()) contentValues.put(ADDRESS, retrieved.from.serialize())
@ -629,7 +629,7 @@ class MmsDatabase(context: Context, databaseHelper: SQLCipherOpenHelper) : Messa
runThreadUpdate: Boolean runThreadUpdate: Boolean
): Optional<InsertResult> { ): Optional<InsertResult> {
if (threadId < 0 ) throw MmsException("No thread ID supplied!") if (threadId < 0 ) throw MmsException("No thread ID supplied!")
deleteExpirationTimerMessages(threadId) deleteExpirationTimerMessages(threadId, true.takeUnless { retrieved.isGroup })
val messageId = insertMessageOutbox(retrieved, threadId, false, null, serverTimestamp, runThreadUpdate) val messageId = insertMessageOutbox(retrieved, threadId, false, null, serverTimestamp, runThreadUpdate)
if (messageId == -1L) { if (messageId == -1L) {
return Optional.absent() return Optional.absent()
@ -1166,9 +1166,17 @@ class MmsDatabase(context: Context, databaseHelper: SQLCipherOpenHelper) : Messa
) )
} }
fun deleteExpirationTimerMessages(threadId: Long) { /**
val where = "$THREAD_ID = ? AND ($MESSAGE_BOX & ${MmsSmsColumns.Types.EXPIRATION_TIMER_UPDATE_BIT}) <> 0" * @param outgoing if true only delete outgoing messages, if false only delete incoming messages, if null delete both.
val updated = writableDatabase.delete(TABLE_NAME, where, arrayOf("$threadId")) */
private fun deleteExpirationTimerMessages(threadId: Long, outgoing: Boolean? = null) {
val outgoingClause = outgoing?.let {
val comparison = if (it) "IN" else "NOT IN"
" AND $MESSAGE_BOX & ${MmsSmsColumns.Types.BASE_TYPE_MASK} $comparison (${MmsSmsColumns.Types.OUTGOING_MESSAGE_TYPES.joinToString()})"
} ?: ""
val where = "$THREAD_ID = ? AND ($MESSAGE_BOX & ${MmsSmsColumns.Types.EXPIRATION_TIMER_UPDATE_BIT}) <> 0" + outgoingClause
writableDatabase.delete(TABLE_NAME, where, arrayOf("$threadId"))
notifyConversationListeners(threadId) notifyConversationListeners(threadId)
} }