diff --git a/app/src/main/java/com/infomaniak/mail/data/cache/mailboxContent/MessageController.kt b/app/src/main/java/com/infomaniak/mail/data/cache/mailboxContent/MessageController.kt index cbdfec54da..6c76f8fd83 100644 --- a/app/src/main/java/com/infomaniak/mail/data/cache/mailboxContent/MessageController.kt +++ b/app/src/main/java/com/infomaniak/mail/data/cache/mailboxContent/MessageController.kt @@ -27,6 +27,7 @@ import com.infomaniak.mail.data.models.thread.Thread import com.infomaniak.mail.data.models.thread.Thread.ThreadFilter import com.infomaniak.mail.utils.AccountUtils import com.infomaniak.mail.utils.LocalStorageUtils.deleteDraftUploadDir +import com.infomaniak.mail.utils.extensions.getStartAndEndOfPlusEmail import io.realm.kotlin.MutableRealm import io.realm.kotlin.Realm import io.realm.kotlin.TypedRealm @@ -59,10 +60,17 @@ class MessageController @Inject constructor(private val mailboxContentRealm: Rea fun getLastMessageToExecuteAction(thread: Thread): Message = with(thread) { val isNotScheduledDraft = "${Message::isScheduledDraft.name} == false" - val isNotFromMe = "SUBQUERY(${Message::from.name}, \$recipient, " + + + val isNotFromRealMe = "SUBQUERY(${Message::from.name}, \$recipient, " + "\$recipient.${Recipient::email.name} != '${AccountUtils.currentMailboxEmail}').@count > 0" - return messages.query("$isNotDraft AND $isNotScheduledDraft AND $isNotFromMe").find().lastOrNull() + val (start, end) = AccountUtils.currentMailboxEmail.getStartAndEndOfPlusEmail() + val isNotFromPlusMe = "SUBQUERY(${Message::from.name}, \$recipient," + + " \$recipient.${Recipient::email.name} BEGINSWITH '${start}'" + + " AND \$recipient.${Recipient::email.name} ENDSWITH '${end}'" + + ").@count < 1" + + return messages.query("$isNotDraft AND $isNotScheduledDraft AND $isNotFromRealMe AND $isNotFromPlusMe").find().lastOrNull() ?: messages.query("$isNotDraft AND $isNotScheduledDraft").find().lastOrNull() ?: messages.query(isNotScheduledDraft).find().lastOrNull() ?: messages.last() diff --git a/app/src/main/java/com/infomaniak/mail/data/models/correspondent/Correspondent.kt b/app/src/main/java/com/infomaniak/mail/data/models/correspondent/Correspondent.kt index c77a270dc6..1cba83f6a2 100644 --- a/app/src/main/java/com/infomaniak/mail/data/models/correspondent/Correspondent.kt +++ b/app/src/main/java/com/infomaniak/mail/data/models/correspondent/Correspondent.kt @@ -22,6 +22,7 @@ import android.os.Parcelable import com.infomaniak.lib.core.utils.firstOrEmpty import com.infomaniak.mail.R import com.infomaniak.mail.utils.AccountUtils +import com.infomaniak.mail.utils.extensions.getStartAndEndOfPlusEmail import io.sentry.Sentry interface Correspondent : Parcelable { @@ -30,7 +31,17 @@ interface Correspondent : Parcelable { val initials: String - fun isMe(): Boolean = AccountUtils.currentMailboxEmail?.lowercase() == email.lowercase() + fun isMe(): Boolean { + val userEmail = AccountUtils.currentMailboxEmail?.lowercase() + val correspondentEmail = email.lowercase() + + val isRealMe = userEmail == correspondentEmail + + val (start, end) = userEmail.getStartAndEndOfPlusEmail() + val isPlusMe = correspondentEmail.startsWith(start) && correspondentEmail.endsWith(end) + + return isRealMe || isPlusMe + } fun shouldDisplayUserAvatar(): Boolean = isMe() && email.lowercase() == AccountUtils.currentUser?.email?.lowercase() diff --git a/app/src/main/java/com/infomaniak/mail/ui/MainViewModel.kt b/app/src/main/java/com/infomaniak/mail/ui/MainViewModel.kt index eac639afde..f3ea247589 100644 --- a/app/src/main/java/com/infomaniak/mail/ui/MainViewModel.kt +++ b/app/src/main/java/com/infomaniak/mail/ui/MainViewModel.kt @@ -1150,7 +1150,7 @@ class MainViewModel @Inject constructor( message != null -> { message.folder.role } - threads?.firstOrNull()?.folder?.id == FolderController.SEARCH_FOLDER_ID -> { + threads?.firstOrNull()?.folderId == FolderController.SEARCH_FOLDER_ID -> { folderController.getFolder(threads.first().folderId)?.role } else -> { diff --git a/app/src/main/java/com/infomaniak/mail/utils/extensions/Extensions.kt b/app/src/main/java/com/infomaniak/mail/utils/extensions/Extensions.kt index aa8a8a83ba..ce0b9af341 100644 --- a/app/src/main/java/com/infomaniak/mail/utils/extensions/Extensions.kt +++ b/app/src/main/java/com/infomaniak/mail/utils/extensions/Extensions.kt @@ -143,6 +143,13 @@ fun String.removeLineBreaksFromHtml(): Document = jsoupParseWithLog(replace("\r" fun String.htmlToText(): String = removeLineBreaksFromHtml().wholeText() +fun String?.getStartAndEndOfPlusEmail(): Pair { + val splittedEmail = this?.split("@") + val fromStartToPlus = splittedEmail?.first() + "+" + val fromArobaseToEnd = "@" + splittedEmail?.last() + return fromStartToPlus to fromArobaseToEnd +} + //region Date fun RealmInstant.toDate(): Date = Date(epochSeconds * 1_000L + nanosecondsOfSecond / 1_000L)