浏览代码

handle CLEARED_CHAT for scrolling into past

Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
Marcel Hibbe 10 月之前
父节点
当前提交
299e8508c4

+ 9 - 2
app/src/main/java/com/nextcloud/talk/chat/data/network/OfflineFirstChatRepository.kt

@@ -481,8 +481,15 @@ class OfflineFirstChatRepository @Inject constructor(
                 }
 
                 ChatMessage.SystemMessageType.CLEARED_CHAT -> {
-                    val pattern = "$internalConversationId%" // LIKE "<accountId>@<conversationId>@%"
-                    chatDao.clearAllMessagesForUser(pattern)
+                    // for lookIntoFuture just deleting everything would be fine.
+                    // But lets say we did not open the chat for a while and in between it was cleared.
+                    // We just load the last 100 messages but this don't contain the system message.
+                    // We scroll up and load the system message. Deleting everything is not an option as we
+                    // would loose the messages that we want to keep. We only want to
+                    // delete the messages and chatBlocks older than the system message.
+
+                    chatDao.deleteMessagesOlderThan(internalConversationId, messageJson.id)
+                    chatBlocksDao.deleteChatBlocksOlderThan(internalConversationId, messageJson.id)
                 }
 
                 else -> {}

+ 9 - 0
app/src/main/java/com/nextcloud/talk/data/database/dao/ChatBlocksDao.kt

@@ -89,4 +89,13 @@ interface ChatBlocksDao {
         """
     )
     fun clearChatBlocksForUser(pattern: String)
+
+    @Query(
+        """
+        DELETE FROM ChatBlocks
+        WHERE internalConversationId = :internalConversationId
+        AND oldestMessageId < :messageId
+        """
+    )
+    fun deleteChatBlocksOlderThan(internalConversationId: String, messageId: Long)
 }

+ 9 - 0
app/src/main/java/com/nextcloud/talk/data/database/dao/ChatMessagesDao.kt

@@ -131,4 +131,13 @@ interface ChatMessagesDao {
         """
     )
     fun clearAllMessagesForUser(pattern: String)
+
+    @Query(
+        """
+        DELETE FROM chatmessages
+        WHERE internalConversationId = :internalConversationId 
+        AND id < :messageId
+        """
+    )
+    fun deleteMessagesOlderThan(internalConversationId: String, messageId: Long)
 }