From 2fb4a33a9a5bb8ec37db43e8cf7d27fff34d7e5d Mon Sep 17 00:00:00 2001 From: Vincent TE Date: Wed, 10 Jul 2024 13:31:10 +0200 Subject: [PATCH] Check before trying to refresh messages for a specific mailbox if this one has already been open once --- .../mail/utils/FetchMessagesManager.kt | 4 +++- .../mail/workers/SyncMailboxesWorker.kt | 20 +++++++++++++++++-- 2 files changed, 21 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/com/infomaniak/mail/utils/FetchMessagesManager.kt b/app/src/main/java/com/infomaniak/mail/utils/FetchMessagesManager.kt index dc1753e627..4008ee0abb 100644 --- a/app/src/main/java/com/infomaniak/mail/utils/FetchMessagesManager.kt +++ b/app/src/main/java/com/infomaniak/mail/utils/FetchMessagesManager.kt @@ -28,6 +28,7 @@ import com.infomaniak.mail.data.cache.mailboxContent.MessageController import com.infomaniak.mail.data.cache.mailboxContent.RefreshController import com.infomaniak.mail.data.cache.mailboxContent.RefreshController.RefreshMode import com.infomaniak.mail.data.cache.mailboxContent.ThreadController +import com.infomaniak.mail.data.models.Folder import com.infomaniak.mail.data.models.Folder.FolderRole import com.infomaniak.mail.data.models.mailbox.Mailbox import com.infomaniak.mail.data.models.thread.Thread @@ -57,6 +58,7 @@ class FetchMessagesManager @Inject constructor( mailbox: Mailbox, sentryMessageUid: String? = null, mailboxContentRealm: Realm? = null, + mailboxFolder: Folder? = null, ) { coroutineScope = scope @@ -65,7 +67,7 @@ class FetchMessagesManager @Inject constructor( if (mailbox.notificationsIsDisabled(notificationManagerCompat)) return val realm = mailboxContentRealm ?: RealmDatabase.newMailboxContentInstance(userId, mailbox.mailboxId) - val folder = FolderController.getFolder(FolderRole.INBOX, realm) ?: run { + val folder = mailboxFolder ?: FolderController.getFolder(FolderRole.INBOX, realm) ?: run { // If we can't find the INBOX in Realm, it means the user never opened this Mailbox. // We don't want to display Notifications in this case. // We can leave safely. diff --git a/app/src/main/java/com/infomaniak/mail/workers/SyncMailboxesWorker.kt b/app/src/main/java/com/infomaniak/mail/workers/SyncMailboxesWorker.kt index f04225e8eb..70dfb7f8aa 100644 --- a/app/src/main/java/com/infomaniak/mail/workers/SyncMailboxesWorker.kt +++ b/app/src/main/java/com/infomaniak/mail/workers/SyncMailboxesWorker.kt @@ -22,7 +22,10 @@ import androidx.hilt.work.HiltWorker import androidx.work.* import androidx.work.PeriodicWorkRequest.Companion.MIN_PERIODIC_INTERVAL_MILLIS import com.infomaniak.lib.core.utils.SentryLog +import com.infomaniak.mail.data.cache.RealmDatabase +import com.infomaniak.mail.data.cache.mailboxContent.FolderController import com.infomaniak.mail.data.cache.mailboxInfo.MailboxController +import com.infomaniak.mail.data.models.Folder.FolderRole import com.infomaniak.mail.di.IoDispatcher import com.infomaniak.mail.utils.AccountUtils import com.infomaniak.mail.utils.FetchMessagesManager @@ -55,8 +58,21 @@ class SyncMailboxesWorker @AssistedInject constructor( SentryLog.d(TAG, "Work launched") AccountUtils.getAllUsersSync().forEach { user -> - mailboxController.getMailboxes(user.id).forEach { mailbox -> - fetchMessagesManager.execute(scope = this, user.id, mailbox) + val mailboxes = mailboxController.getMailboxes(user.id) + mailboxes.forEach { mailbox -> + val realm = RealmDatabase.newMailboxContentInstance(user.id, mailbox.mailboxId) + val folder = FolderController.getFolder(FolderRole.INBOX, realm) + // If Folder or Folder.cursor is null, it means we never opened that specific mailbox + // So there's no need to try to refresh this one + folder?.cursor?.let { + fetchMessagesManager.execute( + scope = this, + user.id, + mailbox, + mailboxContentRealm = realm, + mailboxFolder = folder + ) + } } }