All Downloads are FREE. Search and download functionalities are using the official Maven repository.

commonMain.net.folivo.trixnity.client.room.message.computeRichReplies.kt Maven / Gradle / Ivy

There is a newer version: 4.7.1
Show newest version
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" }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy