Skip to content

Commit

Permalink
refactor: Reorganize Message.initLocalValues() parameters
Browse files Browse the repository at this point in the history
  • Loading branch information
KevinBoulongne committed Mar 11, 2025
1 parent 3b3933f commit eaa2a0b
Show file tree
Hide file tree
Showing 4 changed files with 45 additions and 49 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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.*
Expand Down Expand Up @@ -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
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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)
Expand Down Expand Up @@ -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,
)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -244,27 +244,30 @@ class Message : RealmObject {
}

fun initLocalValues(
messageInitialState: MessageInitialState,
latestCalendarEventResponse: CalendarEventResponse? = null,
messageIds: RealmSet<String>? = null,
swissTransferFiles: RealmList<SwissTransferFile> = realmListOf(),
date: RealmInstant,
isFullyDownloaded: Boolean,
isTrashed: Boolean,
messageIds: RealmSet<String>,
draftLocalUuid: String?,
isFromSearch: Boolean,
isDeletedOnApi: Boolean,
latestCalendarEventResponse: CalendarEventResponse?,
swissTransferFiles: RealmList<SwissTransferFile>,
) {

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.
Expand Down Expand Up @@ -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
}

0 comments on commit eaa2a0b

Please sign in to comment.