Skip to content

Commit

Permalink
refactor: Only update Snoozed-related fields when adding already exis…
Browse files Browse the repository at this point in the history
…ting Message
  • Loading branch information
KevinBoulongne committed Mar 6, 2025
1 parent 86472b2 commit 45e5401
Show file tree
Hide file tree
Showing 3 changed files with 15 additions and 5 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -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 {}
Expand All @@ -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
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -512,7 +512,7 @@ class RefreshController @Inject constructor(

val impactedThreadsManaged = mutableSetOf<Thread>()
val addedMessagesUids = mutableListOf<Int>()
val shouldForceUpdateMessages = folder.refreshStrategy().shouldForceUpdateMessagesWhenAdded()
val refreshStrategy = folder.refreshStrategy()

remoteMessages.forEach { remoteMessage ->
scope.ensureActive()
Expand All @@ -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)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,18 +17,20 @@
*/
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<Thread>
fun shouldForceUpdateMessagesWhenAdded(): Boolean
fun updateExistingMessageWhenAdded(remoteMessage: Message, realm: MutableRealm)
}

interface DefaultRefreshStrategy : RefreshStrategy {
override fun queryFolderThreads(folderId: String, realm: TypedRealm): List<Thread> {
return ThreadController.getThreadsByFolderId(folderId, realm)
}

override fun shouldForceUpdateMessagesWhenAdded(): Boolean = false
override fun updateExistingMessageWhenAdded(remoteMessage: Message, realm: MutableRealm) = Unit
}

0 comments on commit 45e5401

Please sign in to comment.