diff --git a/app/src/main/java/com/nextcloud/talk/chat/data/network/OfflineFirstChatRepository.kt b/app/src/main/java/com/nextcloud/talk/chat/data/network/OfflineFirstChatRepository.kt index a4a141151..e1f3fe77c 100644 --- a/app/src/main/java/com/nextcloud/talk/chat/data/network/OfflineFirstChatRepository.kt +++ b/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 "@@%" - 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 -> {} diff --git a/app/src/main/java/com/nextcloud/talk/data/database/dao/ChatBlocksDao.kt b/app/src/main/java/com/nextcloud/talk/data/database/dao/ChatBlocksDao.kt index f9efffe95..171feb228 100644 --- a/app/src/main/java/com/nextcloud/talk/data/database/dao/ChatBlocksDao.kt +++ b/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) } diff --git a/app/src/main/java/com/nextcloud/talk/data/database/dao/ChatMessagesDao.kt b/app/src/main/java/com/nextcloud/talk/data/database/dao/ChatMessagesDao.kt index bb0ab220b..6fbf61ca1 100644 --- a/app/src/main/java/com/nextcloud/talk/data/database/dao/ChatMessagesDao.kt +++ b/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) }