Skip to content

Commit 36b7aa9

Browse files
authored
Merge pull request #1896 from Infomaniak/fix-calendar-event-rule
Fix calendar event canceled detection
2 parents 0e29e22 + 7f12365 commit 36b7aa9

File tree

4 files changed

+20
-9
lines changed

4 files changed

+20
-9
lines changed

app/src/main/java/com/infomaniak/mail/data/cache/RealmDatabase.kt

+1-1
Original file line numberDiff line numberDiff line change
@@ -162,7 +162,7 @@ object RealmDatabase {
162162
//region Configurations versions
163163
const val USER_INFO_SCHEMA_VERSION = 1L
164164
const val MAILBOX_INFO_SCHEMA_VERSION = 5L
165-
const val MAILBOX_CONTENT_SCHEMA_VERSION = 12L
165+
const val MAILBOX_CONTENT_SCHEMA_VERSION = 13L
166166
//endregion
167167

168168
//region Configurations names

app/src/main/java/com/infomaniak/mail/data/models/calendar/CalendarEvent.kt

+13
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919

2020
package com.infomaniak.mail.data.models.calendar
2121

22+
import com.infomaniak.lib.core.utils.Utils
2223
import com.infomaniak.mail.data.api.CalendarRealmInstantSerializer
2324
import com.infomaniak.mail.utils.extensions.toRealmInstant
2425
import io.realm.kotlin.ext.realmListOf
@@ -46,8 +47,12 @@ class CalendarEvent() : EmbeddedRealmObject {
4647
var start: RealmInstant = Date(0).toRealmInstant()
4748
var end: RealmInstant = Date(0).toRealmInstant()
4849
var attendees: RealmList<Attendee> = realmListOf()
50+
@SerialName("status")
51+
private var _status: String? = null
4952
//endregion
5053

54+
val status: CalendarEventStatus? get() = Utils.enumValueOfOrNull<CalendarEventStatus>(_status)
55+
5156
constructor(
5257
id: Int,
5358
type: String,
@@ -76,6 +81,7 @@ class CalendarEvent() : EmbeddedRealmObject {
7681
if (location != other.location) return false
7782
if (isFullDay != other.isFullDay) return false
7883
if (start != other.start) return false
84+
if (_status != other._status) return false
7985

8086
return end == other.end
8187
}
@@ -97,7 +103,14 @@ class CalendarEvent() : EmbeddedRealmObject {
97103
result = 31 * result + start.hashCode()
98104
result = 31 * result + end.hashCode()
99105
result = 31 * result + attendees.hashCode()
106+
result = 31 * result + _status.hashCode()
100107

101108
return result
102109
}
110+
111+
enum class CalendarEventStatus(val apiValue: String) {
112+
CONFIRMED("CONFIRMED"),
113+
TENTATIVE("TENTATIVE"),
114+
CANCELLED("CANCELLED"),
115+
}
103116
}

app/src/main/java/com/infomaniak/mail/data/models/calendar/CalendarEventResponse.kt

+2-6
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
package com.infomaniak.mail.data.models.calendar
1919

2020
import com.infomaniak.lib.core.utils.Utils
21+
import com.infomaniak.mail.data.models.calendar.CalendarEvent.CalendarEventStatus
2122
import com.infomaniak.mail.utils.extensions.isUserIn
2223
import io.realm.kotlin.types.EmbeddedRealmObject
2324
import kotlinx.serialization.SerialName
@@ -39,12 +40,10 @@ class CalendarEventResponse() : EmbeddedRealmObject {
3940

4041
constructor(
4142
userStoredEvent: CalendarEvent?,
42-
isUserStoredEventDeleted: Boolean,
4343
attachmentEvent: CalendarEvent?,
4444
attachmentEventMethod: String?,
4545
) : this() {
4646
this.userStoredEvent = userStoredEvent
47-
this.isUserStoredEventDeleted = isUserStoredEventDeleted
4847
this.attachmentEvent = attachmentEvent
4948
this._attachmentEventMethod = attachmentEventMethod
5049
}
@@ -54,7 +53,7 @@ class CalendarEventResponse() : EmbeddedRealmObject {
5453

5554
val calendarEvent get() = userStoredEvent ?: attachmentEvent
5655

57-
val isCanceled get() = isUserStoredEventDeleted || attachmentEventMethod == AttachmentEventMethod.CANCEL
56+
val isCanceled get() = calendarEvent?.status == CalendarEventStatus.CANCELLED
5857

5958
fun isReplyAuthorized(): Boolean {
6059
return (attachmentEventMethod == null || attachmentEventMethod == AttachmentEventMethod.REQUEST)
@@ -69,7 +68,6 @@ class CalendarEventResponse() : EmbeddedRealmObject {
6968
fun everythingButAttendeesIsTheSame(other: CalendarEventResponse?): Boolean {
7069
if (other == null) return false
7170

72-
if (isUserStoredEventDeleted != other.isUserStoredEventDeleted) return false
7371
if (_attachmentEventMethod != other._attachmentEventMethod) return false
7472

7573
val c1 = calendarEvent
@@ -88,15 +86,13 @@ class CalendarEventResponse() : EmbeddedRealmObject {
8886
other as CalendarEventResponse
8987

9088
if (userStoredEvent != other.userStoredEvent) return false
91-
if (isUserStoredEventDeleted != other.isUserStoredEventDeleted) return false
9289
if (attachmentEvent != other.attachmentEvent) return false
9390

9491
return _attachmentEventMethod == other._attachmentEventMethod
9592
}
9693

9794
override fun hashCode(): Int {
9895
var result = userStoredEvent?.hashCode() ?: 0
99-
result = 31 * result + isUserStoredEventDeleted.hashCode()
10096
result = 31 * result + (attachmentEvent?.hashCode() ?: 0)
10197
result = 31 * result + (_attachmentEventMethod?.hashCode() ?: 0)
10298

app/src/test/java/com/infomaniak/mail/CalendarEventResponseTest.kt

+4-2
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ import com.infomaniak.mail.data.models.calendar.Attendee
2121
import com.infomaniak.mail.data.models.calendar.Attendee.AttendanceState
2222
import com.infomaniak.mail.data.models.calendar.CalendarEvent
2323
import com.infomaniak.mail.data.models.calendar.CalendarEventResponse
24+
import com.infomaniak.mail.data.models.calendar.CalendarEventResponse.AttachmentEventMethod
2425
import com.infomaniak.mail.data.models.message.Body
2526
import com.infomaniak.mail.data.models.message.Message
2627
import com.infomaniak.mail.ui.main.thread.ThreadAdapter
@@ -141,10 +142,11 @@ class CalendarEventResponseTest {
141142

142143
private fun getBasicCalendarEventResponse(
143144
userStoredEvent: CalendarEvent,
144-
isUserStoredEventDeleted: Boolean,
145+
hasCanceledEventMethod: Boolean,
145146
): CalendarEventResponse {
146147
val attachmentEvent = getBasicCalendarEvent(AttendanceState.NEEDS_ACTION)
147-
return CalendarEventResponse(userStoredEvent, isUserStoredEventDeleted, attachmentEvent, "REQUEST")
148+
val method = if (hasCanceledEventMethod) AttachmentEventMethod.CANCEL.name else AttachmentEventMethod.REQUEST.name
149+
return CalendarEventResponse(userStoredEvent, attachmentEvent, method)
148150
}
149151

150152
companion object {

0 commit comments

Comments
 (0)