commonMain.net.folivo.trixnity.client.room.message.computeRichReplies.kt Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of trixnity-client-jvm Show documentation
Show all versions of trixnity-client-jvm Show documentation
Multiplatform Kotlin SDK for matrix-protocol
package net.folivo.trixnity.client.room.message
import net.folivo.trixnity.client.store.TimelineEvent
import net.folivo.trixnity.client.store.eventId
import net.folivo.trixnity.client.store.roomId
import net.folivo.trixnity.core.model.events.m.room.RoomMessageEventContent
import net.folivo.trixnity.core.model.events.m.room.bodyWithoutFallback
import net.folivo.trixnity.core.model.events.m.room.formattedBodyWithoutFallback
internal fun computeRichReplies(
repliedEvent: TimelineEvent?,
body: String,
formattedBody: String?
): Pair {
val repliedEventContent = repliedEvent?.content?.getOrNull()
val richReplyBody =
if (repliedEvent != null && repliedEventContent is RoomMessageEventContent) {
val sender = "<${repliedEvent.event.sender.full}>"
when (repliedEventContent) {
is RoomMessageEventContent.TextBased.Emote -> "* $sender ${repliedEventContent.bodyWithoutFallback}".asFallback()
else -> "$sender ${repliedEventContent.bodyWithoutFallback}".asFallback()
} + "\n\n$body"
} else {
body
}
val richReplyFormattedBody =
if (repliedEvent != null && repliedEventContent is RoomMessageEventContent) {
buildString {
appendLine(
"""
In reply to
${if (repliedEventContent is RoomMessageEventContent.TextBased.Emote) "* " else ""}${repliedEvent.event.sender.full}
""".trimIndent()
)
appendLine(
repliedEventContent.formattedBodyWithoutFallback
?: repliedEventContent.bodyWithoutFallback.replace("\n", "
")
)
appendLine(
"""
""".trimIndent()
)
append(formattedBody ?: body.replace("\n", "
"))
}
} else formattedBody
return Pair(richReplyBody, richReplyFormattedBody)
}
private fun String.asFallback(): String = this.lineSequence().joinToString("\n") { "> $it" }