From b1042da0b59be3e3f1cccd34c990f11e7d759374 Mon Sep 17 00:00:00 2001 From: Gibran Chevalley Date: Wed, 5 Mar 2025 15:02:56 +0100 Subject: [PATCH] feat: Keep the logic of master of simply reading message.threads to get the list of impacted threads --- .../mailboxContent/CustomRefreshStrategies.kt | 4 +-- .../cache/mailboxContent/RefreshController.kt | 4 ++- .../cache/mailboxContent/RefreshStrategies.kt | 27 +++++-------------- 3 files changed, 10 insertions(+), 25 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 f02f8f9f77..aed4bdd8f9 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 @@ -60,14 +60,12 @@ val snoozeRefreshStrategy = object : DefaultRefreshStrategy { context: Context, mailbox: Mailbox, realm: MutableRealm, - ): Collection { + ) { managedMessage.apply { snoozeState = null snoozeEndDate = null snoozeAction = null } - - return managedMessage.threads } override fun addFolderToImpactedFolders(folderId: String, impactedFolders: ImpactedFolders) { 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 1f9547cf76..2a7718403f 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 @@ -453,7 +453,9 @@ class RefreshController @Inject constructor( scope.ensureActive() val message = currentFolderRefreshStrategy.getMessageFromShortUid(shortUid, folderId, realm = this) ?: return@forEach - threads += currentFolderRefreshStrategy.processDeletedMessage(scope, message, appContext, mailbox, realm = this) + threads += message.threads + + currentFolderRefreshStrategy.processDeletedMessage(scope, message, appContext, mailbox, realm = this) } val impactedFolders = ImpactedFolders() 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 b6965fd667..19ec46e1b3 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 @@ -25,7 +25,6 @@ import com.infomaniak.mail.data.models.thread.Thread import io.realm.kotlin.MutableRealm import io.realm.kotlin.TypedRealm import kotlinx.coroutines.CoroutineScope -import kotlinx.coroutines.ensureActive interface RefreshStrategy { fun queryFolderThreads(folderId: String, realm: TypedRealm): List @@ -34,20 +33,18 @@ interface RefreshStrategy { fun getMessageFromShortUid(shortUid: String, folderId: String, realm: TypedRealm): Message? - /** - * @return The list of impacted threads that have changed and need to be recomputed. The list of impacted threads will also be - * used to determine what folders need to have their unread count updated. If an extra folder needs its unread count updated - * but no thread has that extra folder as [Thread.folderId], you can define the extra folder you want inside - * [addFolderToImpactedFolders] as they will be inserted inside the list of impacted folders. - */ fun processDeletedMessage( scope: CoroutineScope, managedMessage: Message, context: Context, mailbox: Mailbox, realm: MutableRealm, - ): Collection + ) + /** + * If an extra folder needs its unread count updated but no thread has that extra folder as [Thread.folderId], you can add the + * extra folder inside this method as they will be inserted inside the list of impacted folders. + */ fun addFolderToImpactedFolders(folderId: String, impactedFolders: ImpactedFolders) fun processDeletedThread(thread: Thread, realm: MutableRealm) fun shouldQueryFolderThreadsOnDeletedUid(): Boolean @@ -71,19 +68,7 @@ interface DefaultRefreshStrategy : RefreshStrategy { context: Context, mailbox: Mailbox, realm: MutableRealm, - ): Collection = buildSet { - /** - * This list is reversed because we'll delete items while looping over it. - * Doing so for managed Realm objects will lively update the list we're iterating through, making us skip the next item. - * Looping in reverse enables us to not skip any item. - */ - managedMessage.threads.asReversed().forEach { thread -> - scope.ensureActive() - - val isSuccess = thread.messages.remove(managedMessage) - if (isSuccess) add(thread) - } - + ) { MessageController.deleteMessage(context, mailbox, managedMessage, realm) }