Render emote in the timeline: prefix with sender display name
This commit is contained in:
parent
d323554b2d
commit
6c22ee3cec
3 changed files with 14 additions and 6 deletions
|
|
@ -24,6 +24,7 @@ import io.element.android.libraries.matrix.api.timeline.item.event.FailedToParse
|
||||||
import io.element.android.libraries.matrix.api.timeline.item.event.MessageContent
|
import io.element.android.libraries.matrix.api.timeline.item.event.MessageContent
|
||||||
import io.element.android.libraries.matrix.api.timeline.item.event.PollContent
|
import io.element.android.libraries.matrix.api.timeline.item.event.PollContent
|
||||||
import io.element.android.libraries.matrix.api.timeline.item.event.ProfileChangeContent
|
import io.element.android.libraries.matrix.api.timeline.item.event.ProfileChangeContent
|
||||||
|
import io.element.android.libraries.matrix.api.timeline.item.event.ProfileTimelineDetails
|
||||||
import io.element.android.libraries.matrix.api.timeline.item.event.RedactedContent
|
import io.element.android.libraries.matrix.api.timeline.item.event.RedactedContent
|
||||||
import io.element.android.libraries.matrix.api.timeline.item.event.RoomMembershipContent
|
import io.element.android.libraries.matrix.api.timeline.item.event.RoomMembershipContent
|
||||||
import io.element.android.libraries.matrix.api.timeline.item.event.StateContent
|
import io.element.android.libraries.matrix.api.timeline.item.event.StateContent
|
||||||
|
|
@ -49,7 +50,10 @@ class TimelineItemContentFactory @Inject constructor(
|
||||||
return when (val itemContent = eventTimelineItem.content) {
|
return when (val itemContent = eventTimelineItem.content) {
|
||||||
is FailedToParseMessageLikeContent -> failedToParseMessageFactory.create(itemContent)
|
is FailedToParseMessageLikeContent -> failedToParseMessageFactory.create(itemContent)
|
||||||
is FailedToParseStateContent -> failedToParseStateFactory.create(itemContent)
|
is FailedToParseStateContent -> failedToParseStateFactory.create(itemContent)
|
||||||
is MessageContent -> messageFactory.create(itemContent)
|
is MessageContent -> {
|
||||||
|
val senderDisplayName = (eventTimelineItem.senderProfile as? ProfileTimelineDetails.Ready)?.displayName ?: eventTimelineItem.sender.value
|
||||||
|
messageFactory.create(itemContent, senderDisplayName)
|
||||||
|
}
|
||||||
is ProfileChangeContent -> profileChangeFactory.create(eventTimelineItem)
|
is ProfileChangeContent -> profileChangeFactory.create(eventTimelineItem)
|
||||||
is RedactedContent -> redactedMessageFactory.create(itemContent)
|
is RedactedContent -> redactedMessageFactory.create(itemContent)
|
||||||
is RoomMembershipContent -> roomMembershipFactory.create(eventTimelineItem)
|
is RoomMembershipContent -> roomMembershipFactory.create(eventTimelineItem)
|
||||||
|
|
|
||||||
|
|
@ -48,11 +48,11 @@ class TimelineItemContentMessageFactory @Inject constructor(
|
||||||
private val fileExtensionExtractor: FileExtensionExtractor,
|
private val fileExtensionExtractor: FileExtensionExtractor,
|
||||||
) {
|
) {
|
||||||
|
|
||||||
fun create(content: MessageContent): TimelineItemEventContent {
|
fun create(content: MessageContent, senderDisplayName: String): TimelineItemEventContent {
|
||||||
return when (val messageType = content.type ?: UnknownMessageType) {
|
return when (val messageType = content.type ?: UnknownMessageType) {
|
||||||
is EmoteMessageType -> TimelineItemEmoteContent(
|
is EmoteMessageType -> TimelineItemEmoteContent(
|
||||||
body = messageType.body,
|
body = "* $senderDisplayName ${messageType.body}",
|
||||||
htmlDocument = messageType.formatted?.toHtmlDocument(),
|
htmlDocument = messageType.formatted?.toHtmlDocument(senderDisplayName),
|
||||||
isEdited = content.isEdited,
|
isEdited = content.isEdited,
|
||||||
)
|
)
|
||||||
is ImageMessageType -> {
|
is ImageMessageType -> {
|
||||||
|
|
|
||||||
|
|
@ -21,8 +21,12 @@ import io.element.android.libraries.matrix.api.timeline.item.event.MessageFormat
|
||||||
import org.jsoup.Jsoup
|
import org.jsoup.Jsoup
|
||||||
import org.jsoup.nodes.Document
|
import org.jsoup.nodes.Document
|
||||||
|
|
||||||
fun FormattedBody.toHtmlDocument(): Document? {
|
fun FormattedBody.toHtmlDocument(senderDisplayNamePrefix: String? = null): Document? {
|
||||||
return takeIf { it.format == MessageFormat.HTML }?.body?.let { formattedBody ->
|
return takeIf { it.format == MessageFormat.HTML }?.body?.let { formattedBody ->
|
||||||
Jsoup.parse(formattedBody)
|
if (senderDisplayNamePrefix != null) {
|
||||||
|
Jsoup.parse("* $senderDisplayNamePrefix $formattedBody")
|
||||||
|
} else {
|
||||||
|
Jsoup.parse(formattedBody)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue