Timeline : uniqueId exposed as String directly from matrix module.

This commit is contained in:
ganfra 2023-12-15 14:48:49 +01:00
parent 6aa896bfc6
commit 7fc0ac1ced
9 changed files with 29 additions and 34 deletions

View file

@ -80,7 +80,7 @@ class TimelineItemEventFactory @Inject constructor(
) )
currentTimelineItem.event currentTimelineItem.event
return TimelineItem.Event( return TimelineItem.Event(
id = currentTimelineItem.uniqueId.toString(), id = currentTimelineItem.uniqueId,
eventId = currentTimelineItem.eventId, eventId = currentTimelineItem.eventId,
transactionId = currentTimelineItem.transactionId, transactionId = currentTimelineItem.transactionId,
senderId = currentSender, senderId = currentSender,

View file

@ -31,13 +31,8 @@ class TimelineItemVirtualFactory @Inject constructor(
fun create( fun create(
virtualTimelineItem: MatrixTimelineItem.Virtual, virtualTimelineItem: MatrixTimelineItem.Virtual,
): TimelineItem.Virtual { ): TimelineItem.Virtual {
val id = if (virtualTimelineItem.virtual is VirtualTimelineItem.EncryptedHistoryBanner) {
"encrypted_history_banner"
} else {
virtualTimelineItem.uniqueId.toString()
}
return TimelineItem.Virtual( return TimelineItem.Virtual(
id = id, id = virtualTimelineItem.uniqueId,
model = virtualTimelineItem.computeModel() model = virtualTimelineItem.computeModel()
) )
} }

View file

@ -121,7 +121,7 @@ class TimelinePresenterTest {
fun `present - on scroll finished send read receipt if an event is before the index`() = runTest { fun `present - on scroll finished send read receipt if an event is before the index`() = runTest {
val timeline = FakeMatrixTimeline( val timeline = FakeMatrixTimeline(
initialTimelineItems = listOf( initialTimelineItems = listOf(
MatrixTimelineItem.Event(0, anEventTimelineItem()) MatrixTimelineItem.Event("0", anEventTimelineItem())
) )
) )
val presenter = createTimelinePresenter(timeline) val presenter = createTimelinePresenter(timeline)
@ -145,7 +145,7 @@ class TimelinePresenterTest {
fun `present - on scroll finished will not send read receipt if no event is before the index`() = runTest { fun `present - on scroll finished will not send read receipt if no event is before the index`() = runTest {
val timeline = FakeMatrixTimeline( val timeline = FakeMatrixTimeline(
initialTimelineItems = listOf( initialTimelineItems = listOf(
MatrixTimelineItem.Event(0, anEventTimelineItem()) MatrixTimelineItem.Event("0", anEventTimelineItem())
) )
) )
val presenter = createTimelinePresenter(timeline) val presenter = createTimelinePresenter(timeline)
@ -169,7 +169,7 @@ class TimelinePresenterTest {
fun `present - on scroll finished will not send read receipt only virtual events exist before the index`() = runTest { fun `present - on scroll finished will not send read receipt only virtual events exist before the index`() = runTest {
val timeline = FakeMatrixTimeline( val timeline = FakeMatrixTimeline(
initialTimelineItems = listOf( initialTimelineItems = listOf(
MatrixTimelineItem.Virtual(0, VirtualTimelineItem.ReadMarker) MatrixTimelineItem.Virtual("0", VirtualTimelineItem.ReadMarker)
) )
) )
val presenter = createTimelinePresenter(timeline) val presenter = createTimelinePresenter(timeline)
@ -200,13 +200,13 @@ class TimelinePresenterTest {
assertThat(initialState.newEventState).isEqualTo(NewEventState.None) assertThat(initialState.newEventState).isEqualTo(NewEventState.None)
assertThat(initialState.timelineItems.size).isEqualTo(0) assertThat(initialState.timelineItems.size).isEqualTo(0)
timeline.updateTimelineItems { timeline.updateTimelineItems {
listOf(MatrixTimelineItem.Event(0, anEventTimelineItem(content = aMessageContent()))) listOf(MatrixTimelineItem.Event("0", anEventTimelineItem(content = aMessageContent())))
} }
consumeItemsUntilPredicate { it.timelineItems.size == 1 } consumeItemsUntilPredicate { it.timelineItems.size == 1 }
// Mimics sending a message, and assert newEventState is FromMe // Mimics sending a message, and assert newEventState is FromMe
timeline.updateTimelineItems { items -> timeline.updateTimelineItems { items ->
val event = anEventTimelineItem(content = aMessageContent(), localSendState = LocalEventSendState.Sent(AN_EVENT_ID)) val event = anEventTimelineItem(content = aMessageContent(), localSendState = LocalEventSendState.Sent(AN_EVENT_ID))
items + listOf(MatrixTimelineItem.Event(1, event)) items + listOf(MatrixTimelineItem.Event("1", event))
} }
consumeItemsUntilPredicate { it.timelineItems.size == 2 } consumeItemsUntilPredicate { it.timelineItems.size == 2 }
awaitLastSequentialItem().also { state -> awaitLastSequentialItem().also { state ->
@ -215,7 +215,7 @@ class TimelinePresenterTest {
// Mimics receiving a message without clearing the previous FromMe // Mimics receiving a message without clearing the previous FromMe
timeline.updateTimelineItems { items -> timeline.updateTimelineItems { items ->
val event = anEventTimelineItem(content = aMessageContent()) val event = anEventTimelineItem(content = aMessageContent())
items + listOf(MatrixTimelineItem.Event(2, event)) items + listOf(MatrixTimelineItem.Event("2", event))
} }
consumeItemsUntilPredicate { it.timelineItems.size == 3 } consumeItemsUntilPredicate { it.timelineItems.size == 3 }
@ -227,7 +227,7 @@ class TimelinePresenterTest {
// Mimics receiving a message and assert newEventState is FromOther // Mimics receiving a message and assert newEventState is FromOther
timeline.updateTimelineItems { items -> timeline.updateTimelineItems { items ->
val event = anEventTimelineItem(content = aMessageContent()) val event = anEventTimelineItem(content = aMessageContent())
items + listOf(MatrixTimelineItem.Event(3, event)) items + listOf(MatrixTimelineItem.Event("3", event))
} }
consumeItemsUntilPredicate { it.timelineItems.size == 4 } consumeItemsUntilPredicate { it.timelineItems.size == 4 }
awaitLastSequentialItem().also { state -> awaitLastSequentialItem().also { state ->
@ -268,7 +268,7 @@ class TimelinePresenterTest {
), ),
) )
timeline.updateTimelineItems { timeline.updateTimelineItems {
listOf(MatrixTimelineItem.Event(0, anEventTimelineItem(reactions = oneReaction))) listOf(MatrixTimelineItem.Event("0", anEventTimelineItem(reactions = oneReaction)))
} }
skipItems(1) skipItems(1)
val item = awaitItem().timelineItems.first() val item = awaitItem().timelineItems.first()

View file

@ -80,7 +80,7 @@ fun TestScope.aDefaultRedactedVoiceMessageManager(
fun aRedactedMatrixTimeline(eventId: EventId) = listOf<MatrixTimelineItem>( fun aRedactedMatrixTimeline(eventId: EventId) = listOf<MatrixTimelineItem>(
MatrixTimelineItem.Event( MatrixTimelineItem.Event(
uniqueId = 0, uniqueId = "0",
event = EventTimelineItem( event = EventTimelineItem(
eventId = eventId, eventId = eventId,
transactionId = null, transactionId = null,

View file

@ -31,7 +31,7 @@ fun aPollTimeline(
return FakeMatrixTimeline( return FakeMatrixTimeline(
initialTimelineItems = polls.map { entry -> initialTimelineItems = polls.map { entry ->
MatrixTimelineItem.Event( MatrixTimelineItem.Event(
entry.key.hashCode().toLong(), entry.key.value,
anEventTimelineItem( anEventTimelineItem(
eventId = entry.key, eventId = entry.key,
content = entry.value, content = entry.value,

View file

@ -22,12 +22,12 @@ import io.element.android.libraries.matrix.api.timeline.item.event.EventTimeline
import io.element.android.libraries.matrix.api.timeline.item.virtual.VirtualTimelineItem import io.element.android.libraries.matrix.api.timeline.item.virtual.VirtualTimelineItem
sealed interface MatrixTimelineItem { sealed interface MatrixTimelineItem {
data class Event(val uniqueId: Long, val event: EventTimelineItem) : MatrixTimelineItem { data class Event(val uniqueId: String, val event: EventTimelineItem) : MatrixTimelineItem {
val eventId: EventId? = event.eventId val eventId: EventId? = event.eventId
val transactionId: TransactionId? = event.transactionId val transactionId: TransactionId? = event.transactionId
} }
data class Virtual(val uniqueId: Long, val virtual: VirtualTimelineItem) : MatrixTimelineItem data class Virtual(val uniqueId: String, val virtual: VirtualTimelineItem) : MatrixTimelineItem
data object Other : MatrixTimelineItem data object Other : MatrixTimelineItem
} }

View file

@ -32,7 +32,7 @@ class MatrixTimelineItemMapper(
) { ) {
fun map(timelineItem: TimelineItem): MatrixTimelineItem = timelineItem.use { fun map(timelineItem: TimelineItem): MatrixTimelineItem = timelineItem.use {
val uniqueId = timelineItem.uniqueId().toLong() val uniqueId = timelineItem.uniqueId().toString()
val asEvent = it.asEvent() val asEvent = it.asEvent()
if (asEvent != null) { if (asEvent != null) {
val eventTimelineItem = eventTimelineItemMapper.map(asEvent) val eventTimelineItem = eventTimelineItemMapper.map(asEvent)

View file

@ -62,7 +62,7 @@ class TimelineEncryptedHistoryPostProcessor(
} }
return if (lastEncryptedHistoryBannerIndex >= 0) { return if (lastEncryptedHistoryBannerIndex >= 0) {
val sublist = list.drop(lastEncryptedHistoryBannerIndex + 1).toMutableList() val sublist = list.drop(lastEncryptedHistoryBannerIndex + 1).toMutableList()
sublist.add(0, MatrixTimelineItem.Virtual(0L, VirtualTimelineItem.EncryptedHistoryBanner)) sublist.add(0, MatrixTimelineItem.Virtual(VirtualTimelineItem.EncryptedHistoryBanner.toString(), VirtualTimelineItem.EncryptedHistoryBanner))
sublist sublist
} else { } else {
list list

View file

@ -36,7 +36,7 @@ class TimelineEncryptedHistoryPostProcessorTest {
fun `given an unencrypted room, nothing is done`() = runTest { fun `given an unencrypted room, nothing is done`() = runTest {
val processor = createPostProcessor(isRoomEncrypted = false) val processor = createPostProcessor(isRoomEncrypted = false)
val items = listOf( val items = listOf(
MatrixTimelineItem.Event(0L, anEventTimelineItem()) MatrixTimelineItem.Event("0L", anEventTimelineItem())
) )
assertThat(processor.process(items)).isSameInstanceAs(items) assertThat(processor.process(items)).isSameInstanceAs(items)
} }
@ -45,7 +45,7 @@ class TimelineEncryptedHistoryPostProcessorTest {
fun `given an encrypted room, and key backup enabled, nothing is done`() = runTest { fun `given an encrypted room, and key backup enabled, nothing is done`() = runTest {
val processor = createPostProcessor(isKeyBackupEnabled = true) val processor = createPostProcessor(isKeyBackupEnabled = true)
val items = listOf( val items = listOf(
MatrixTimelineItem.Event(0L, anEventTimelineItem()) MatrixTimelineItem.Event("0L", anEventTimelineItem())
) )
assertThat(processor.process(items)).isSameInstanceAs(items) assertThat(processor.process(items)).isSameInstanceAs(items)
} }
@ -54,7 +54,7 @@ class TimelineEncryptedHistoryPostProcessorTest {
fun `given a null lastLoginTimestamp, nothing is done`() = runTest { fun `given a null lastLoginTimestamp, nothing is done`() = runTest {
val processor = createPostProcessor(lastLoginTimestamp = null) val processor = createPostProcessor(lastLoginTimestamp = null)
val items = listOf( val items = listOf(
MatrixTimelineItem.Event(0L, anEventTimelineItem()) MatrixTimelineItem.Event("0L", anEventTimelineItem())
) )
assertThat(processor.process(items)).isSameInstanceAs(items) assertThat(processor.process(items)).isSameInstanceAs(items)
} }
@ -70,7 +70,7 @@ class TimelineEncryptedHistoryPostProcessorTest {
fun `given a list with no items before lastLoginTimestamp, nothing is done`() = runTest { fun `given a list with no items before lastLoginTimestamp, nothing is done`() = runTest {
val processor = createPostProcessor() val processor = createPostProcessor()
val items = listOf( val items = listOf(
MatrixTimelineItem.Event(0L, anEventTimelineItem(timestamp = defaultLastLoginTimestamp.time + 1)) MatrixTimelineItem.Event("0L", anEventTimelineItem(timestamp = defaultLastLoginTimestamp.time + 1))
) )
assertThat(processor.process(items)).isSameInstanceAs(items) assertThat(processor.process(items)).isSameInstanceAs(items)
} }
@ -79,20 +79,20 @@ class TimelineEncryptedHistoryPostProcessorTest {
fun `given a list with an item with equal timestamp as lastLoginTimestamp, it's replaced`() = runTest { fun `given a list with an item with equal timestamp as lastLoginTimestamp, it's replaced`() = runTest {
val processor = createPostProcessor() val processor = createPostProcessor()
val items = listOf( val items = listOf(
MatrixTimelineItem.Event(0L, anEventTimelineItem(timestamp = defaultLastLoginTimestamp.time)) MatrixTimelineItem.Event("0L", anEventTimelineItem(timestamp = defaultLastLoginTimestamp.time))
) )
assertThat(processor.process(items)) assertThat(processor.process(items))
.isEqualTo(listOf(MatrixTimelineItem.Virtual(0L, VirtualTimelineItem.EncryptedHistoryBanner))) .isEqualTo(listOf(MatrixTimelineItem.Virtual(VirtualTimelineItem.EncryptedHistoryBanner.toString(), VirtualTimelineItem.EncryptedHistoryBanner)))
} }
@Test @Test
fun `given a list with an item with a lower timestamp than lastLoginTimestamp, it's replaced`() = runTest { fun `given a list with an item with a lower timestamp than lastLoginTimestamp, it's replaced`() = runTest {
val processor = createPostProcessor() val processor = createPostProcessor()
val items = listOf( val items = listOf(
MatrixTimelineItem.Event(0L, anEventTimelineItem(timestamp = defaultLastLoginTimestamp.time - 1)) MatrixTimelineItem.Event("0", anEventTimelineItem(timestamp = defaultLastLoginTimestamp.time - 1))
) )
assertThat(processor.process(items)).isEqualTo( assertThat(processor.process(items)).isEqualTo(
listOf(MatrixTimelineItem.Virtual(0L, VirtualTimelineItem.EncryptedHistoryBanner)) listOf(MatrixTimelineItem.Virtual(VirtualTimelineItem.EncryptedHistoryBanner.toString(), VirtualTimelineItem.EncryptedHistoryBanner))
) )
} }
@ -107,14 +107,14 @@ class TimelineEncryptedHistoryPostProcessorTest {
) )
val processor = createPostProcessor(paginationStateFlow = paginationStateFlow) val processor = createPostProcessor(paginationStateFlow = paginationStateFlow)
val items = listOf( val items = listOf(
MatrixTimelineItem.Event(0L, anEventTimelineItem(timestamp = defaultLastLoginTimestamp.time - 1)), MatrixTimelineItem.Event("0L", anEventTimelineItem(timestamp = defaultLastLoginTimestamp.time - 1)),
MatrixTimelineItem.Event(0L, anEventTimelineItem(timestamp = defaultLastLoginTimestamp.time)), MatrixTimelineItem.Event("0L", anEventTimelineItem(timestamp = defaultLastLoginTimestamp.time)),
MatrixTimelineItem.Event(0L, anEventTimelineItem(timestamp = defaultLastLoginTimestamp.time + 1)), MatrixTimelineItem.Event("0L", anEventTimelineItem(timestamp = defaultLastLoginTimestamp.time + 1)),
) )
assertThat(processor.process(items)).isEqualTo( assertThat(processor.process(items)).isEqualTo(
listOf( listOf(
MatrixTimelineItem.Virtual(0L, VirtualTimelineItem.EncryptedHistoryBanner), MatrixTimelineItem.Virtual(VirtualTimelineItem.EncryptedHistoryBanner.toString(), VirtualTimelineItem.EncryptedHistoryBanner),
MatrixTimelineItem.Event(0L, anEventTimelineItem(timestamp = defaultLastLoginTimestamp.time + 1)) MatrixTimelineItem.Event("0L", anEventTimelineItem(timestamp = defaultLastLoginTimestamp.time + 1))
) )
) )
assertThat(paginationStateFlow.value).isEqualTo( assertThat(paginationStateFlow.value).isEqualTo(