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 492fbbc7ce..014864fb77 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 @@ -21,7 +21,6 @@ import android.content.Context import com.infomaniak.mail.data.models.Folder import com.infomaniak.mail.data.models.mailbox.Mailbox import com.infomaniak.mail.data.models.message.Message -import com.infomaniak.mail.data.models.message.Message.MessageInitialState import com.infomaniak.mail.data.models.thread.Thread import io.realm.kotlin.MutableRealm import io.realm.kotlin.TypedRealm @@ -92,14 +91,14 @@ val snoozeRefreshStrategy = object : DefaultRefreshStrategy { MessageController.getMessage(remoteMessage.uid, realm)?.let { localMessage -> remoteMessage.initLocalValues( - messageInitialState = MessageInitialState( - isFullyDownloaded = localMessage.isFullyDownloaded(), - isTrashed = localMessage.isTrashed, - isFromSearch = localMessage.isFromSearch, - draftLocalUuid = localMessage.draftLocalUuid, - ), + isFullyDownloaded = localMessage.isFullyDownloaded(), + isTrashed = localMessage.isTrashed, messageIds = localMessage.messageIds, + draftLocalUuid = localMessage.draftLocalUuid, + isFromSearch = localMessage.isFromSearch, + isDeletedOnApi = localMessage.isDeletedOnApi, latestCalendarEventResponse = localMessage.latestCalendarEventResponse, + swissTransferFiles = localMessage.swissTransferFiles, ) remoteMessage.keepHeavyData(localMessage) } 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 ee96ed0d53..0627723097 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 @@ -31,7 +31,6 @@ import com.infomaniak.mail.data.models.getMessages.ActivitiesResult.MessageFlags import com.infomaniak.mail.data.models.getMessages.NewMessagesResult import com.infomaniak.mail.data.models.mailbox.Mailbox import com.infomaniak.mail.data.models.message.Message -import com.infomaniak.mail.data.models.message.Message.MessageInitialState import com.infomaniak.mail.data.models.thread.Thread import com.infomaniak.mail.utils.ApiErrorException import com.infomaniak.mail.utils.ErrorCode @@ -45,6 +44,7 @@ import io.realm.kotlin.MutableRealm import io.realm.kotlin.Realm import io.realm.kotlin.TypedRealm import io.realm.kotlin.ext.copyFromRealm +import io.realm.kotlin.ext.realmListOf import io.realm.kotlin.ext.toRealmList import io.sentry.Sentry import kotlinx.coroutines.* @@ -531,12 +531,14 @@ class RefreshController @Inject constructor( private fun initMessageLocalValues(remoteMessage: Message, folder: Folder) { remoteMessage.initLocalValues( - MessageInitialState( - isFullyDownloaded = false, - isTrashed = folder.role == FolderRole.TRASH, - isFromSearch = false, - draftLocalUuid = null, - ), + isFullyDownloaded = false, + isTrashed = folder.role == FolderRole.TRASH, + messageIds = remoteMessage.computeMessageIds(), + draftLocalUuid = null, + isFromSearch = false, + isDeletedOnApi = false, + latestCalendarEventResponse = null, + swissTransferFiles = realmListOf(), ) } //endregion diff --git a/app/src/main/java/com/infomaniak/mail/data/cache/mailboxContent/ThreadController.kt b/app/src/main/java/com/infomaniak/mail/data/cache/mailboxContent/ThreadController.kt index 1548889339..f19bf23700 100644 --- a/app/src/main/java/com/infomaniak/mail/data/cache/mailboxContent/ThreadController.kt +++ b/app/src/main/java/com/infomaniak/mail/data/cache/mailboxContent/ThreadController.kt @@ -28,7 +28,6 @@ import com.infomaniak.mail.data.models.Folder.FolderSort import com.infomaniak.mail.data.models.SnoozeState import com.infomaniak.mail.data.models.SwissTransferContainer import com.infomaniak.mail.data.models.message.Message -import com.infomaniak.mail.data.models.message.Message.MessageInitialState import com.infomaniak.mail.data.models.thread.Thread import com.infomaniak.mail.data.models.thread.Thread.ThreadFilter import com.infomaniak.mail.di.IoDispatcher @@ -108,13 +107,14 @@ class ThreadController @Inject constructor( // The Search only returns Messages from TRASH if we explicitly selected this folder, // which is the reason why we can compute the `isTrashed` value so loosely. remoteMessage.initLocalValues( - messageInitialState = MessageInitialState( - isFullyDownloaded = localMessage?.isFullyDownloaded() ?: false, - isTrashed = filterFolder?.role == FolderRole.TRASH, - isFromSearch = localMessage == null, - draftLocalUuid = localMessage?.draftLocalUuid, - ), + isFullyDownloaded = localMessage?.isFullyDownloaded() ?: false, + isTrashed = filterFolder?.role == FolderRole.TRASH, + messageIds = localMessage?.messageIds ?: remoteMessage.computeMessageIds(), + draftLocalUuid = localMessage?.draftLocalUuid, + isFromSearch = localMessage == null, + isDeletedOnApi = false, latestCalendarEventResponse = localMessage?.latestCalendarEventResponse, + swissTransferFiles = localMessage?.swissTransferFiles ?: realmListOf(), ) localMessage?.let(remoteMessage::keepHeavyData) @@ -346,14 +346,13 @@ class ThreadController @Inject constructor( } ?: realmListOf() remoteMessage.initLocalValues( - MessageInitialState( - isFullyDownloaded = true, - isTrashed = localMessage.isTrashed, - isFromSearch = localMessage.isFromSearch, - draftLocalUuid = remoteMessage.getDraftLocalUuid(realm), - ), - latestCalendarEventResponse = localMessage.latestCalendarEventResponse, + isFullyDownloaded = true, + isTrashed = localMessage.isTrashed, messageIds = localMessage.messageIds, + draftLocalUuid = remoteMessage.getDraftLocalUuid(realm), + isFromSearch = localMessage.isFromSearch, + isDeletedOnApi = false, + latestCalendarEventResponse = localMessage.latestCalendarEventResponse, swissTransferFiles = swissTransferFiles, ) diff --git a/app/src/main/java/com/infomaniak/mail/data/models/message/Message.kt b/app/src/main/java/com/infomaniak/mail/data/models/message/Message.kt index 50bfc19976..c89cf2bce3 100644 --- a/app/src/main/java/com/infomaniak/mail/data/models/message/Message.kt +++ b/app/src/main/java/com/infomaniak/mail/data/models/message/Message.kt @@ -244,27 +244,30 @@ class Message : RealmObject { } fun initLocalValues( - messageInitialState: MessageInitialState, - latestCalendarEventResponse: CalendarEventResponse? = null, - messageIds: RealmSet? = null, - swissTransferFiles: RealmList = realmListOf(), + date: RealmInstant, + isFullyDownloaded: Boolean, + isTrashed: Boolean, + messageIds: RealmSet, + draftLocalUuid: String?, + isFromSearch: Boolean, + isDeletedOnApi: Boolean, + latestCalendarEventResponse: CalendarEventResponse?, + swissTransferFiles: RealmList, ) { - - this._isFullyDownloaded = messageInitialState.isFullyDownloaded - this.isTrashed = messageInitialState.isTrashed - messageInitialState.draftLocalUuid?.let { this.draftLocalUuid = it } - this.isFromSearch = messageInitialState.isFromSearch - this.messageIds = messageIds ?: computeMessageIds() + this._isFullyDownloaded = isFullyDownloaded + this.isTrashed = isTrashed + this.messageIds = messageIds + this.draftLocalUuid = draftLocalUuid + this.isFromSearch = isFromSearch + this.shortUid = uid.toShortUid() + this.isDeletedOnApi = isDeletedOnApi this.latestCalendarEventResponse = latestCalendarEventResponse this.swissTransferFiles.replaceContent(swissTransferFiles) - - shortUid = uid.toShortUid() - hasAttachable = hasAttachments || swissTransferUuid != null + this.hasAttachable = hasAttachments || swissTransferUuid != null } fun keepHeavyData(message: Message) { attachments.replaceContent(message.attachments.copyFromRealm()) - swissTransferFiles.replaceContent(message.swissTransferFiles.copyFromRealm()) body = message.body?.copyFromRealm() // TODO: Those are unused for now, but if we ever want to use them, we need to save them here. @@ -368,12 +371,5 @@ class Message : RealmObject { override fun hashCode(): Int = uid.hashCode() - data class MessageInitialState( - val isFullyDownloaded: Boolean, - val isTrashed: Boolean, - val isFromSearch: Boolean, - val draftLocalUuid: String?, - ) - companion object }