Skip to content

Commit

Permalink
Check before trying to refresh messages for a specific mailbox if thi…
Browse files Browse the repository at this point in the history
…s one has already been open once
  • Loading branch information
tevincent committed Jul 10, 2024
1 parent 3cb77d9 commit 2fb4a33
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 3 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -57,6 +58,7 @@ class FetchMessagesManager @Inject constructor(
mailbox: Mailbox,
sentryMessageUid: String? = null,
mailboxContentRealm: Realm? = null,
mailboxFolder: Folder? = null,
) {
coroutineScope = scope

Expand All @@ -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.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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
)
}
}
}

Expand Down

0 comments on commit 2fb4a33

Please sign in to comment.