From 45e5401bbf012bc9fc28f3c22dbb3a3041383ef6 Mon Sep 17 00:00:00 2001 From: Kevin Boulongne Date: Thu, 6 Mar 2025 09:01:55 +0100 Subject: [PATCH] refactor: Only update Snoozed-related fields when adding already existing Message --- .../cache/mailboxContent/CustomRefreshStrategies.kt | 10 +++++++++- .../data/cache/mailboxContent/RefreshController.kt | 4 ++-- .../data/cache/mailboxContent/RefreshStrategies.kt | 6 ++++-- 3 files changed, 15 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/com/infomaniak/mail/data/cache/mailboxContent/CustomRefreshStrategies.kt b/app/src/main/java/com/infomaniak/mail/data/cache/mailboxContent/CustomRefreshStrategies.kt index cca950bfd2..af2a1fdc20 100644 --- a/app/src/main/java/com/infomaniak/mail/data/cache/mailboxContent/CustomRefreshStrategies.kt +++ b/app/src/main/java/com/infomaniak/mail/data/cache/mailboxContent/CustomRefreshStrategies.kt @@ -17,7 +17,9 @@ */ package com.infomaniak.mail.data.cache.mailboxContent +import com.infomaniak.mail.data.models.message.Message import com.infomaniak.mail.data.models.thread.Thread +import io.realm.kotlin.MutableRealm import io.realm.kotlin.TypedRealm val defaultRefreshStrategy = object : DefaultRefreshStrategy {} @@ -33,5 +35,11 @@ val snoozeRefreshStrategy = object : DefaultRefreshStrategy { return ThreadController.getInboxThreadsWithSnoozeFilter(withSnooze = true, realm = realm) } - override fun shouldForceUpdateMessagesWhenAdded(): Boolean = true + override fun updateExistingMessageWhenAdded(remoteMessage: Message, realm: MutableRealm) { + MessageController.updateMessage(remoteMessage.uid, realm = realm) { localMessage -> + localMessage?.snoozeState = remoteMessage.snoozeState + localMessage?.snoozeEndDate = remoteMessage.snoozeEndDate + localMessage?.snoozeAction = remoteMessage.snoozeAction + } + } } diff --git a/app/src/main/java/com/infomaniak/mail/data/cache/mailboxContent/RefreshController.kt b/app/src/main/java/com/infomaniak/mail/data/cache/mailboxContent/RefreshController.kt index d53da3c806..702364963f 100644 --- a/app/src/main/java/com/infomaniak/mail/data/cache/mailboxContent/RefreshController.kt +++ b/app/src/main/java/com/infomaniak/mail/data/cache/mailboxContent/RefreshController.kt @@ -512,7 +512,7 @@ class RefreshController @Inject constructor( val impactedThreadsManaged = mutableSetOf() val addedMessagesUids = mutableListOf() - val shouldForceUpdateMessages = folder.refreshStrategy().shouldForceUpdateMessagesWhenAdded() + val refreshStrategy = folder.refreshStrategy() remoteMessages.forEach { remoteMessage -> scope.ensureActive() @@ -521,7 +521,7 @@ class RefreshController @Inject constructor( addedMessagesUids.add(remoteMessage.shortUid) - if (shouldForceUpdateMessages) updateExistingMessage(remoteMessage) + refreshStrategy.updateExistingMessageWhenAdded(remoteMessage, realm = this) val newThread = if (isConversationMode) { val (thread, impactThreads) = handleAddedMessage(scope, remoteMessage) diff --git a/app/src/main/java/com/infomaniak/mail/data/cache/mailboxContent/RefreshStrategies.kt b/app/src/main/java/com/infomaniak/mail/data/cache/mailboxContent/RefreshStrategies.kt index 2457be8c0b..775cec73ae 100644 --- a/app/src/main/java/com/infomaniak/mail/data/cache/mailboxContent/RefreshStrategies.kt +++ b/app/src/main/java/com/infomaniak/mail/data/cache/mailboxContent/RefreshStrategies.kt @@ -17,12 +17,14 @@ */ package com.infomaniak.mail.data.cache.mailboxContent +import com.infomaniak.mail.data.models.message.Message import com.infomaniak.mail.data.models.thread.Thread +import io.realm.kotlin.MutableRealm import io.realm.kotlin.TypedRealm interface RefreshStrategy { fun queryFolderThreads(folderId: String, realm: TypedRealm): List - fun shouldForceUpdateMessagesWhenAdded(): Boolean + fun updateExistingMessageWhenAdded(remoteMessage: Message, realm: MutableRealm) } interface DefaultRefreshStrategy : RefreshStrategy { @@ -30,5 +32,5 @@ interface DefaultRefreshStrategy : RefreshStrategy { return ThreadController.getThreadsByFolderId(folderId, realm) } - override fun shouldForceUpdateMessagesWhenAdded(): Boolean = false + override fun updateExistingMessageWhenAdded(remoteMessage: Message, realm: MutableRealm) = Unit }