Skip to content

Commit 4226296

Browse files
committed
Get Event from cache without using a Room
1 parent e7f3cf6 commit 4226296

File tree

4 files changed

+35
-5
lines changed

4 files changed

+35
-5
lines changed

matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/events/EventService.kt

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,4 +28,12 @@ interface EventService {
2828
roomId: String,
2929
eventId: String
3030
): Event
31+
32+
/**
33+
* Get an Event from cache. Return null if not found.
34+
*/
35+
fun getEventFromCache(
36+
roomId: String,
37+
eventId: String
38+
): Event?
3139
}

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

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,12 @@ internal fun EventEntity.Companion.where(realm: Realm, eventId: String): RealmQu
4747
.equalTo(EventEntityFields.EVENT_ID, eventId)
4848
}
4949

50+
internal fun EventEntity.Companion.where(realm: Realm, roomId: String, eventId: String): RealmQuery<EventEntity> {
51+
return realm.where<EventEntity>()
52+
.equalTo(EventEntityFields.ROOM_ID, roomId)
53+
.equalTo(EventEntityFields.EVENT_ID, eventId)
54+
}
55+
5056
internal fun EventEntity.Companion.whereRoomId(realm: Realm, roomId: String): RealmQuery<EventEntity> {
5157
return realm.where<EventEntity>()
5258
.equalTo(EventEntityFields.ROOM_ID, roomId)

matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/events/DefaultEventService.kt

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,13 +18,18 @@ package org.matrix.android.sdk.internal.session.events
1818

1919
import org.matrix.android.sdk.api.session.events.EventService
2020
import org.matrix.android.sdk.api.session.events.model.Event
21+
import org.matrix.android.sdk.internal.database.RealmSessionProvider
22+
import org.matrix.android.sdk.internal.database.mapper.asDomain
23+
import org.matrix.android.sdk.internal.database.model.EventEntity
24+
import org.matrix.android.sdk.internal.database.query.where
2125
import org.matrix.android.sdk.internal.session.call.CallEventProcessor
2226
import org.matrix.android.sdk.internal.session.room.timeline.GetEventTask
2327
import javax.inject.Inject
2428

2529
internal class DefaultEventService @Inject constructor(
2630
private val getEventTask: GetEventTask,
27-
private val callEventProcessor: CallEventProcessor
31+
private val callEventProcessor: CallEventProcessor,
32+
private val realmSessionProvider: RealmSessionProvider,
2833
) : EventService {
2934

3035
override suspend fun getEvent(roomId: String, eventId: String): Event {
@@ -36,4 +41,17 @@ internal class DefaultEventService @Inject constructor(
3641

3742
return event
3843
}
44+
45+
override fun getEventFromCache(roomId: String, eventId: String): Event? {
46+
return realmSessionProvider.withRealm { realm ->
47+
EventEntity.where(
48+
realm = realm,
49+
roomId = roomId,
50+
eventId = eventId
51+
)
52+
.findFirst()
53+
?.asDomain()
54+
55+
}
56+
}
3957
}

vector/src/main/java/im/vector/app/features/home/room/detail/timeline/factory/TimelineItemFactory.kt

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,15 +19,13 @@ package im.vector.app.features.home.room.detail.timeline.factory
1919
import im.vector.app.core.epoxy.TimelineEmptyItem
2020
import im.vector.app.core.epoxy.TimelineEmptyItem_
2121
import im.vector.app.core.epoxy.VectorEpoxyModel
22-
import im.vector.app.core.extensions.isVoiceBroadcast
2322
import im.vector.app.features.analytics.DecryptionFailureTracker
2423
import im.vector.app.features.home.room.detail.timeline.helper.TimelineEventVisibilityHelper
2524
import im.vector.app.features.voicebroadcast.VoiceBroadcastConstants
25+
import im.vector.app.features.voicebroadcast.model.isVoiceBroadcast
2626
import org.matrix.android.sdk.api.session.Session
2727
import org.matrix.android.sdk.api.session.events.model.EventType
2828
import org.matrix.android.sdk.api.session.events.model.RelationType
29-
import org.matrix.android.sdk.api.session.getRoom
30-
import org.matrix.android.sdk.api.session.room.getTimelineEvent
3129
import org.matrix.android.sdk.api.session.room.timeline.TimelineEvent
3230
import org.matrix.android.sdk.api.session.room.timeline.getRelationContent
3331
import timber.log.Timber
@@ -143,7 +141,7 @@ class TimelineItemFactory @Inject constructor(
143141
event.root.isRedacted() -> messageItemFactory.create(params)
144142
relationContent?.type == RelationType.REFERENCE -> {
145143
// Hide the decryption error for VoiceBroadcast chunks
146-
val relatedEvent = relationContent.eventId?.let { session.getRoom(event.roomId)?.getTimelineEvent(it) }
144+
val relatedEvent = relationContent.eventId?.let { session.eventService().getEventFromCache(event.roomId, it) }
147145
if (relatedEvent?.isVoiceBroadcast() != true) encryptedItemFactory.create(params) else null
148146
}
149147
else -> encryptedItemFactory.create(params)

0 commit comments

Comments
 (0)