feat: Add Jetpack Paging 3 support for messages and threads/contacts (#3795)

Co-authored-by: Claude <noreply@anthropic.com>
This commit is contained in:
Mac DeCourcy 2025-11-24 06:14:05 -08:00 committed by GitHub
parent 552097888f
commit 5e8c9794eb
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
12 changed files with 551 additions and 250 deletions

View file

@ -17,6 +17,7 @@
package org.meshtastic.core.database.dao
import androidx.paging.PagingSource
import androidx.room.Dao
import androidx.room.MapColumn
import androidx.room.Query
@ -62,6 +63,23 @@ interface PacketDao {
>,
>
@Query(
"""
SELECT p.* FROM packet p
INNER JOIN (
SELECT contact_key, MAX(received_time) as max_time
FROM packet
WHERE (myNodeNum = 0 OR myNodeNum = (SELECT myNodeNum FROM my_node))
AND port_num = 1
GROUP BY contact_key
) latest ON p.contact_key = latest.contact_key AND p.received_time = latest.max_time
WHERE (p.myNodeNum = 0 OR p.myNodeNum = (SELECT myNodeNum FROM my_node))
AND p.port_num = 1
ORDER BY p.received_time DESC
""",
)
fun getContactKeysPaged(): PagingSource<Int, Packet>
@Query(
"""
SELECT COUNT(*) FROM packet
@ -80,6 +98,26 @@ interface PacketDao {
)
suspend fun getUnreadCount(contact: String): Int
@Query(
"""
SELECT uuid FROM packet
WHERE (myNodeNum = 0 OR myNodeNum = (SELECT myNodeNum FROM my_node))
AND port_num = 1 AND contact_key = :contact AND read = 0
ORDER BY received_time ASC
LIMIT 1
""",
)
fun getFirstUnreadMessageUuid(contact: String): Flow<Long?>
@Query(
"""
SELECT COUNT(*) > 0 FROM packet
WHERE (myNodeNum = 0 OR myNodeNum = (SELECT myNodeNum FROM my_node))
AND port_num = 1 AND contact_key = :contact AND read = 0
""",
)
fun hasUnreadMessages(contact: String): Flow<Boolean>
@Query(
"""
SELECT COUNT(*) FROM packet
@ -112,6 +150,17 @@ interface PacketDao {
)
fun getMessagesFrom(contact: String): Flow<List<PacketEntity>>
@Transaction
@Query(
"""
SELECT * FROM packet
WHERE (myNodeNum = 0 OR myNodeNum = (SELECT myNodeNum FROM my_node))
AND port_num = 1 AND contact_key = :contact
ORDER BY received_time DESC
""",
)
fun getMessagesFromPaged(contact: String): PagingSource<Int, PacketEntity>
@Query(
"""
SELECT * FROM packet