feat: Implement FCM token handling and dialog cache management; enhance user experience and performance
This commit is contained in:
@@ -236,13 +236,13 @@ interface MessageDao {
|
||||
suspend fun getUnreadCountForDialog(account: String, opponentKey: String): Int
|
||||
|
||||
/**
|
||||
* Удалить все сообщения диалога
|
||||
* Удалить все сообщения диалога (возвращает количество удалённых)
|
||||
*/
|
||||
@Query("DELETE FROM messages WHERE account = :account AND dialog_key = :dialogKey")
|
||||
suspend fun deleteDialog(account: String, dialogKey: String)
|
||||
suspend fun deleteDialog(account: String, dialogKey: String): Int
|
||||
|
||||
/**
|
||||
* Удалить все сообщения между двумя пользователями
|
||||
* Удалить все сообщения между двумя пользователями (возвращает количество удалённых)
|
||||
*/
|
||||
@Query("""
|
||||
DELETE FROM messages
|
||||
@@ -251,7 +251,7 @@ interface MessageDao {
|
||||
(from_public_key = :user2 AND to_public_key = :user1)
|
||||
)
|
||||
""")
|
||||
suspend fun deleteMessagesBetweenUsers(account: String, user1: String, user2: String)
|
||||
suspend fun deleteMessagesBetweenUsers(account: String, user1: String, user2: String): Int
|
||||
|
||||
/**
|
||||
* Количество непрочитанных сообщений в диалоге
|
||||
@@ -294,33 +294,39 @@ interface DialogDao {
|
||||
/**
|
||||
* Получить все диалоги отсортированные по последнему сообщению
|
||||
* Исключает requests (диалоги без исходящих сообщений от нас)
|
||||
* Исключает пустые диалоги (без сообщений)
|
||||
*/
|
||||
@Query("""
|
||||
SELECT * FROM dialogs
|
||||
WHERE account = :account
|
||||
AND i_have_sent = 1
|
||||
AND last_message_timestamp > 0
|
||||
ORDER BY last_message_timestamp DESC
|
||||
""")
|
||||
fun getDialogsFlow(account: String): Flow<List<DialogEntity>>
|
||||
|
||||
/**
|
||||
* Получить requests - диалоги где нам писали, но мы не отвечали
|
||||
* Исключает пустые диалоги (без сообщений)
|
||||
*/
|
||||
@Query("""
|
||||
SELECT * FROM dialogs
|
||||
WHERE account = :account
|
||||
AND i_have_sent = 0
|
||||
AND last_message_timestamp > 0
|
||||
ORDER BY last_message_timestamp DESC
|
||||
""")
|
||||
fun getRequestsFlow(account: String): Flow<List<DialogEntity>>
|
||||
|
||||
/**
|
||||
* Получить количество requests
|
||||
* Исключает пустые диалоги (без сообщений)
|
||||
*/
|
||||
@Query("""
|
||||
SELECT COUNT(*) FROM dialogs
|
||||
WHERE account = :account
|
||||
AND i_have_sent = 0
|
||||
AND last_message_timestamp > 0
|
||||
""")
|
||||
fun getRequestsCountFlow(account: String): Flow<Int>
|
||||
|
||||
@@ -419,7 +425,7 @@ interface DialogDao {
|
||||
* 1. Берем последнее сообщение (по timestamp DESC)
|
||||
* 2. Считаем количество непрочитанных сообщений (from_me = 0 AND read = 0)
|
||||
* 3. Вычисляем i_have_sent = 1 если есть исходящие сообщения (from_me = 1) - как sended в Архиве
|
||||
* 4. Обновляем диалог или создаем новый
|
||||
* 4. Обновляем диалог или создаем новый ТОЛЬКО если есть сообщения!
|
||||
*/
|
||||
@Query("""
|
||||
INSERT OR REPLACE INTO dialogs (
|
||||
@@ -494,6 +500,12 @@ interface DialogDao {
|
||||
0
|
||||
)
|
||||
END AS i_have_sent
|
||||
WHERE EXISTS (
|
||||
SELECT 1 FROM messages
|
||||
WHERE account = :account
|
||||
AND ((from_public_key = :opponentKey AND to_public_key = :account)
|
||||
OR (from_public_key = :account AND to_public_key = :opponentKey))
|
||||
)
|
||||
""")
|
||||
suspend fun updateDialogFromMessages(account: String, opponentKey: String)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user