removing previous tag stripping
This commit is contained in:
parent
de8c476ed5
commit
87f25e6e66
|
@ -23,7 +23,7 @@ fun aRoomOverview(
|
||||||
fun anEncryptedRoomMessageEvent(
|
fun anEncryptedRoomMessageEvent(
|
||||||
eventId: EventId = anEventId(),
|
eventId: EventId = anEventId(),
|
||||||
utcTimestamp: Long = 0L,
|
utcTimestamp: Long = 0L,
|
||||||
content: String = "encrypted-content",
|
content: RichText = RichText.of("encrypted-content"),
|
||||||
author: RoomMember = aRoomMember(),
|
author: RoomMember = aRoomMember(),
|
||||||
meta: MessageMeta = MessageMeta.FromServer,
|
meta: MessageMeta = MessageMeta.FromServer,
|
||||||
edited: Boolean = false,
|
edited: Boolean = false,
|
||||||
|
@ -47,7 +47,7 @@ fun aRoomReplyMessageEvent(
|
||||||
fun aRoomMessageEvent(
|
fun aRoomMessageEvent(
|
||||||
eventId: EventId = anEventId(),
|
eventId: EventId = anEventId(),
|
||||||
utcTimestamp: Long = 0L,
|
utcTimestamp: Long = 0L,
|
||||||
content: String = "message-content",
|
content: RichText = RichText.of("message-content"),
|
||||||
author: RoomMember = aRoomMember(),
|
author: RoomMember = aRoomMember(),
|
||||||
meta: MessageMeta = MessageMeta.FromServer,
|
meta: MessageMeta = MessageMeta.FromServer,
|
||||||
edited: Boolean = false,
|
edited: Boolean = false,
|
||||||
|
|
|
@ -7,8 +7,17 @@ data class RichText(val parts: Set<Part>) {
|
||||||
data class Bold(val content: String) : Part
|
data class Bold(val content: String) : Part
|
||||||
data class Italic(val content: String) : Part
|
data class Italic(val content: String) : Part
|
||||||
data class BoldItalic(val content: String) : Part
|
data class BoldItalic(val content: String) : Part
|
||||||
data class Person(val userId: String) : Part
|
data class Person(val displayName: String) : Part
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun RichText.asString() = parts.joinToString(separator = "")
|
fun RichText.asString() = parts.joinToString(separator = "") {
|
||||||
|
when(it) {
|
||||||
|
is RichText.Part.Bold -> it.content
|
||||||
|
is RichText.Part.BoldItalic -> it.content
|
||||||
|
is RichText.Part.Italic -> it.content
|
||||||
|
is RichText.Part.Link -> it.label
|
||||||
|
is RichText.Part.Normal -> it.content
|
||||||
|
is RichText.Part.Person -> it.displayName
|
||||||
|
}
|
||||||
|
}
|
|
@ -280,7 +280,7 @@ fun RichText.toAnnotatedText() = buildAnnotatedString {
|
||||||
|
|
||||||
is RichText.Part.Normal -> append(it.content)
|
is RichText.Part.Normal -> append(it.content)
|
||||||
is RichText.Part.Person -> withStyle(nameStyle) {
|
is RichText.Part.Person -> withStyle(nameStyle) {
|
||||||
append("@${it.userId.substringBefore(':').removePrefix("@")}")
|
append("@${it.displayName.substringBefore(':').removePrefix("@")}")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -156,13 +156,17 @@ internal class TimelineEventMapper(
|
||||||
private suspend fun RoomEventFactory.mapToRoomEvent(source: ApiTimelineEvent.TimelineMessage): RoomEvent {
|
private suspend fun RoomEventFactory.mapToRoomEvent(source: ApiTimelineEvent.TimelineMessage): RoomEvent {
|
||||||
return when (source.content) {
|
return when (source.content) {
|
||||||
is ApiTimelineEvent.TimelineMessage.Content.Image -> source.toImageMessage(userCredentials, roomId)
|
is ApiTimelineEvent.TimelineMessage.Content.Image -> source.toImageMessage(userCredentials, roomId)
|
||||||
is ApiTimelineEvent.TimelineMessage.Content.Text -> source.toTextMessage(roomId, content = source.asTextContent().formattedBody ?: source.content.body ?: "")
|
is ApiTimelineEvent.TimelineMessage.Content.Text -> source.toTextMessage(
|
||||||
|
roomId,
|
||||||
|
content = source.asTextContent().formattedBody ?: source.content.body ?: ""
|
||||||
|
)
|
||||||
|
|
||||||
ApiTimelineEvent.TimelineMessage.Content.Ignored -> throw IllegalStateException()
|
ApiTimelineEvent.TimelineMessage.Content.Ignored -> throw IllegalStateException()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private suspend fun ApiTimelineEvent.TimelineMessage.toTextMessage(
|
private suspend fun ApiTimelineEvent.TimelineMessage.toTextMessage(
|
||||||
content: String = this.asTextContent().formattedBody?.stripTags() ?: this.asTextContent().body ?: "redacted",
|
content: String = this.asTextContent().formattedBody ?: this.asTextContent().body ?: "redacted",
|
||||||
edited: Boolean = false,
|
edited: Boolean = false,
|
||||||
utcTimestamp: Long = this.utcTimestamp,
|
utcTimestamp: Long = this.utcTimestamp,
|
||||||
) = with(roomEventFactory) { toTextMessage(roomId, content, edited, utcTimestamp) }
|
) = with(roomEventFactory) { toTextMessage(roomId, content, edited, utcTimestamp) }
|
||||||
|
|
|
@ -53,37 +53,3 @@ internal class RoomEventFactory(
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private fun String.indexOfOrNull(string: String) = this.indexOf(string).takeIf { it != -1 }
|
|
||||||
|
|
||||||
fun String.stripTags() = this
|
|
||||||
.run {
|
|
||||||
this.indexOfOrNull("</mx-reply>")?.let {
|
|
||||||
this.substring(it + "</mx-reply>".length)
|
|
||||||
} ?: this
|
|
||||||
}
|
|
||||||
.trim()
|
|
||||||
.replaceLinks()
|
|
||||||
.removeTag("p")
|
|
||||||
.removeTag("em")
|
|
||||||
.removeTag("strong")
|
|
||||||
.removeTag("code")
|
|
||||||
.removeTag("pre")
|
|
||||||
.replace(""", "\"")
|
|
||||||
.replace("'", "'")
|
|
||||||
.replace("<br />", "\n")
|
|
||||||
.replace("<br/>", "\n")
|
|
||||||
|
|
||||||
private fun String.removeTag(name: String) = this.replace("<$name>", "").replace("/$name>", "")
|
|
||||||
|
|
||||||
private fun String.replaceLinks(): String {
|
|
||||||
return this.indexOfOrNull("<a href=")?.let { start ->
|
|
||||||
val openTagClose = indexOfOrNull("\">")!!
|
|
||||||
val end = indexOfOrNull("</a>")!!
|
|
||||||
val content = this.substring(openTagClose + "\">".length, end)
|
|
||||||
this.replaceRange(start, end + "</a>".length, content)
|
|
||||||
} ?: this
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun ApiTimelineEvent.TimelineMessage.asTextContent() = this.content as ApiTimelineEvent.TimelineMessage.Content.Text
|
|
||||||
|
|
Loading…
Reference in New Issue