Improve performance around marking messages read.

This commit is contained in:
Cody Henthorne 2023-04-25 11:29:45 -04:00 committed by GitHub
parent a7d6c0f25c
commit aaca487b8f
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -2231,13 +2231,15 @@ open class MessageTable(context: Context?, databaseHelper: SignalDatabase) : Dat
private fun setMessagesRead(where: String, arguments: Array<String>?): List<MarkedMessageInfo> {
val releaseChannelId = SignalStore.releaseChannelValues().releaseChannelRecipientId
return writableDatabase.withinTransaction { db ->
val infos = db
.select(ID, FROM_RECIPIENT_ID, DATE_SENT, TYPE, EXPIRES_IN, EXPIRE_STARTED, THREAD_ID, STORY_TYPE)
.from("$TABLE_NAME INDEXED BY $INDEX_THREAD_DATE")
.where(where, arguments ?: emptyArray())
.run()
.readToList { cursor ->
return writableDatabase.rawQuery(
"""
UPDATE $TABLE_NAME INDEXED BY $INDEX_THREAD_DATE
SET $READ = 1, $REACTIONS_UNREAD = 0, $REACTIONS_LAST_SEEN = ${System.currentTimeMillis()}
WHERE $where
RETURNING $ID, $FROM_RECIPIENT_ID, $DATE_SENT, $TYPE, $EXPIRES_IN, $EXPIRE_STARTED, $THREAD_ID, $STORY_TYPE
""",
arguments ?: emptyArray()
).readToList { cursor ->
val threadId = cursor.requireLong(THREAD_ID)
val recipientId = RecipientId.from(cursor.requireLong(FROM_RECIPIENT_ID))
val dateSent = cursor.requireLong(DATE_SENT)
@ -2255,18 +2257,6 @@ open class MessageTable(context: Context?, databaseHelper: SignalDatabase) : Dat
}
}
.filterNotNull()
db.update("$TABLE_NAME INDEXED BY $INDEX_THREAD_DATE")
.values(
READ to 1,
REACTIONS_UNREAD to 0,
REACTIONS_LAST_SEEN to System.currentTimeMillis()
)
.where(where, arguments ?: emptyArray())
.run()
infos
}
}
fun getOldestUnreadMentionDetails(threadId: Long): Pair<RecipientId, Long>? {