From 7fc0ac1ceddda72a5a62feac7427ad0b148a461a Mon Sep 17 00:00:00 2001 From: ganfra Date: Fri, 15 Dec 2023 14:48:49 +0100 Subject: [PATCH] Timeline : uniqueId exposed as String directly from matrix module. --- .../event/TimelineItemEventFactory.kt | 2 +- .../virtual/TimelineItemVirtualFactory.kt | 7 +---- .../impl/timeline/TimelinePresenterTest.kt | 16 ++++++------ .../RedactedVoiceMessageManagerTest.kt | 2 +- .../features/poll/impl/PollFixtures.kt | 2 +- .../matrix/api/timeline/MatrixTimelineItem.kt | 4 +-- .../impl/timeline/MatrixTimelineItemMapper.kt | 2 +- .../TimelineEncryptedHistoryPostProcessor.kt | 2 +- ...melineEncryptedHistoryPostProcessorTest.kt | 26 +++++++++---------- 9 files changed, 29 insertions(+), 34 deletions(-) diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/factories/event/TimelineItemEventFactory.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/factories/event/TimelineItemEventFactory.kt index 5e2d97e6a1..51520c66dc 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/factories/event/TimelineItemEventFactory.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/factories/event/TimelineItemEventFactory.kt @@ -80,7 +80,7 @@ class TimelineItemEventFactory @Inject constructor( ) currentTimelineItem.event return TimelineItem.Event( - id = currentTimelineItem.uniqueId.toString(), + id = currentTimelineItem.uniqueId, eventId = currentTimelineItem.eventId, transactionId = currentTimelineItem.transactionId, senderId = currentSender, diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/factories/virtual/TimelineItemVirtualFactory.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/factories/virtual/TimelineItemVirtualFactory.kt index 6178b1dee7..cc513705e3 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/factories/virtual/TimelineItemVirtualFactory.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/factories/virtual/TimelineItemVirtualFactory.kt @@ -31,13 +31,8 @@ class TimelineItemVirtualFactory @Inject constructor( fun create( virtualTimelineItem: MatrixTimelineItem.Virtual, ): TimelineItem.Virtual { - val id = if (virtualTimelineItem.virtual is VirtualTimelineItem.EncryptedHistoryBanner) { - "encrypted_history_banner" - } else { - virtualTimelineItem.uniqueId.toString() - } return TimelineItem.Virtual( - id = id, + id = virtualTimelineItem.uniqueId, model = virtualTimelineItem.computeModel() ) } diff --git a/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/timeline/TimelinePresenterTest.kt b/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/timeline/TimelinePresenterTest.kt index 4316750a6a..640849c5f4 100644 --- a/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/timeline/TimelinePresenterTest.kt +++ b/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/timeline/TimelinePresenterTest.kt @@ -121,7 +121,7 @@ class TimelinePresenterTest { fun `present - on scroll finished send read receipt if an event is before the index`() = runTest { val timeline = FakeMatrixTimeline( initialTimelineItems = listOf( - MatrixTimelineItem.Event(0, anEventTimelineItem()) + MatrixTimelineItem.Event("0", anEventTimelineItem()) ) ) 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 { val timeline = FakeMatrixTimeline( initialTimelineItems = listOf( - MatrixTimelineItem.Event(0, anEventTimelineItem()) + MatrixTimelineItem.Event("0", anEventTimelineItem()) ) ) 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 { val timeline = FakeMatrixTimeline( initialTimelineItems = listOf( - MatrixTimelineItem.Virtual(0, VirtualTimelineItem.ReadMarker) + MatrixTimelineItem.Virtual("0", VirtualTimelineItem.ReadMarker) ) ) val presenter = createTimelinePresenter(timeline) @@ -200,13 +200,13 @@ class TimelinePresenterTest { assertThat(initialState.newEventState).isEqualTo(NewEventState.None) assertThat(initialState.timelineItems.size).isEqualTo(0) timeline.updateTimelineItems { - listOf(MatrixTimelineItem.Event(0, anEventTimelineItem(content = aMessageContent()))) + listOf(MatrixTimelineItem.Event("0", anEventTimelineItem(content = aMessageContent()))) } consumeItemsUntilPredicate { it.timelineItems.size == 1 } // Mimics sending a message, and assert newEventState is FromMe timeline.updateTimelineItems { items -> 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 } awaitLastSequentialItem().also { state -> @@ -215,7 +215,7 @@ class TimelinePresenterTest { // Mimics receiving a message without clearing the previous FromMe timeline.updateTimelineItems { items -> val event = anEventTimelineItem(content = aMessageContent()) - items + listOf(MatrixTimelineItem.Event(2, event)) + items + listOf(MatrixTimelineItem.Event("2", event)) } consumeItemsUntilPredicate { it.timelineItems.size == 3 } @@ -227,7 +227,7 @@ class TimelinePresenterTest { // Mimics receiving a message and assert newEventState is FromOther timeline.updateTimelineItems { items -> val event = anEventTimelineItem(content = aMessageContent()) - items + listOf(MatrixTimelineItem.Event(3, event)) + items + listOf(MatrixTimelineItem.Event("3", event)) } consumeItemsUntilPredicate { it.timelineItems.size == 4 } awaitLastSequentialItem().also { state -> @@ -268,7 +268,7 @@ class TimelinePresenterTest { ), ) timeline.updateTimelineItems { - listOf(MatrixTimelineItem.Event(0, anEventTimelineItem(reactions = oneReaction))) + listOf(MatrixTimelineItem.Event("0", anEventTimelineItem(reactions = oneReaction))) } skipItems(1) val item = awaitItem().timelineItems.first() diff --git a/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/voicemessages/timeline/RedactedVoiceMessageManagerTest.kt b/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/voicemessages/timeline/RedactedVoiceMessageManagerTest.kt index 00eb7141c3..4cabc6450a 100644 --- a/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/voicemessages/timeline/RedactedVoiceMessageManagerTest.kt +++ b/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/voicemessages/timeline/RedactedVoiceMessageManagerTest.kt @@ -80,7 +80,7 @@ fun TestScope.aDefaultRedactedVoiceMessageManager( fun aRedactedMatrixTimeline(eventId: EventId) = listOf( MatrixTimelineItem.Event( - uniqueId = 0, + uniqueId = "0", event = EventTimelineItem( eventId = eventId, transactionId = null, diff --git a/features/poll/impl/src/test/kotlin/io/element/android/features/poll/impl/PollFixtures.kt b/features/poll/impl/src/test/kotlin/io/element/android/features/poll/impl/PollFixtures.kt index bfe925a993..b54b18b8c0 100644 --- a/features/poll/impl/src/test/kotlin/io/element/android/features/poll/impl/PollFixtures.kt +++ b/features/poll/impl/src/test/kotlin/io/element/android/features/poll/impl/PollFixtures.kt @@ -31,7 +31,7 @@ fun aPollTimeline( return FakeMatrixTimeline( initialTimelineItems = polls.map { entry -> MatrixTimelineItem.Event( - entry.key.hashCode().toLong(), + entry.key.value, anEventTimelineItem( eventId = entry.key, content = entry.value, diff --git a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/timeline/MatrixTimelineItem.kt b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/timeline/MatrixTimelineItem.kt index fe328a57d2..ae4e07a8f4 100644 --- a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/timeline/MatrixTimelineItem.kt +++ b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/timeline/MatrixTimelineItem.kt @@ -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 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 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 } diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/MatrixTimelineItemMapper.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/MatrixTimelineItemMapper.kt index 2e86aa0706..beca5f17fb 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/MatrixTimelineItemMapper.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/MatrixTimelineItemMapper.kt @@ -32,7 +32,7 @@ class MatrixTimelineItemMapper( ) { fun map(timelineItem: TimelineItem): MatrixTimelineItem = timelineItem.use { - val uniqueId = timelineItem.uniqueId().toLong() + val uniqueId = timelineItem.uniqueId().toString() val asEvent = it.asEvent() if (asEvent != null) { val eventTimelineItem = eventTimelineItemMapper.map(asEvent) diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/postprocessor/TimelineEncryptedHistoryPostProcessor.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/postprocessor/TimelineEncryptedHistoryPostProcessor.kt index 25241ff3e1..1a6b27203e 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/postprocessor/TimelineEncryptedHistoryPostProcessor.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/postprocessor/TimelineEncryptedHistoryPostProcessor.kt @@ -62,7 +62,7 @@ class TimelineEncryptedHistoryPostProcessor( } return if (lastEncryptedHistoryBannerIndex >= 0) { 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 } else { list diff --git a/libraries/matrix/impl/src/test/kotlin/io/element/android/libraries/matrix/impl/timeline/postprocessor/TimelineEncryptedHistoryPostProcessorTest.kt b/libraries/matrix/impl/src/test/kotlin/io/element/android/libraries/matrix/impl/timeline/postprocessor/TimelineEncryptedHistoryPostProcessorTest.kt index 029ae2336a..ccfddba40a 100644 --- a/libraries/matrix/impl/src/test/kotlin/io/element/android/libraries/matrix/impl/timeline/postprocessor/TimelineEncryptedHistoryPostProcessorTest.kt +++ b/libraries/matrix/impl/src/test/kotlin/io/element/android/libraries/matrix/impl/timeline/postprocessor/TimelineEncryptedHistoryPostProcessorTest.kt @@ -36,7 +36,7 @@ class TimelineEncryptedHistoryPostProcessorTest { fun `given an unencrypted room, nothing is done`() = runTest { val processor = createPostProcessor(isRoomEncrypted = false) val items = listOf( - MatrixTimelineItem.Event(0L, anEventTimelineItem()) + MatrixTimelineItem.Event("0L", anEventTimelineItem()) ) 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 { val processor = createPostProcessor(isKeyBackupEnabled = true) val items = listOf( - MatrixTimelineItem.Event(0L, anEventTimelineItem()) + MatrixTimelineItem.Event("0L", anEventTimelineItem()) ) assertThat(processor.process(items)).isSameInstanceAs(items) } @@ -54,7 +54,7 @@ class TimelineEncryptedHistoryPostProcessorTest { fun `given a null lastLoginTimestamp, nothing is done`() = runTest { val processor = createPostProcessor(lastLoginTimestamp = null) val items = listOf( - MatrixTimelineItem.Event(0L, anEventTimelineItem()) + MatrixTimelineItem.Event("0L", anEventTimelineItem()) ) 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 { val processor = createPostProcessor() 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) } @@ -79,20 +79,20 @@ class TimelineEncryptedHistoryPostProcessorTest { fun `given a list with an item with equal timestamp as lastLoginTimestamp, it's replaced`() = runTest { val processor = createPostProcessor() val items = listOf( - MatrixTimelineItem.Event(0L, anEventTimelineItem(timestamp = defaultLastLoginTimestamp.time)) + MatrixTimelineItem.Event("0L", anEventTimelineItem(timestamp = defaultLastLoginTimestamp.time)) ) assertThat(processor.process(items)) - .isEqualTo(listOf(MatrixTimelineItem.Virtual(0L, VirtualTimelineItem.EncryptedHistoryBanner))) + .isEqualTo(listOf(MatrixTimelineItem.Virtual(VirtualTimelineItem.EncryptedHistoryBanner.toString(), VirtualTimelineItem.EncryptedHistoryBanner))) } @Test fun `given a list with an item with a lower timestamp than lastLoginTimestamp, it's replaced`() = runTest { val processor = createPostProcessor() val items = listOf( - MatrixTimelineItem.Event(0L, anEventTimelineItem(timestamp = defaultLastLoginTimestamp.time - 1)) + MatrixTimelineItem.Event("0", anEventTimelineItem(timestamp = defaultLastLoginTimestamp.time - 1)) ) 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 items = listOf( - MatrixTimelineItem.Event(0L, anEventTimelineItem(timestamp = defaultLastLoginTimestamp.time - 1)), - MatrixTimelineItem.Event(0L, anEventTimelineItem(timestamp = defaultLastLoginTimestamp.time)), - 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 + 1)), ) assertThat(processor.process(items)).isEqualTo( listOf( - MatrixTimelineItem.Virtual(0L, VirtualTimelineItem.EncryptedHistoryBanner), - MatrixTimelineItem.Event(0L, anEventTimelineItem(timestamp = defaultLastLoginTimestamp.time + 1)) + MatrixTimelineItem.Virtual(VirtualTimelineItem.EncryptedHistoryBanner.toString(), VirtualTimelineItem.EncryptedHistoryBanner), + MatrixTimelineItem.Event("0L", anEventTimelineItem(timestamp = defaultLastLoginTimestamp.time + 1)) ) ) assertThat(paginationStateFlow.value).isEqualTo(