misc : use new_latest_event api (+ some renaming)
This commit is contained in:
parent
ec6f615a68
commit
b04524e566
42 changed files with 352 additions and 290 deletions
|
|
@ -1,20 +0,0 @@
|
|||
/*
|
||||
* Copyright (c) 2025 Element Creations Ltd.
|
||||
* Copyright 2023-2025 New Vector Ltd.
|
||||
*
|
||||
* SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial.
|
||||
* Please see LICENSE files in the repository root for full details.
|
||||
*/
|
||||
|
||||
package io.element.android.libraries.matrix.api.room.message
|
||||
|
||||
import io.element.android.libraries.matrix.api.core.EventId
|
||||
import io.element.android.libraries.matrix.api.core.UserId
|
||||
import io.element.android.libraries.matrix.api.timeline.item.event.EventTimelineItem
|
||||
|
||||
data class RoomMessage(
|
||||
val eventId: EventId,
|
||||
val event: EventTimelineItem,
|
||||
val sender: UserId,
|
||||
val originServerTs: Long,
|
||||
)
|
||||
|
|
@ -0,0 +1,31 @@
|
|||
/*
|
||||
* Copyright (c) 2025 Element Creations Ltd.
|
||||
*
|
||||
* SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial.
|
||||
* Please see LICENSE files in the repository root for full details.
|
||||
*/
|
||||
|
||||
package io.element.android.libraries.matrix.api.roomlist
|
||||
|
||||
import io.element.android.libraries.matrix.api.core.UserId
|
||||
import io.element.android.libraries.matrix.api.timeline.item.event.EventContent
|
||||
import io.element.android.libraries.matrix.api.timeline.item.event.ProfileDetails
|
||||
|
||||
sealed interface LatestEventValue {
|
||||
data object None : LatestEventValue
|
||||
data class Remote(
|
||||
val timestamp: Long,
|
||||
val content: EventContent,
|
||||
val senderId: UserId,
|
||||
val senderProfile: ProfileDetails,
|
||||
val isOwn: Boolean,
|
||||
) : LatestEventValue
|
||||
|
||||
data class Local(
|
||||
val timestamp: Long,
|
||||
val content: EventContent,
|
||||
val senderId: UserId,
|
||||
val senderProfile: ProfileDetails,
|
||||
val isSending: Boolean,
|
||||
) : LatestEventValue
|
||||
}
|
||||
|
|
@ -9,13 +9,16 @@
|
|||
package io.element.android.libraries.matrix.api.roomlist
|
||||
|
||||
import io.element.android.libraries.matrix.api.room.RoomInfo
|
||||
import io.element.android.libraries.matrix.api.room.message.RoomMessage
|
||||
|
||||
data class RoomSummary(
|
||||
val info: RoomInfo,
|
||||
val lastMessage: RoomMessage?,
|
||||
val latestEvent: LatestEventValue,
|
||||
) {
|
||||
val roomId = info.id
|
||||
val lastMessageTimestamp = lastMessage?.originServerTs
|
||||
val latestEventTimestamp = when (latestEvent) {
|
||||
is LatestEventValue.None -> null
|
||||
is LatestEventValue.Local -> latestEvent.timestamp
|
||||
is LatestEventValue.Remote -> latestEvent.timestamp
|
||||
}
|
||||
val isOneToOne get() = info.activeMembersCount == 2L
|
||||
}
|
||||
|
|
|
|||
|
|
@ -13,7 +13,7 @@ import io.element.android.libraries.matrix.api.core.ThreadId
|
|||
import io.element.android.libraries.matrix.api.core.UserId
|
||||
import io.element.android.libraries.matrix.api.timeline.item.event.EventContent
|
||||
import io.element.android.libraries.matrix.api.timeline.item.event.EventOrTransactionId
|
||||
import io.element.android.libraries.matrix.api.timeline.item.event.ProfileTimelineDetails
|
||||
import io.element.android.libraries.matrix.api.timeline.item.event.ProfileDetails
|
||||
|
||||
sealed interface EventThreadInfo {
|
||||
data class ThreadRoot(val summary: ThreadSummary) : EventThreadInfo
|
||||
|
|
@ -29,6 +29,6 @@ data class EmbeddedEventInfo(
|
|||
val eventOrTransactionId: EventOrTransactionId,
|
||||
val content: EventContent,
|
||||
val senderId: UserId,
|
||||
val senderProfile: ProfileTimelineDetails,
|
||||
val senderProfile: ProfileDetails,
|
||||
val timestamp: Long,
|
||||
)
|
||||
|
|
|
|||
|
|
@ -27,7 +27,7 @@ data class EventTimelineItem(
|
|||
val reactions: ImmutableList<EventReaction>,
|
||||
val receipts: ImmutableList<Receipt>,
|
||||
val sender: UserId,
|
||||
val senderProfile: ProfileTimelineDetails,
|
||||
val senderProfile: ProfileDetails,
|
||||
val timestamp: Long,
|
||||
val content: EventContent,
|
||||
val origin: TimelineItemEventOrigin?,
|
||||
|
|
|
|||
|
|
@ -25,7 +25,7 @@ sealed interface InReplyTo {
|
|||
val eventId: EventId,
|
||||
val content: EventContent,
|
||||
val senderId: UserId,
|
||||
val senderProfile: ProfileTimelineDetails,
|
||||
val senderProfile: ProfileDetails,
|
||||
) : InReplyTo
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -12,20 +12,20 @@ import androidx.compose.runtime.Immutable
|
|||
import io.element.android.libraries.matrix.api.core.UserId
|
||||
|
||||
@Immutable
|
||||
sealed interface ProfileTimelineDetails {
|
||||
data object Unavailable : ProfileTimelineDetails
|
||||
sealed interface ProfileDetails {
|
||||
data object Unavailable : ProfileDetails
|
||||
|
||||
data object Pending : ProfileTimelineDetails
|
||||
data object Pending : ProfileDetails
|
||||
|
||||
data class Ready(
|
||||
val displayName: String?,
|
||||
val displayNameAmbiguous: Boolean,
|
||||
val avatarUrl: String?
|
||||
) : ProfileTimelineDetails
|
||||
) : ProfileDetails
|
||||
|
||||
data class Error(
|
||||
val message: String
|
||||
) : ProfileTimelineDetails
|
||||
) : ProfileDetails
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -34,9 +34,9 @@ sealed interface ProfileTimelineDetails {
|
|||
* If the display name is ambiguous, the user ID is appended in parentheses.
|
||||
* Otherwise, the display name is returned.
|
||||
*/
|
||||
fun ProfileTimelineDetails.getDisambiguatedDisplayName(userId: UserId): String {
|
||||
fun ProfileDetails.getDisambiguatedDisplayName(userId: UserId): String {
|
||||
return when (this) {
|
||||
is ProfileTimelineDetails.Ready -> when {
|
||||
is ProfileDetails.Ready -> when {
|
||||
displayName == null -> userId.value
|
||||
displayNameAmbiguous -> "$displayName ($userId)"
|
||||
else -> displayName
|
||||
|
|
@ -45,16 +45,16 @@ fun ProfileTimelineDetails.getDisambiguatedDisplayName(userId: UserId): String {
|
|||
}
|
||||
}
|
||||
|
||||
fun ProfileTimelineDetails.getDisplayName(): String? {
|
||||
fun ProfileDetails.getDisplayName(): String? {
|
||||
return when (this) {
|
||||
is ProfileTimelineDetails.Ready -> displayName
|
||||
is ProfileDetails.Ready -> displayName
|
||||
else -> null
|
||||
}
|
||||
}
|
||||
|
||||
fun ProfileTimelineDetails.getAvatarUrl(): String? {
|
||||
fun ProfileDetails.getAvatarUrl(): String? {
|
||||
return when (this) {
|
||||
is ProfileTimelineDetails.Ready -> avatarUrl
|
||||
is ProfileDetails.Ready -> avatarUrl
|
||||
else -> null
|
||||
}
|
||||
}
|
||||
|
|
@ -18,23 +18,23 @@ private val aUserId = UserId(A_USER_ID)
|
|||
class ProfileTimelineDetailsTest {
|
||||
@Test
|
||||
fun `getDisambiguatedDisplayName of Unavailable should be equal to userId`() {
|
||||
assertThat(ProfileTimelineDetails.Unavailable.getDisambiguatedDisplayName(aUserId)).isEqualTo(A_USER_ID)
|
||||
assertThat(ProfileDetails.Unavailable.getDisambiguatedDisplayName(aUserId)).isEqualTo(A_USER_ID)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `getDisambiguatedDisplayName of Error should be equal to userId`() {
|
||||
assertThat(ProfileTimelineDetails.Error("An error").getDisambiguatedDisplayName(aUserId)).isEqualTo(A_USER_ID)
|
||||
assertThat(ProfileDetails.Error("An error").getDisambiguatedDisplayName(aUserId)).isEqualTo(A_USER_ID)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `getDisambiguatedDisplayName of Pending should be equal to userId`() {
|
||||
assertThat(ProfileTimelineDetails.Pending.getDisambiguatedDisplayName(aUserId)).isEqualTo(A_USER_ID)
|
||||
assertThat(ProfileDetails.Pending.getDisambiguatedDisplayName(aUserId)).isEqualTo(A_USER_ID)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `getDisambiguatedDisplayName of Ready without display name should be equal to userId`() {
|
||||
assertThat(
|
||||
ProfileTimelineDetails.Ready(
|
||||
ProfileDetails.Ready(
|
||||
displayName = null,
|
||||
displayNameAmbiguous = false,
|
||||
avatarUrl = null,
|
||||
|
|
@ -45,7 +45,7 @@ class ProfileTimelineDetailsTest {
|
|||
@Test
|
||||
fun `getDisambiguatedDisplayName of Ready with display name should be equal to display name`() {
|
||||
assertThat(
|
||||
ProfileTimelineDetails.Ready(
|
||||
ProfileDetails.Ready(
|
||||
displayName = "Alice",
|
||||
displayNameAmbiguous = false,
|
||||
avatarUrl = null,
|
||||
|
|
@ -56,7 +56,7 @@ class ProfileTimelineDetailsTest {
|
|||
@Test
|
||||
fun `getDisambiguatedDisplayName of Ready with display name and ambiguous should be equal to display name with user id`() {
|
||||
assertThat(
|
||||
ProfileTimelineDetails.Ready(
|
||||
ProfileDetails.Ready(
|
||||
displayName = "Alice",
|
||||
displayNameAmbiguous = true,
|
||||
avatarUrl = null,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue