mirror of
https://github.com/vector-im/element-android.git
synced 2024-11-16 02:05:06 +08:00
Enable on replies and quotes even if preference is disabled to fix newline issues.
This commit is contained in:
parent
20b5742227
commit
96062b7daa
@ -104,11 +104,9 @@ interface RelationService {
|
||||
* by the sdk into pills.
|
||||
* @param eventReplied the event referenced by the reply
|
||||
* @param replyText the reply text
|
||||
* @param autoMarkdown If true, the SDK will generate a formatted HTML message from the body text if markdown syntax is present
|
||||
*/
|
||||
fun replyToMessage(eventReplied: TimelineEvent,
|
||||
replyText: CharSequence,
|
||||
autoMarkdown: Boolean = false): Cancelable?
|
||||
replyText: CharSequence): Cancelable?
|
||||
|
||||
/**
|
||||
* Get the current EventAnnotationsSummary
|
||||
|
@ -64,7 +64,7 @@ interface SendService {
|
||||
* @param autoMarkdown If true, the SDK will generate a formatted HTML message from the body text if markdown syntax is present
|
||||
* @return a [Cancelable]
|
||||
*/
|
||||
fun sendQuotedTextMessage(quotedEvent: TimelineEvent, text: String, autoMarkdown: Boolean = false): Cancelable
|
||||
fun sendQuotedTextMessage(quotedEvent: TimelineEvent, text: String): Cancelable
|
||||
|
||||
/**
|
||||
* Method to send a media asynchronously.
|
||||
|
@ -131,8 +131,8 @@ internal class DefaultRelationService @AssistedInject constructor(
|
||||
return fetchEditHistoryTask.execute(FetchEditHistoryTask.Params(roomId, eventId))
|
||||
}
|
||||
|
||||
override fun replyToMessage(eventReplied: TimelineEvent, replyText: CharSequence, autoMarkdown: Boolean): Cancelable? {
|
||||
val event = eventFactory.createReplyTextEvent(roomId, eventReplied, replyText, autoMarkdown)
|
||||
override fun replyToMessage(eventReplied: TimelineEvent, replyText: CharSequence): Cancelable? {
|
||||
val event = eventFactory.createReplyTextEvent(roomId, eventReplied, replyText)
|
||||
?.also { saveLocalEcho(it) }
|
||||
?: return null
|
||||
|
||||
|
@ -67,7 +67,7 @@ internal class EventEditor @Inject constructor(private val eventSenderProcessor:
|
||||
val roomId = replyToEdit.roomId
|
||||
if (replyToEdit.root.sendState.hasFailed()) {
|
||||
// We create a new in memory event for the EventSenderProcessor but we keep the eventId of the failed event.
|
||||
val editedEvent = eventFactory.createReplyTextEvent(roomId, originalTimelineEvent, newBodyText, false)?.copy(
|
||||
val editedEvent = eventFactory.createReplyTextEvent(roomId, originalTimelineEvent, newBodyText)?.copy(
|
||||
eventId = replyToEdit.eventId
|
||||
) ?: return NoOpCancellable
|
||||
updateFailedEchoWithEvent(roomId, replyToEdit.eventId, editedEvent)
|
||||
@ -78,7 +78,6 @@ internal class EventEditor @Inject constructor(private val eventSenderProcessor:
|
||||
replyToEdit,
|
||||
originalTimelineEvent,
|
||||
newBodyText,
|
||||
true,
|
||||
MessageType.MSGTYPE_TEXT,
|
||||
compatibilityBodyText
|
||||
)
|
||||
|
@ -97,8 +97,8 @@ internal class DefaultSendService @AssistedInject constructor(
|
||||
.let { sendEvent(it) }
|
||||
}
|
||||
|
||||
override fun sendQuotedTextMessage(quotedEvent: TimelineEvent, text: String, autoMarkdown: Boolean): Cancelable {
|
||||
return localEchoEventFactory.createQuotedTextEvent(roomId, quotedEvent, text, autoMarkdown)
|
||||
override fun sendQuotedTextMessage(quotedEvent: TimelineEvent, text: String): Cancelable {
|
||||
return localEchoEventFactory.createQuotedTextEvent(roomId, quotedEvent, text)
|
||||
.also { createLocalEcho(it) }
|
||||
.let { sendEvent(it) }
|
||||
}
|
||||
|
@ -199,7 +199,6 @@ internal class LocalEchoEventFactory @Inject constructor(
|
||||
eventReplaced: TimelineEvent,
|
||||
originalEvent: TimelineEvent,
|
||||
newBodyText: String,
|
||||
newBodyAutoMarkdown: Boolean,
|
||||
msgType: String,
|
||||
compatibilityText: String): Event {
|
||||
val permalink = permalinkFactory.createPermalink(roomId, originalEvent.root.eventId ?: "", false)
|
||||
@ -207,9 +206,9 @@ internal class LocalEchoEventFactory @Inject constructor(
|
||||
|
||||
val body = bodyForReply(originalEvent.getLastMessageContent(), originalEvent.isReply())
|
||||
// As we always supply formatted body for replies we should force the MarkdownParser to produce html.
|
||||
val newBodyFormatted = createTextContent(newBodyText, newBodyAutoMarkdown, forceMarkdownParse = true).takeFormatted()
|
||||
val newBodyFormatted = createTextContent(newBodyText, true, forceMarkdownParse = true).takeFormatted()
|
||||
// Body of the original message may not have formatted version, so may also have to convert to html.
|
||||
val bodyFormatted = body.formattedText ?: createTextContent(body.text, newBodyAutoMarkdown, forceMarkdownParse = true).takeFormatted()
|
||||
val bodyFormatted = body.formattedText ?: createTextContent(body.text, true, forceMarkdownParse = true).takeFormatted()
|
||||
val replyFormatted = REPLY_PATTERN.format(
|
||||
permalink,
|
||||
userLink,
|
||||
@ -387,8 +386,7 @@ internal class LocalEchoEventFactory @Inject constructor(
|
||||
|
||||
fun createReplyTextEvent(roomId: String,
|
||||
eventReplied: TimelineEvent,
|
||||
replyText: CharSequence,
|
||||
autoMarkdown: Boolean): Event? {
|
||||
replyText: CharSequence): Event? {
|
||||
// Fallbacks and event representation
|
||||
// TODO Add error/warning logs when any of this is null
|
||||
val permalink = permalinkFactory.createPermalink(eventReplied.root, false) ?: return null
|
||||
@ -398,9 +396,9 @@ internal class LocalEchoEventFactory @Inject constructor(
|
||||
val body = bodyForReply(eventReplied.getLastMessageContent(), eventReplied.isReply())
|
||||
|
||||
// As we always supply formatted body for replies we should force the MarkdownParser to produce html.
|
||||
val replyTextFormatted = createTextContent(replyText, autoMarkdown, forceMarkdownParse = true).takeFormatted()
|
||||
val replyTextFormatted = createTextContent(replyText, true, forceMarkdownParse = true).takeFormatted()
|
||||
// Body of the original message may not have formatted version, so may also have to convert to html.
|
||||
val bodyFormatted = body.formattedText ?: createTextContent(body.text, autoMarkdown, forceMarkdownParse = true).takeFormatted()
|
||||
val bodyFormatted = body.formattedText ?: createTextContent(body.text, true, forceMarkdownParse = true).takeFormatted()
|
||||
val replyFormatted = REPLY_PATTERN.format(
|
||||
permalink,
|
||||
userLink,
|
||||
@ -512,12 +510,11 @@ internal class LocalEchoEventFactory @Inject constructor(
|
||||
roomId: String,
|
||||
quotedEvent: TimelineEvent,
|
||||
text: String,
|
||||
autoMarkdown: Boolean
|
||||
): Event {
|
||||
val messageContent = quotedEvent.getLastMessageContent()
|
||||
val textMsg = messageContent?.body
|
||||
val quoteText = legacyRiotQuoteText(textMsg, text)
|
||||
return createFormattedTextEvent(roomId, createTextContent(quoteText, autoMarkdown), MessageType.MSGTYPE_TEXT)
|
||||
return createFormattedTextEvent(roomId, createTextContent(quoteText, autoMarkdown=true, forceMarkdownParse = true), MessageType.MSGTYPE_TEXT)
|
||||
}
|
||||
|
||||
private fun legacyRiotQuoteText(quotedText: String?, myText: String): String {
|
||||
|
@ -406,13 +406,13 @@ class MessageComposerViewModel @AssistedInject constructor(
|
||||
popDraft()
|
||||
}
|
||||
is SendMode.Quote -> {
|
||||
room.sendQuotedTextMessage(state.sendMode.timelineEvent, action.text.toString(), action.autoMarkdown)
|
||||
room.sendQuotedTextMessage(state.sendMode.timelineEvent, action.text.toString())
|
||||
_viewEvents.post(MessageComposerViewEvents.MessageSent)
|
||||
popDraft()
|
||||
}
|
||||
is SendMode.Reply -> {
|
||||
state.sendMode.timelineEvent.let {
|
||||
room.replyToMessage(it, action.text.toString(), action.autoMarkdown)
|
||||
room.replyToMessage(it, action.text.toString())
|
||||
_viewEvents.post(MessageComposerViewEvents.MessageSent)
|
||||
popDraft()
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user