renaming timeline text to content, text is a subtype

This commit is contained in:
Adam Brown 2022-03-18 22:40:49 +00:00
parent 9c6ba3d352
commit 8321b5a760
9 changed files with 28 additions and 28 deletions

View File

@ -311,7 +311,7 @@ internal sealed class DecryptedContent {
@Serializable
@SerialName("m.room.message")
internal data class TimelineText(
@SerialName("content") val content: ApiTimelineEvent.TimelineText.Content,
@SerialName("content") val content: ApiTimelineEvent.TimelineMessage.Content,
) : DecryptedContent()
@Serializable
@ -333,7 +333,7 @@ internal sealed class ApiEncryptedContent {
@SerialName("device_id") val deviceId: DeviceId,
@SerialName("sender_key") val senderKey: String,
@SerialName("session_id") val sessionId: SessionId,
@SerialName("m.relates_to") val relation: ApiTimelineEvent.TimelineText.Relation? = null,
@SerialName("m.relates_to") val relation: ApiTimelineEvent.TimelineMessage.Relation? = null,
) : ApiEncryptedContent()
@Serializable
@ -437,7 +437,7 @@ internal sealed class ApiTimelineEvent {
@Serializable
@SerialName("m.room.message")
internal data class TimelineText(
internal data class TimelineMessage(
@SerialName("event_id") val id: EventId,
@SerialName("sender") val senderId: UserId,
@SerialName("content") val content: Content,
@ -511,4 +511,4 @@ internal object EncryptedContentDeserializer : KSerializer<ApiEncryptedContent>
override fun serialize(encoder: Encoder, value: ApiEncryptedContent) = TODO("Not yet implemented")
}
}

View File

@ -36,7 +36,7 @@ internal class SyncEventDecrypter(
ApiEncryptedContent.Unknown -> null
}
when (it) {
is DecryptedContent.TimelineText -> ApiTimelineEvent.TimelineText(
is DecryptedContent.TimelineText -> ApiTimelineEvent.TimelineMessage(
event.eventId,
event.senderId,
it.content.copy(relation = relation),

View File

@ -16,7 +16,7 @@ internal class EventLookupUseCase(
}
private fun DecryptedTimeline.lookup(id: EventId) = this.value
.filterIsInstance<ApiTimelineEvent.TimelineText>()
.filterIsInstance<ApiTimelineEvent.TimelineMessage>()
.firstOrNull { it.id == id }
?.let { LookupResult(apiTimelineEvent = it, roomEvent = null) }

View File

@ -4,12 +4,12 @@ import app.dapk.st.matrix.sync.RoomEvent
import app.dapk.st.matrix.sync.internal.request.ApiTimelineEvent
internal data class LookupResult(
private val apiTimelineEvent: ApiTimelineEvent.TimelineText?,
private val apiTimelineEvent: ApiTimelineEvent.TimelineMessage?,
private val roomEvent: RoomEvent?,
) {
inline fun <T> fold(
onApiTimelineEvent: (ApiTimelineEvent.TimelineText) -> T?,
onApiTimelineEvent: (ApiTimelineEvent.TimelineMessage) -> T?,
onRoomEvent: (RoomEvent) -> T?,
onEmpty: () -> T?,
): T? {

View File

@ -44,7 +44,7 @@ internal class RoomEventCreator(
}
}
suspend fun ApiTimelineEvent.TimelineText.toRoomEvent(roomId: RoomId, lookup: Lookup): RoomEvent? {
suspend fun ApiTimelineEvent.TimelineMessage.toRoomEvent(roomId: RoomId, lookup: Lookup): RoomEvent? {
return when {
this.isEdit() -> handleEdit(roomId, this.content.relation!!.eventId!!, lookup)
this.isReply() -> handleReply(roomId, lookup)
@ -52,7 +52,7 @@ internal class RoomEventCreator(
}
}
private suspend fun ApiTimelineEvent.TimelineText.handleEdit(roomId: RoomId, editedEventId: EventId, lookup: Lookup): RoomEvent? {
private suspend fun ApiTimelineEvent.TimelineMessage.handleEdit(roomId: RoomId, editedEventId: EventId, lookup: Lookup): RoomEvent? {
return lookup(editedEventId).fold(
onApiTimelineEvent = {
ifOrNull(this.utcTimestamp > it.utcTimestamp) {
@ -76,13 +76,13 @@ internal class RoomEventCreator(
)
}
private fun RoomEvent.Message.edited(edit: ApiTimelineEvent.TimelineText) = this.copy(
private fun RoomEvent.Message.edited(edit: ApiTimelineEvent.TimelineMessage) = this.copy(
content = edit.content.body?.removePrefix(" * ")?.trim() ?: "redacted",
utcTimestamp = edit.utcTimestamp,
edited = true,
)
private suspend fun ApiTimelineEvent.TimelineText.handleReply(roomId: RoomId, lookup: Lookup): RoomEvent {
private suspend fun ApiTimelineEvent.TimelineMessage.handleReply(roomId: RoomId, lookup: Lookup): RoomEvent {
val replyTo = this.content.relation!!.inReplyTo!!
val relationEvent = lookup(replyTo.eventId).fold(
@ -107,7 +107,7 @@ internal class RoomEventCreator(
}
}
private suspend fun ApiTimelineEvent.TimelineText.toMessage(
private suspend fun ApiTimelineEvent.TimelineMessage.toMessage(
roomId: RoomId,
content: String = this.content.body ?: "redacted",
edited: Boolean = false,
@ -128,5 +128,5 @@ private fun String.stripTags() = this.substring(this.indexOf("</mx-reply>") + "<
.replace("<em>", "")
.replace("</em>", "")
private fun ApiTimelineEvent.TimelineText.isEdit() = this.content.relation?.relationType == "m.replace" && this.content.relation.eventId != null
private fun ApiTimelineEvent.TimelineText.isReply() = this.content.relation?.inReplyTo != null
private fun ApiTimelineEvent.TimelineMessage.isEdit() = this.content.relation?.relationType == "m.replace" && this.content.relation.eventId != null
private fun ApiTimelineEvent.TimelineMessage.isReply() = this.content.relation?.inReplyTo != null

View File

@ -28,7 +28,7 @@ internal class TimelineEventsProcessor(
decryptedTimeline.value.mapNotNull { event ->
val roomEvent = when (event) {
is ApiTimelineEvent.Encrypted -> event.toRoomEvent(roomToProcess.roomId)
is ApiTimelineEvent.TimelineText -> event.toRoomEvent(roomToProcess.roomId) { eventId ->
is ApiTimelineEvent.TimelineMessage -> event.toRoomEvent(roomToProcess.roomId) { eventId ->
eventLookupUseCase.lookup(eventId, decryptedTimeline, decryptedPreviousEvents)
}
is ApiTimelineEvent.Encryption -> null

View File

@ -270,7 +270,7 @@ internal class RoomEventCreatorTest {
)
}
private fun givenLookup(event: ApiTimelineEvent.TimelineText): suspend (EventId) -> LookupResult {
private fun givenLookup(event: ApiTimelineEvent.TimelineMessage): suspend (EventId) -> LookupResult {
return {
if (it == event.id) LookupResult(event, roomEvent = null) else throw IllegalArgumentException("unexpected id: $it")
}
@ -283,7 +283,7 @@ internal class RoomEventCreatorTest {
}
}
private fun ApiTimelineEvent.TimelineText.toEditEvent(newTimestamp: Long, messageContent: String) = this.copy(
private fun ApiTimelineEvent.TimelineMessage.toEditEvent(newTimestamp: Long, messageContent: String) = this.copy(
id = anEventId("a-new-event-id"),
utcTimestamp = newTimestamp,
content = aTimelineTextEventContent(
@ -301,7 +301,7 @@ private fun RoomEvent.Message.toEditEvent(newTimestamp: Long, messageContent: St
)
)
private fun ApiTimelineEvent.TimelineText.toReplyEvent(messageContent: String) = anApiTimelineTextEvent(
private fun ApiTimelineEvent.TimelineMessage.toReplyEvent(messageContent: String) = anApiTimelineTextEvent(
id = anEventId("a-new-event-id"),
content = aTimelineTextEventContent(
body = "${this.content} $messageContent",

View File

@ -18,7 +18,7 @@ internal class FakeRoomEventCreator {
coEvery { with(instance) { event.toRoomEvent(roomId) } } returns result
}
fun givenCreatesUsingLookup(roomId: RoomId, eventIdToLookup: EventId, event: ApiTimelineEvent.TimelineText, result: RoomEvent, lookupResult: LookupResult) {
fun givenCreatesUsingLookup(roomId: RoomId, eventIdToLookup: EventId, event: ApiTimelineEvent.TimelineMessage, result: RoomEvent, lookupResult: LookupResult) {
val slot = slot<suspend (EventId) -> LookupResult>()
coEvery { with(instance) { event.toRoomEvent(roomId, capture(slot)) } } answers {
runBlocking {

View File

@ -31,28 +31,28 @@ internal fun anEphemeralTypingEvent(
internal fun anApiTimelineTextEvent(
id: EventId = anEventId(),
senderId: UserId = aUserId(),
content: ApiTimelineEvent.TimelineText.Content = aTimelineTextEventContent(),
content: ApiTimelineEvent.TimelineMessage.Content = aTimelineTextEventContent(),
utcTimestamp: Long = 0L,
decryptionStatus: ApiTimelineEvent.DecryptionStatus? = null
) = ApiTimelineEvent.TimelineText(id, senderId, content, utcTimestamp, decryptionStatus)
) = ApiTimelineEvent.TimelineMessage(id, senderId, content, utcTimestamp, decryptionStatus)
internal fun aTimelineTextEventContent(
body: String? = null,
formattedBody: String? = null,
type: String? = null,
relation: ApiTimelineEvent.TimelineText.Relation? = null,
) = ApiTimelineEvent.TimelineText.Content(body, formattedBody, type, relation)
relation: ApiTimelineEvent.TimelineMessage.Relation? = null,
) = ApiTimelineEvent.TimelineMessage.Content(body, formattedBody, type, relation)
internal fun anEditRelation(originalId: EventId) = ApiTimelineEvent.TimelineText.Relation(
internal fun anEditRelation(originalId: EventId) = ApiTimelineEvent.TimelineMessage.Relation(
relationType = "m.replace",
inReplyTo = null,
eventId = originalId,
)
internal fun aReplyRelation(originalId: EventId) = ApiTimelineEvent.TimelineText.Relation(
internal fun aReplyRelation(originalId: EventId) = ApiTimelineEvent.TimelineMessage.Relation(
relationType = null,
eventId = null,
inReplyTo = ApiTimelineEvent.TimelineText.InReplyTo(originalId),
inReplyTo = ApiTimelineEvent.TimelineMessage.InReplyTo(originalId),
)
internal fun anEncryptedApiTimelineEvent(
@ -104,7 +104,7 @@ internal fun aMegolmApiEncryptedContent(
deviceId: DeviceId = aDeviceId(),
senderKey: String = "a-sender-key",
sessionId: SessionId = aSessionId(),
relation: ApiTimelineEvent.TimelineText.Relation? = null,
relation: ApiTimelineEvent.TimelineMessage.Relation? = null,
) = ApiEncryptedContent.MegOlmV1(cipherText, deviceId, senderKey, sessionId, relation)
internal fun anOlmApiEncryptedContent(