Reply: remove inner tags when replying

This commit is contained in:
ganfra 2020-07-23 18:23:49 +02:00
parent aa5de1896f
commit 794b89c041
3 changed files with 22 additions and 7 deletions

View file

@ -178,7 +178,8 @@ internal class LocalEchoEventFactory @Inject constructor(
permalink, permalink,
userLink, userLink,
originalEvent.senderInfo.disambiguatedDisplayName, originalEvent.senderInfo.disambiguatedDisplayName,
body.takeFormatted(), // Remove inner mx_reply tags if any
body.takeFormatted().replace(MX_REPLY_REGEX, ""),
createTextContent(newBodyText, newBodyAutoMarkdown).takeFormatted() createTextContent(newBodyText, newBodyAutoMarkdown).takeFormatted()
) )
// //
@ -372,7 +373,8 @@ internal class LocalEchoEventFactory @Inject constructor(
permalink, permalink,
userLink, userLink,
userId, userId,
body.takeFormatted(), // Remove inner mx_reply tags if any
body.takeFormatted().replace(MX_REPLY_REGEX, ""),
createTextContent(replyText, autoMarkdown).takeFormatted() createTextContent(replyText, autoMarkdown).takeFormatted()
) )
// //
@ -485,5 +487,7 @@ internal class LocalEchoEventFactory @Inject constructor(
// </mx-reply> // </mx-reply>
// No whitespace because currently breaks temporary formatted text to Span // No whitespace because currently breaks temporary formatted text to Span
const val REPLY_PATTERN = """<mx-reply><blockquote><a href="%s">In reply to</a> <a href="%s">%s</a><br />%s</blockquote></mx-reply>%s""" const val REPLY_PATTERN = """<mx-reply><blockquote><a href="%s">In reply to</a> <a href="%s">%s</a><br />%s</blockquote></mx-reply>%s"""
// This is used to replace inner mx-reply tags
val MX_REPLY_REGEX = "<mx-reply>.*</mx-reply>".toRegex()
} }
} }

View file

@ -353,11 +353,11 @@ class MessageItemFactory @Inject constructor(
codeVisitor.visit(localFormattedBody) codeVisitor.visit(localFormattedBody)
when (codeVisitor.codeKind) { when (codeVisitor.codeKind) {
CodeVisitor.Kind.BLOCK -> { CodeVisitor.Kind.BLOCK -> {
val codeFormattedBlock = htmlRenderer.get().render(localFormattedBody) val codeFormattedBlock = htmlRenderer.get().render(localFormattedBody) ?: messageContent.formattedBody!!
buildCodeBlockItem(codeFormattedBlock, informationData, highlight, callback, attributes) buildCodeBlockItem(codeFormattedBlock, informationData, highlight, callback, attributes)
} }
CodeVisitor.Kind.INLINE -> { CodeVisitor.Kind.INLINE -> {
val codeFormatted = htmlRenderer.get().render(localFormattedBody) val codeFormatted = htmlRenderer.get().render(localFormattedBody)?: messageContent.formattedBody!!
buildMessageTextItem(codeFormatted, false, informationData, highlight, callback, attributes) buildMessageTextItem(codeFormatted, false, informationData, highlight, callback, attributes)
} }
CodeVisitor.Kind.NONE -> { CodeVisitor.Kind.NONE -> {

View file

@ -25,6 +25,7 @@ import io.noties.markwon.Markwon
import io.noties.markwon.html.HtmlPlugin import io.noties.markwon.html.HtmlPlugin
import io.noties.markwon.html.TagHandlerNoOp import io.noties.markwon.html.TagHandlerNoOp
import org.commonmark.node.Node import org.commonmark.node.Node
import timber.log.Timber
import javax.inject.Inject import javax.inject.Inject
import javax.inject.Singleton import javax.inject.Singleton
@ -41,11 +42,21 @@ class EventHtmlRenderer @Inject constructor(context: Context,
} }
fun render(text: String): CharSequence { fun render(text: String): CharSequence {
return markwon.toMarkdown(text) return try {
markwon.toMarkdown(text)
}catch (failure: Throwable){
Timber.v("Fail to render $text to html")
text
}
} }
fun render(node: Node): CharSequence { fun render(node: Node): CharSequence? {
return markwon.render(node) return try {
markwon.render(node)
}catch (failure: Throwable){
Timber.v("Fail to render $node to html")
return null
}
} }
} }