mirror of
https://github.com/ouchadam/small-talk.git
synced 2025-03-25 00:10:14 +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
|
@Serializable
|
||||||
@SerialName("m.room.message")
|
@SerialName("m.room.message")
|
||||||
internal data class TimelineText(
|
internal data class TimelineText(
|
||||||
@SerialName("content") val content: ApiTimelineEvent.TimelineText.Content,
|
@SerialName("content") val content: ApiTimelineEvent.TimelineMessage.Content,
|
||||||
) : DecryptedContent()
|
) : DecryptedContent()
|
||||||
|
|
||||||
@Serializable
|
@Serializable
|
||||||
@ -333,7 +333,7 @@ internal sealed class ApiEncryptedContent {
|
|||||||
@SerialName("device_id") val deviceId: DeviceId,
|
@SerialName("device_id") val deviceId: DeviceId,
|
||||||
@SerialName("sender_key") val senderKey: String,
|
@SerialName("sender_key") val senderKey: String,
|
||||||
@SerialName("session_id") val sessionId: SessionId,
|
@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()
|
) : ApiEncryptedContent()
|
||||||
|
|
||||||
@Serializable
|
@Serializable
|
||||||
@ -437,7 +437,7 @@ internal sealed class ApiTimelineEvent {
|
|||||||
|
|
||||||
@Serializable
|
@Serializable
|
||||||
@SerialName("m.room.message")
|
@SerialName("m.room.message")
|
||||||
internal data class TimelineText(
|
internal data class TimelineMessage(
|
||||||
@SerialName("event_id") val id: EventId,
|
@SerialName("event_id") val id: EventId,
|
||||||
@SerialName("sender") val senderId: UserId,
|
@SerialName("sender") val senderId: UserId,
|
||||||
@SerialName("content") val content: Content,
|
@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")
|
override fun serialize(encoder: Encoder, value: ApiEncryptedContent) = TODO("Not yet implemented")
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -36,7 +36,7 @@ internal class SyncEventDecrypter(
|
|||||||
ApiEncryptedContent.Unknown -> null
|
ApiEncryptedContent.Unknown -> null
|
||||||
}
|
}
|
||||||
when (it) {
|
when (it) {
|
||||||
is DecryptedContent.TimelineText -> ApiTimelineEvent.TimelineText(
|
is DecryptedContent.TimelineText -> ApiTimelineEvent.TimelineMessage(
|
||||||
event.eventId,
|
event.eventId,
|
||||||
event.senderId,
|
event.senderId,
|
||||||
it.content.copy(relation = relation),
|
it.content.copy(relation = relation),
|
||||||
|
@ -16,7 +16,7 @@ internal class EventLookupUseCase(
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun DecryptedTimeline.lookup(id: EventId) = this.value
|
private fun DecryptedTimeline.lookup(id: EventId) = this.value
|
||||||
.filterIsInstance<ApiTimelineEvent.TimelineText>()
|
.filterIsInstance<ApiTimelineEvent.TimelineMessage>()
|
||||||
.firstOrNull { it.id == id }
|
.firstOrNull { it.id == id }
|
||||||
?.let { LookupResult(apiTimelineEvent = it, roomEvent = null) }
|
?.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
|
import app.dapk.st.matrix.sync.internal.request.ApiTimelineEvent
|
||||||
|
|
||||||
internal data class LookupResult(
|
internal data class LookupResult(
|
||||||
private val apiTimelineEvent: ApiTimelineEvent.TimelineText?,
|
private val apiTimelineEvent: ApiTimelineEvent.TimelineMessage?,
|
||||||
private val roomEvent: RoomEvent?,
|
private val roomEvent: RoomEvent?,
|
||||||
) {
|
) {
|
||||||
|
|
||||||
inline fun <T> fold(
|
inline fun <T> fold(
|
||||||
onApiTimelineEvent: (ApiTimelineEvent.TimelineText) -> T?,
|
onApiTimelineEvent: (ApiTimelineEvent.TimelineMessage) -> T?,
|
||||||
onRoomEvent: (RoomEvent) -> T?,
|
onRoomEvent: (RoomEvent) -> T?,
|
||||||
onEmpty: () -> T?,
|
onEmpty: () -> T?,
|
||||||
): 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 {
|
return when {
|
||||||
this.isEdit() -> handleEdit(roomId, this.content.relation!!.eventId!!, lookup)
|
this.isEdit() -> handleEdit(roomId, this.content.relation!!.eventId!!, lookup)
|
||||||
this.isReply() -> handleReply(roomId, 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(
|
return lookup(editedEventId).fold(
|
||||||
onApiTimelineEvent = {
|
onApiTimelineEvent = {
|
||||||
ifOrNull(this.utcTimestamp > it.utcTimestamp) {
|
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",
|
content = edit.content.body?.removePrefix(" * ")?.trim() ?: "redacted",
|
||||||
utcTimestamp = edit.utcTimestamp,
|
utcTimestamp = edit.utcTimestamp,
|
||||||
edited = true,
|
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 replyTo = this.content.relation!!.inReplyTo!!
|
||||||
|
|
||||||
val relationEvent = lookup(replyTo.eventId).fold(
|
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,
|
roomId: RoomId,
|
||||||
content: String = this.content.body ?: "redacted",
|
content: String = this.content.body ?: "redacted",
|
||||||
edited: Boolean = false,
|
edited: Boolean = false,
|
||||||
@ -128,5 +128,5 @@ private fun String.stripTags() = this.substring(this.indexOf("</mx-reply>") + "<
|
|||||||
.replace("<em>", "")
|
.replace("<em>", "")
|
||||||
.replace("</em>", "")
|
.replace("</em>", "")
|
||||||
|
|
||||||
private fun ApiTimelineEvent.TimelineText.isEdit() = this.content.relation?.relationType == "m.replace" && this.content.relation.eventId != null
|
private fun ApiTimelineEvent.TimelineMessage.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.isReply() = this.content.relation?.inReplyTo != null
|
@ -28,7 +28,7 @@ internal class TimelineEventsProcessor(
|
|||||||
decryptedTimeline.value.mapNotNull { event ->
|
decryptedTimeline.value.mapNotNull { event ->
|
||||||
val roomEvent = when (event) {
|
val roomEvent = when (event) {
|
||||||
is ApiTimelineEvent.Encrypted -> event.toRoomEvent(roomToProcess.roomId)
|
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)
|
eventLookupUseCase.lookup(eventId, decryptedTimeline, decryptedPreviousEvents)
|
||||||
}
|
}
|
||||||
is ApiTimelineEvent.Encryption -> null
|
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 {
|
return {
|
||||||
if (it == event.id) LookupResult(event, roomEvent = null) else throw IllegalArgumentException("unexpected id: $it")
|
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"),
|
id = anEventId("a-new-event-id"),
|
||||||
utcTimestamp = newTimestamp,
|
utcTimestamp = newTimestamp,
|
||||||
content = aTimelineTextEventContent(
|
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"),
|
id = anEventId("a-new-event-id"),
|
||||||
content = aTimelineTextEventContent(
|
content = aTimelineTextEventContent(
|
||||||
body = "${this.content} $messageContent",
|
body = "${this.content} $messageContent",
|
||||||
|
@ -18,7 +18,7 @@ internal class FakeRoomEventCreator {
|
|||||||
coEvery { with(instance) { event.toRoomEvent(roomId) } } returns result
|
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>()
|
val slot = slot<suspend (EventId) -> LookupResult>()
|
||||||
coEvery { with(instance) { event.toRoomEvent(roomId, capture(slot)) } } answers {
|
coEvery { with(instance) { event.toRoomEvent(roomId, capture(slot)) } } answers {
|
||||||
runBlocking {
|
runBlocking {
|
||||||
|
@ -31,28 +31,28 @@ internal fun anEphemeralTypingEvent(
|
|||||||
internal fun anApiTimelineTextEvent(
|
internal fun anApiTimelineTextEvent(
|
||||||
id: EventId = anEventId(),
|
id: EventId = anEventId(),
|
||||||
senderId: UserId = aUserId(),
|
senderId: UserId = aUserId(),
|
||||||
content: ApiTimelineEvent.TimelineText.Content = aTimelineTextEventContent(),
|
content: ApiTimelineEvent.TimelineMessage.Content = aTimelineTextEventContent(),
|
||||||
utcTimestamp: Long = 0L,
|
utcTimestamp: Long = 0L,
|
||||||
decryptionStatus: ApiTimelineEvent.DecryptionStatus? = null
|
decryptionStatus: ApiTimelineEvent.DecryptionStatus? = null
|
||||||
) = ApiTimelineEvent.TimelineText(id, senderId, content, utcTimestamp, decryptionStatus)
|
) = ApiTimelineEvent.TimelineMessage(id, senderId, content, utcTimestamp, decryptionStatus)
|
||||||
|
|
||||||
internal fun aTimelineTextEventContent(
|
internal fun aTimelineTextEventContent(
|
||||||
body: String? = null,
|
body: String? = null,
|
||||||
formattedBody: String? = null,
|
formattedBody: String? = null,
|
||||||
type: String? = null,
|
type: String? = null,
|
||||||
relation: ApiTimelineEvent.TimelineText.Relation? = null,
|
relation: ApiTimelineEvent.TimelineMessage.Relation? = null,
|
||||||
) = ApiTimelineEvent.TimelineText.Content(body, formattedBody, type, relation)
|
) = 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",
|
relationType = "m.replace",
|
||||||
inReplyTo = null,
|
inReplyTo = null,
|
||||||
eventId = originalId,
|
eventId = originalId,
|
||||||
)
|
)
|
||||||
|
|
||||||
internal fun aReplyRelation(originalId: EventId) = ApiTimelineEvent.TimelineText.Relation(
|
internal fun aReplyRelation(originalId: EventId) = ApiTimelineEvent.TimelineMessage.Relation(
|
||||||
relationType = null,
|
relationType = null,
|
||||||
eventId = null,
|
eventId = null,
|
||||||
inReplyTo = ApiTimelineEvent.TimelineText.InReplyTo(originalId),
|
inReplyTo = ApiTimelineEvent.TimelineMessage.InReplyTo(originalId),
|
||||||
)
|
)
|
||||||
|
|
||||||
internal fun anEncryptedApiTimelineEvent(
|
internal fun anEncryptedApiTimelineEvent(
|
||||||
@ -104,7 +104,7 @@ internal fun aMegolmApiEncryptedContent(
|
|||||||
deviceId: DeviceId = aDeviceId(),
|
deviceId: DeviceId = aDeviceId(),
|
||||||
senderKey: String = "a-sender-key",
|
senderKey: String = "a-sender-key",
|
||||||
sessionId: SessionId = aSessionId(),
|
sessionId: SessionId = aSessionId(),
|
||||||
relation: ApiTimelineEvent.TimelineText.Relation? = null,
|
relation: ApiTimelineEvent.TimelineMessage.Relation? = null,
|
||||||
) = ApiEncryptedContent.MegOlmV1(cipherText, deviceId, senderKey, sessionId, relation)
|
) = ApiEncryptedContent.MegOlmV1(cipherText, deviceId, senderKey, sessionId, relation)
|
||||||
|
|
||||||
internal fun anOlmApiEncryptedContent(
|
internal fun anOlmApiEncryptedContent(
|
||||||
|
Loading…
x
Reference in New Issue
Block a user