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

@ -14,6 +14,7 @@ import io.element.android.libraries.di.RoomScope
import io.element.android.libraries.di.SingleIn
import io.element.android.libraries.featureflag.api.FeatureFlagService
import io.element.android.libraries.featureflag.api.FeatureFlags
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.sync.SyncService
import io.element.android.libraries.matrix.api.timeline.Timeline
@ -104,7 +105,7 @@ class PinnedEventsTimelineProvider @Inject constructor(
is AsyncData.Uninitialized, is AsyncData.Failure -> {
timelineStateFlow.emit(AsyncData.Loading())
withContext(dispatchers.io) {
room.createTimeline(onlyPinnedEvents = true)
room.createTimeline(CreateTimelineParams.PinnedOnly)
}
.fold(
{ timelineStateFlow.emit(AsyncData.Success(it)) },

View file

@ -11,6 +11,7 @@ import com.squareup.anvil.annotations.ContributesBinding
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.room.CreateTimelineParams
import io.element.android.libraries.matrix.api.room.MatrixRoom
import io.element.android.libraries.matrix.api.timeline.MatrixTimelineItem
import io.element.android.libraries.matrix.api.timeline.Timeline
@ -64,7 +65,7 @@ class TimelineController @Inject constructor(
}
suspend fun focusOnEvent(eventId: EventId): Result<Unit> {
return room.createTimeline(focusedOnEventId = eventId)
return room.createTimeline(CreateTimelineParams.Focused(eventId))
.onFailure {
if (it is CancellationException) {
throw it

View file

@ -55,7 +55,7 @@ class PinnedMessagesBannerPresenterTest {
@Test
fun `present - loading state`() = runTest {
val room = FakeMatrixRoom(
createTimelineResult = { _, _, _ -> Result.success(FakeTimeline()) }
createTimelineResult = { Result.success(FakeTimeline()) }
).apply {
givenRoomInfo(aRoomInfo(pinnedEventIds = listOf(AN_EVENT_ID)))
}
@ -86,7 +86,7 @@ class PinnedMessagesBannerPresenterTest {
)
)
val room = FakeMatrixRoom(
createTimelineResult = { _, _, _ -> Result.success(pinnedEventsTimeline) }
createTimelineResult = { Result.success(pinnedEventsTimeline) }
).apply {
givenRoomInfo(aRoomInfo(pinnedEventIds = listOf(AN_EVENT_ID, AN_EVENT_ID_2)))
}
@ -125,7 +125,7 @@ class PinnedMessagesBannerPresenterTest {
)
)
val room = FakeMatrixRoom(
createTimelineResult = { _, _, _ -> Result.success(pinnedEventsTimeline) }
createTimelineResult = { Result.success(pinnedEventsTimeline) }
).apply {
givenRoomInfo(aRoomInfo(pinnedEventIds = listOf(AN_EVENT_ID, AN_EVENT_ID_2)))
}
@ -160,7 +160,7 @@ class PinnedMessagesBannerPresenterTest {
@Test
fun `present - timeline failed`() = runTest {
val room = FakeMatrixRoom(
createTimelineResult = { _, _, _ -> Result.failure(Exception()) }
createTimelineResult = { Result.failure(Exception()) }
).apply {
givenRoomInfo(aRoomInfo(pinnedEventIds = listOf(AN_EVENT_ID)))
}

View file

@ -83,7 +83,7 @@ class PinnedMessagesListPresenterTest {
@Test
fun `present - timeline failure state`() = runTest {
val room = FakeMatrixRoom(
createTimelineResult = { _, _, _ -> Result.failure(RuntimeException()) },
createTimelineResult = { Result.failure(RuntimeException()) },
canRedactOwnResult = { Result.success(true) },
canRedactOtherResult = { Result.success(true) },
canUserPinUnpinResult = { Result.success(true) },
@ -102,7 +102,7 @@ class PinnedMessagesListPresenterTest {
@Test
fun `present - empty state`() = runTest {
val room = FakeMatrixRoom(
createTimelineResult = { _, _, _ -> Result.success(FakeTimeline()) },
createTimelineResult = { Result.success(FakeTimeline()) },
canRedactOwnResult = { Result.success(true) },
canRedactOtherResult = { Result.success(true) },
canUserPinUnpinResult = { Result.success(true) },
@ -122,7 +122,7 @@ class PinnedMessagesListPresenterTest {
fun `present - filled state`() = runTest {
val pinnedEventsTimeline = createPinnedMessagesTimeline()
val room = FakeMatrixRoom(
createTimelineResult = { _, _, _ -> Result.success(pinnedEventsTimeline) },
createTimelineResult = { Result.success(pinnedEventsTimeline) },
canRedactOwnResult = { Result.success(true) },
canRedactOtherResult = { Result.success(true) },
canUserPinUnpinResult = { Result.success(true) },
@ -149,7 +149,7 @@ class PinnedMessagesListPresenterTest {
val pinnedEventsTimeline = createPinnedMessagesTimeline()
val analyticsService = FakeAnalyticsService()
val room = FakeMatrixRoom(
createTimelineResult = { _, _, _ -> Result.success(pinnedEventsTimeline) },
createTimelineResult = { Result.success(pinnedEventsTimeline) },
canRedactOwnResult = { Result.success(true) },
canRedactOtherResult = { Result.success(true) },
canUserPinUnpinResult = { Result.success(true) },
@ -195,7 +195,7 @@ class PinnedMessagesListPresenterTest {
}
val pinnedEventsTimeline = createPinnedMessagesTimeline()
val room = FakeMatrixRoom(
createTimelineResult = { _, _, _ -> Result.success(pinnedEventsTimeline) },
createTimelineResult = { Result.success(pinnedEventsTimeline) },
canRedactOwnResult = { Result.success(true) },
canRedactOtherResult = { Result.success(true) },
canUserPinUnpinResult = { Result.success(true) },
@ -224,7 +224,7 @@ class PinnedMessagesListPresenterTest {
}
val pinnedEventsTimeline = createPinnedMessagesTimeline()
val room = FakeMatrixRoom(
createTimelineResult = { _, _, _ -> Result.success(pinnedEventsTimeline) },
createTimelineResult = { Result.success(pinnedEventsTimeline) },
canRedactOwnResult = { Result.success(true) },
canRedactOtherResult = { Result.success(true) },
canUserPinUnpinResult = { Result.success(true) },
@ -253,7 +253,7 @@ class PinnedMessagesListPresenterTest {
}
val pinnedEventsTimeline = createPinnedMessagesTimeline()
val room = FakeMatrixRoom(
createTimelineResult = { _, _, _ -> Result.success(pinnedEventsTimeline) },
createTimelineResult = { Result.success(pinnedEventsTimeline) },
canRedactOwnResult = { Result.success(true) },
canRedactOtherResult = { Result.success(true) },
canUserPinUnpinResult = { Result.success(true) },

View file

@ -31,7 +31,7 @@ class TimelineControllerTest {
val detachedTimeline = FakeTimeline(name = "detached")
val matrixRoom = FakeMatrixRoom(
liveTimeline = liveTimeline,
createTimelineResult = { _, _, _ -> Result.success(detachedTimeline) }
createTimelineResult = { Result.success(detachedTimeline) }
)
val sut = TimelineController(matrixRoom)
@ -63,7 +63,7 @@ class TimelineControllerTest {
var callNumber = 0
val matrixRoom = FakeMatrixRoom(
liveTimeline = liveTimeline,
createTimelineResult = { _, _, _ ->
createTimelineResult = {
callNumber++
when (callNumber) {
1 -> Result.success(detachedTimeline1)
@ -117,7 +117,7 @@ class TimelineControllerTest {
val detachedTimeline = FakeTimeline(name = "detached")
val matrixRoom = FakeMatrixRoom(
liveTimeline = liveTimeline,
createTimelineResult = { _, _, _ -> Result.success(detachedTimeline) }
createTimelineResult = { Result.success(detachedTimeline) }
)
val sut = TimelineController(matrixRoom)
sut.activeTimelineFlow().test {
@ -167,7 +167,7 @@ class TimelineControllerTest {
}
val matrixRoom = FakeMatrixRoom(
liveTimeline = liveTimeline,
createTimelineResult = { _, _, _ -> Result.success(detachedTimeline) }
createTimelineResult = { Result.success(detachedTimeline) }
)
val sut = TimelineController(matrixRoom)
sut.activeTimelineFlow().test {
@ -192,7 +192,7 @@ class TimelineControllerTest {
val detachedTimeline = FakeTimeline(name = "detached")
val matrixRoom = FakeMatrixRoom(
liveTimeline = liveTimeline,
createTimelineResult = { _, _, _ -> Result.success(detachedTimeline) }
createTimelineResult = { Result.success(detachedTimeline) }
)
val sut = TimelineController(matrixRoom)

View file

@ -483,7 +483,7 @@ import kotlin.time.Duration.Companion.seconds
)
val room = FakeMatrixRoom(
liveTimeline = liveTimeline,
createTimelineResult = { _, _, _ -> Result.success(detachedTimeline) },
createTimelineResult = { Result.success(detachedTimeline) },
canUserSendMessageResult = { _, _ -> Result.success(true) },
)
val presenter = createTimelinePresenter(
@ -561,7 +561,7 @@ import kotlin.time.Duration.Companion.seconds
liveTimeline = FakeTimeline(
timelineItems = flowOf(emptyList()),
),
createTimelineResult = { _, _, _ -> Result.failure(Throwable("An error")) },
createTimelineResult = { Result.failure(Throwable("An error")) },
canUserSendMessageResult = { _, _ -> Result.success(true) },
)
)