mirror of
https://github.com/ouchadam/small-talk.git
synced 2025-03-23 07:20:12 +01:00
renaming timeline text to content, text is a subtype
This commit is contained in:
parent
9c6ba3d352
commit
8321b5a760
@ -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")
|
||||
|
||||
}
|
||||
}
|
||||
|
@ -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),
|
||||
|
@ -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) }
|
||||
|
||||
|
@ -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? {
|
||||
|
@ -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
|
@ -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
|
||||
|
@ -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",
|
||||
|
@ -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 {
|
||||
|
@ -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(
|
||||
|
Loading…
x
Reference in New Issue
Block a user