Skip to content

Commit 96350b0

Browse files
authored
Merge pull request #5813 from vector-im/feature/bma/query
Improve code in file TimelineEventEntityQueries.kt
2 parents 3ed6a90 + dbc558a commit 96350b0

File tree

4 files changed

+35
-18
lines changed

4 files changed

+35
-18
lines changed

matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/helper/TimelineEventEntityHelper.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,10 @@ package org.matrix.android.sdk.internal.database.helper
1919
import io.realm.Realm
2020
import org.matrix.android.sdk.internal.database.model.TimelineEventEntity
2121
import org.matrix.android.sdk.internal.database.model.TimelineEventEntityFields
22+
import org.matrix.android.sdk.internal.database.query.where
2223

2324
internal fun TimelineEventEntity.Companion.nextId(realm: Realm): Long {
24-
val currentIdNum = realm.where(TimelineEventEntity::class.java).max(TimelineEventEntityFields.LOCAL_ID)
25+
val currentIdNum = TimelineEventEntity.where(realm).max(TimelineEventEntityFields.LOCAL_ID)
2526
return if (currentIdNum == null) {
2627
1
2728
} else {

matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/query/TimelineEventEntityQueries.kt

Lines changed: 29 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -29,26 +29,35 @@ import org.matrix.android.sdk.internal.database.model.RoomEntity
2929
import org.matrix.android.sdk.internal.database.model.TimelineEventEntity
3030
import org.matrix.android.sdk.internal.database.model.TimelineEventEntityFields
3131

32-
internal fun TimelineEventEntity.Companion.where(realm: Realm, roomId: String, eventId: String): RealmQuery<TimelineEventEntity> {
33-
return realm.where<TimelineEventEntity>()
32+
internal fun TimelineEventEntity.Companion.where(realm: Realm): RealmQuery<TimelineEventEntity> {
33+
return realm.where()
34+
}
35+
36+
internal fun TimelineEventEntity.Companion.where(realm: Realm,
37+
roomId: String,
38+
eventId: String): RealmQuery<TimelineEventEntity> {
39+
return where(realm)
3440
.equalTo(TimelineEventEntityFields.ROOM_ID, roomId)
3541
.equalTo(TimelineEventEntityFields.EVENT_ID, eventId)
3642
}
3743

38-
internal fun TimelineEventEntity.Companion.where(realm: Realm, roomId: String, eventIds: List<String>): RealmQuery<TimelineEventEntity> {
39-
return realm.where<TimelineEventEntity>()
44+
internal fun TimelineEventEntity.Companion.where(realm: Realm,
45+
roomId: String,
46+
eventIds: List<String>): RealmQuery<TimelineEventEntity> {
47+
return where(realm)
4048
.equalTo(TimelineEventEntityFields.ROOM_ID, roomId)
4149
.`in`(TimelineEventEntityFields.EVENT_ID, eventIds.toTypedArray())
4250
}
4351

4452
internal fun TimelineEventEntity.Companion.whereRoomId(realm: Realm,
4553
roomId: String): RealmQuery<TimelineEventEntity> {
46-
return realm.where<TimelineEventEntity>()
54+
return where(realm)
4755
.equalTo(TimelineEventEntityFields.ROOM_ID, roomId)
4856
}
4957

50-
internal fun TimelineEventEntity.Companion.findWithSenderMembershipEvent(realm: Realm, senderMembershipEventId: String): List<TimelineEventEntity> {
51-
return realm.where<TimelineEventEntity>()
58+
internal fun TimelineEventEntity.Companion.findWithSenderMembershipEvent(realm: Realm,
59+
senderMembershipEventId: String): List<TimelineEventEntity> {
60+
return where(realm)
5261
.equalTo(TimelineEventEntityFields.SENDER_MEMBERSHIP_EVENT_ID, senderMembershipEventId)
5362
.findAll()
5463
}
@@ -110,12 +119,12 @@ internal fun RealmQuery<TimelineEventEntity>.filterTypes(filterTypes: List<Strin
110119
return if (filterTypes.isEmpty()) {
111120
this
112121
} else {
113-
this.`in`(TimelineEventEntityFields.ROOT.TYPE, filterTypes.toTypedArray())
122+
`in`(TimelineEventEntityFields.ROOT.TYPE, filterTypes.toTypedArray())
114123
}
115124
}
116125

117126
internal fun RealmList<TimelineEventEntity>.find(eventId: String): TimelineEventEntity? {
118-
return this.where()
127+
return where()
119128
.equalTo(TimelineEventEntityFields.EVENT_ID, eventId)
120129
.findFirst()
121130
}
@@ -132,3 +141,14 @@ internal fun RealmQuery<TimelineEventEntity>.filterSendStates(sendStates: List<S
132141
val sendStatesStr = sendStates.map { it.name }.toTypedArray()
133142
return `in`(TimelineEventEntityFields.ROOT.SEND_STATE_STR, sendStatesStr)
134143
}
144+
145+
/**
146+
* Find all TimelineEventEntity items where sender is in senderIds collection, excluding state events
147+
*/
148+
internal fun TimelineEventEntity.Companion.findAllFrom(realm: Realm,
149+
senderIds: Collection<String>): RealmResults<TimelineEventEntity> {
150+
return where(realm)
151+
.`in`(TimelineEventEntityFields.ROOT.SENDER, senderIds.toTypedArray())
152+
.isNull(TimelineEventEntityFields.ROOT.STATE_KEY)
153+
.findAll()
154+
}

matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/timeline/TimelineEventDataSource.kt

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@ package org.matrix.android.sdk.internal.session.room.timeline
1919
import androidx.lifecycle.LiveData
2020
import com.zhuinden.monarchy.Monarchy
2121
import io.realm.Sort
22-
import io.realm.kotlin.where
2322
import org.matrix.android.sdk.api.session.events.model.isImageMessage
2423
import org.matrix.android.sdk.api.session.events.model.isVideoMessage
2524
import org.matrix.android.sdk.api.session.room.timeline.TimelineEvent
@@ -29,6 +28,7 @@ import org.matrix.android.sdk.internal.database.mapper.TimelineEventMapper
2928
import org.matrix.android.sdk.internal.database.model.TimelineEventEntity
3029
import org.matrix.android.sdk.internal.database.model.TimelineEventEntityFields
3130
import org.matrix.android.sdk.internal.database.query.where
31+
import org.matrix.android.sdk.internal.database.query.whereRoomId
3232
import org.matrix.android.sdk.internal.di.SessionDatabase
3333
import org.matrix.android.sdk.internal.task.TaskExecutor
3434
import javax.inject.Inject
@@ -53,8 +53,7 @@ internal class TimelineEventDataSource @Inject constructor(private val realmSess
5353
fun getAttachmentMessages(roomId: String): List<TimelineEvent> {
5454
// TODO pretty bad query.. maybe we should denormalize clear type in base?
5555
return realmSessionProvider.withRealm { realm ->
56-
realm.where<TimelineEventEntity>()
57-
.equalTo(TimelineEventEntityFields.ROOM_ID, roomId)
56+
TimelineEventEntity.whereRoomId(realm, roomId)
5857
.sort(TimelineEventEntityFields.DISPLAY_INDEX, Sort.ASCENDING)
5958
.findAll()
6059
?.mapNotNull { timelineEventMapper.map(it).takeIf { it.root.isImageMessage() || it.root.isVideoMessage() } }

matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/handler/UserAccountDataSyncHandler.kt

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -43,10 +43,10 @@ import org.matrix.android.sdk.internal.database.model.PushRulesEntity
4343
import org.matrix.android.sdk.internal.database.model.RoomSummaryEntity
4444
import org.matrix.android.sdk.internal.database.model.RoomSummaryEntityFields
4545
import org.matrix.android.sdk.internal.database.model.TimelineEventEntity
46-
import org.matrix.android.sdk.internal.database.model.TimelineEventEntityFields
4746
import org.matrix.android.sdk.internal.database.model.UserAccountDataEntity
4847
import org.matrix.android.sdk.internal.database.model.UserAccountDataEntityFields
4948
import org.matrix.android.sdk.internal.database.model.deleteOnCascade
49+
import org.matrix.android.sdk.internal.database.query.findAllFrom
5050
import org.matrix.android.sdk.internal.database.query.getDirectRooms
5151
import org.matrix.android.sdk.internal.database.query.getOrCreate
5252
import org.matrix.android.sdk.internal.database.query.where
@@ -206,10 +206,7 @@ internal class UserAccountDataSyncHandler @Inject constructor(
206206
// See https://spec.matrix.org/latest/client-server-api/#client-behaviour-22 :
207207
// "Once ignored, the client will no longer receive events sent by that user, with the exception of state events"
208208
// So just delete all non-state events from our local storage.
209-
realm.where(TimelineEventEntity::class.java)
210-
.`in`(TimelineEventEntityFields.ROOT.SENDER, userIds.toTypedArray())
211-
.isNull(TimelineEventEntityFields.ROOT.STATE_KEY)
212-
.findAll()
209+
TimelineEventEntity.findAllFrom(realm, userIds)
213210
.also { Timber.d("Deleting ${it.size} TimelineEventEntity from ignored users") }
214211
.forEach {
215212
it.deleteOnCascade(true)

0 commit comments

Comments
 (0)