Improve MatrixRoom.createTimeline API.

This commit is contained in:
Benoit Marty 2025-02-18 10:59:26 +01:00
parent c02436d3f0
commit e35eda0c67
15 changed files with 112 additions and 94 deletions

View file

@ -12,6 +12,7 @@ import io.element.android.libraries.di.RoomScope
import io.element.android.libraries.di.SingleIn
import io.element.android.libraries.matrix.api.core.EventId
import io.element.android.libraries.matrix.api.core.UniqueId
import io.element.android.libraries.matrix.api.room.CreateTimelineParams
import io.element.android.libraries.matrix.api.room.MatrixRoom
import io.element.android.libraries.matrix.api.timeline.Timeline
import io.element.android.libraries.mediaviewer.impl.model.GroupedMediaItems
@ -44,7 +45,7 @@ class LiveMediaTimeline @Inject constructor(
override suspend fun getTimeline(): Result<Timeline> = mutex.withLock {
val currentTimeline = timeline
if (currentTimeline == null) {
room.createTimeline(onlyMedia = true)
room.createTimeline(CreateTimelineParams.MediaOnly)
.onSuccess { timeline = it }
} else {
Result.success(currentTimeline)
@ -68,9 +69,11 @@ class FocusedMediaTimeline(
) : MediaTimeline {
override suspend fun getTimeline(): Result<Timeline> {
return room.createTimeline(
focusedOnEventId = eventId,
onlyPinnedEvents = onlyPinnedEvents,
onlyMedia = true,
createTimelineParams = if (onlyPinnedEvents) {
CreateTimelineParams.PinnedOnly
} else {
CreateTimelineParams.MediaOnlyFocused(eventId)
},
)
}

View file

@ -9,6 +9,7 @@ package io.element.android.libraries.mediaviewer.impl.datasource
import com.google.common.truth.Truth.assertThat
import io.element.android.libraries.matrix.api.core.EventId
import io.element.android.libraries.matrix.api.room.CreateTimelineParams
import io.element.android.libraries.matrix.api.room.MatrixRoom
import io.element.android.libraries.matrix.api.timeline.Timeline
import io.element.android.libraries.matrix.test.AN_EVENT_ID
@ -75,7 +76,7 @@ class FocusedMediaTimelineTest {
@Test
fun `getTimeline returns the timeline provided by the room`() = runTest {
val createTimelineResult = lambdaRecorder<EventId?, Boolean, Boolean, Result<Timeline>> { _, _, _ ->
val createTimelineResult = lambdaRecorder<CreateTimelineParams, Result<Timeline>> {
Result.success(FakeTimeline())
}
val room = FakeMatrixRoom(
@ -87,13 +88,12 @@ class FocusedMediaTimelineTest {
)
val timeline = sut.getTimeline()
assertThat(timeline.isSuccess).isTrue()
createTimelineResult.assertions().isCalledOnce()
.with(value(AN_EVENT_ID), value(false), value(true))
createTimelineResult.assertions().isCalledOnce().with(value(CreateTimelineParams.MediaOnlyFocused(AN_EVENT_ID)))
}
@Test
fun `getTimeline returns the timeline provided by the room for pinned Events`() = runTest {
val createTimelineResult = lambdaRecorder<EventId?, Boolean, Boolean, Result<Timeline>> { _, _, _ ->
val createTimelineResult = lambdaRecorder<CreateTimelineParams, Result<Timeline>> {
Result.success(FakeTimeline())
}
val room = FakeMatrixRoom(
@ -106,8 +106,7 @@ class FocusedMediaTimelineTest {
)
val timeline = sut.getTimeline()
assertThat(timeline.isSuccess).isTrue()
createTimelineResult.assertions().isCalledOnce()
.with(value(AN_EVENT_ID), value(true), value(true))
createTimelineResult.assertions().isCalledOnce().with(value(CreateTimelineParams.PinnedOnly))
}
private fun createFocusedMediaTimeline(

View file

@ -8,7 +8,7 @@
package io.element.android.libraries.mediaviewer.impl.datasource
import com.google.common.truth.Truth.assertThat
import io.element.android.libraries.matrix.api.core.EventId
import io.element.android.libraries.matrix.api.room.CreateTimelineParams
import io.element.android.libraries.matrix.api.room.MatrixRoom
import io.element.android.libraries.matrix.api.timeline.Timeline
import io.element.android.libraries.matrix.test.room.FakeMatrixRoom
@ -28,7 +28,7 @@ class LiveMediaTimelineTest {
@Test
fun `getTimeline returns the timeline provided by the room, then from cache`() = runTest {
val createTimelineResult = lambdaRecorder<EventId?, Boolean, Boolean, Result<Timeline>> { _, _, _ ->
val createTimelineResult = lambdaRecorder<CreateTimelineParams, Result<Timeline>> {
Result.success(FakeTimeline())
}
val room = FakeMatrixRoom(
@ -39,8 +39,7 @@ class LiveMediaTimelineTest {
)
val timeline = sut.getTimeline()
assertThat(timeline.isSuccess).isTrue()
createTimelineResult.assertions().isCalledOnce()
.with(value(null), value(false), value(true))
createTimelineResult.assertions().isCalledOnce().with(value(CreateTimelineParams.MediaOnly))
val timeline2 = sut.getTimeline()
assertThat(timeline2.isSuccess).isTrue()
// No called another time

View file

@ -57,7 +57,7 @@ class TimelineMediaGalleryDataSourceTest {
val fakeTimeline = FakeTimeline()
val sut = createTimelineMediaGalleryDataSource(
room = FakeMatrixRoom(
createTimelineResult = { _, _, _ -> Result.success(fakeTimeline) },
createTimelineResult = { Result.success(fakeTimeline) },
roomCoroutineScope = backgroundScope,
)
)
@ -75,7 +75,7 @@ class TimelineMediaGalleryDataSourceTest {
runTest {
val sut = createTimelineMediaGalleryDataSource(
room = FakeMatrixRoom(
createTimelineResult = { _, _, _ -> Result.success(fakeTimeline) },
createTimelineResult = { Result.success(fakeTimeline) },
roomCoroutineScope = backgroundScope,
)
)
@ -112,7 +112,7 @@ class TimelineMediaGalleryDataSourceTest {
}
val sut = createTimelineMediaGalleryDataSource(
room = FakeMatrixRoom(
createTimelineResult = { _, _, _ -> Result.success(fakeTimeline) },
createTimelineResult = { Result.success(fakeTimeline) },
roomCoroutineScope = backgroundScope,
)
)
@ -135,7 +135,7 @@ class TimelineMediaGalleryDataSourceTest {
}
val sut = createTimelineMediaGalleryDataSource(
room = FakeMatrixRoom(
createTimelineResult = { _, _, _ -> Result.success(fakeTimeline) },
createTimelineResult = { Result.success(fakeTimeline) },
roomCoroutineScope = backgroundScope,
)
)
@ -154,7 +154,7 @@ class TimelineMediaGalleryDataSourceTest {
fun `test - failing to load timeline should emit an error`() = runTest {
val sut = createTimelineMediaGalleryDataSource(
room = FakeMatrixRoom(
createTimelineResult = { _, _, _ -> Result.failure(AN_EXCEPTION) },
createTimelineResult = { Result.failure(AN_EXCEPTION) },
roomCoroutineScope = backgroundScope,
)
)
@ -176,7 +176,7 @@ class TimelineMediaGalleryDataSourceTest {
)
val sut = createTimelineMediaGalleryDataSource(
room = FakeMatrixRoom(
createTimelineResult = { _, _, _ -> Result.success(fakeTimeline) },
createTimelineResult = { Result.success(fakeTimeline) },
roomCoroutineScope = backgroundScope,
)
)

View file

@ -52,7 +52,7 @@ class MediaGalleryPresenterTest {
),
room = FakeMatrixRoom(
displayName = A_ROOM_NAME,
createTimelineResult = { _, _, _ -> Result.success(FakeTimeline()) },
createTimelineResult = { Result.success(FakeTimeline()) },
)
)
presenter.test {
@ -71,7 +71,7 @@ class MediaGalleryPresenterTest {
val presenter = createMediaGalleryPresenter(
room = FakeMatrixRoom(
displayName = A_ROOM_NAME,
createTimelineResult = { _, _, _ -> Result.success(FakeTimeline()) },
createTimelineResult = { Result.success(FakeTimeline()) },
)
)
presenter.test {
@ -101,7 +101,7 @@ class MediaGalleryPresenterTest {
room = FakeMatrixRoom(
sessionId = A_USER_ID,
displayName = A_ROOM_NAME,
createTimelineResult = { _, _, _ -> Result.success(FakeTimeline()) },
createTimelineResult = { Result.success(FakeTimeline()) },
canRedactOwnResult = { Result.success(canDeleteOwn) }
)
)
@ -144,7 +144,7 @@ class MediaGalleryPresenterTest {
room = FakeMatrixRoom(
sessionId = A_USER_ID,
displayName = A_ROOM_NAME,
createTimelineResult = { _, _, _ -> Result.success(FakeTimeline()) },
createTimelineResult = { Result.success(FakeTimeline()) },
canRedactOtherResult = { Result.success(canDeleteOther) }
)
)
@ -177,7 +177,7 @@ class MediaGalleryPresenterTest {
val presenter = createMediaGalleryPresenter(
room = FakeMatrixRoom(
displayName = A_ROOM_NAME,
createTimelineResult = { _, _, _ -> Result.success(FakeTimeline()) },
createTimelineResult = { Result.success(FakeTimeline()) },
)
)
presenter.test {
@ -244,7 +244,7 @@ class MediaGalleryPresenterTest {
)
val presenter = createMediaGalleryPresenter(
room = FakeMatrixRoom(
createTimelineResult = { _, _, _ -> Result.success(FakeTimeline()) },
createTimelineResult = { Result.success(FakeTimeline()) },
),
navigator = navigator,
)