mirror of
https://github.com/meshtastic/Meshtastic-Android.git
synced 2026-04-20 22:23:37 +00:00
feat: Add Jetpack Paging 3 support for messages and threads/contacts (#3795)
Co-authored-by: Claude <noreply@anthropic.com>
This commit is contained in:
parent
552097888f
commit
5e8c9794eb
12 changed files with 551 additions and 250 deletions
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue