Merge pull request #3049 from vector-im/feature/bma/various_fixew

Be robust to Exception.
This commit is contained in:
Benoit Marty 2021-03-26 19:26:49 +01:00 committed by GitHub
commit 2045a164c1
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -24,6 +24,7 @@ import dagger.assisted.Assisted
import dagger.assisted.AssistedFactory import dagger.assisted.AssistedFactory
import dagger.assisted.AssistedInject import dagger.assisted.AssistedInject
import im.vector.app.R import im.vector.app.R
import im.vector.app.core.error.ErrorFormatter
import im.vector.app.core.extensions.canReact import im.vector.app.core.extensions.canReact
import im.vector.app.core.platform.EmptyViewEvents import im.vector.app.core.platform.EmptyViewEvents
import im.vector.app.core.platform.VectorViewModel import im.vector.app.core.platform.VectorViewModel
@ -65,6 +66,7 @@ class MessageActionsViewModel @AssistedInject constructor(@Assisted
private val htmlCompressor: VectorHtmlCompressor, private val htmlCompressor: VectorHtmlCompressor,
private val session: Session, private val session: Session,
private val noticeEventFormatter: NoticeEventFormatter, private val noticeEventFormatter: NoticeEventFormatter,
private val errorFormatter: ErrorFormatter,
private val stringProvider: StringProvider, private val stringProvider: StringProvider,
private val pillsPostProcessorFactory: PillsPostProcessor.Factory, private val pillsPostProcessorFactory: PillsPostProcessor.Factory,
private val vectorPreferences: VectorPreferences private val vectorPreferences: VectorPreferences
@ -171,42 +173,46 @@ class MessageActionsViewModel @AssistedInject constructor(@Assisted
} }
private fun computeMessageBody(timelineEvent: TimelineEvent): CharSequence { private fun computeMessageBody(timelineEvent: TimelineEvent): CharSequence {
if (timelineEvent.root.isRedacted()) { return try {
return noticeEventFormatter.formatRedactedEvent(timelineEvent.root) if (timelineEvent.root.isRedacted()) {
} noticeEventFormatter.formatRedactedEvent(timelineEvent.root)
} else {
when (timelineEvent.root.getClearType()) {
EventType.MESSAGE,
EventType.STICKER -> {
val messageContent: MessageContent? = timelineEvent.getLastMessageContent()
if (messageContent is MessageTextContent && messageContent.format == MessageFormat.FORMAT_MATRIX_HTML) {
val html = messageContent.formattedBody
?.takeIf { it.isNotBlank() }
?.let { htmlCompressor.compress(it) }
?: messageContent.body
return when (timelineEvent.root.getClearType()) { eventHtmlRenderer.get().render(html, pillsPostProcessor)
EventType.MESSAGE, } else if (messageContent is MessageVerificationRequestContent) {
EventType.STICKER -> { stringProvider.getString(R.string.verification_request)
val messageContent: MessageContent? = timelineEvent.getLastMessageContent() } else {
if (messageContent is MessageTextContent && messageContent.format == MessageFormat.FORMAT_MATRIX_HTML) { messageContent?.body
val html = messageContent.formattedBody }
?.takeIf { it.isNotBlank() } }
?.let { htmlCompressor.compress(it) } EventType.STATE_ROOM_NAME,
?: messageContent.body EventType.STATE_ROOM_TOPIC,
EventType.STATE_ROOM_AVATAR,
eventHtmlRenderer.get().render(html, pillsPostProcessor) EventType.STATE_ROOM_MEMBER,
} else if (messageContent is MessageVerificationRequestContent) { EventType.STATE_ROOM_ALIASES,
stringProvider.getString(R.string.verification_request) EventType.STATE_ROOM_CANONICAL_ALIAS,
} else { EventType.STATE_ROOM_HISTORY_VISIBILITY,
messageContent?.body EventType.STATE_ROOM_SERVER_ACL,
EventType.CALL_INVITE,
EventType.CALL_CANDIDATES,
EventType.CALL_HANGUP,
EventType.CALL_ANSWER -> {
noticeEventFormatter.format(timelineEvent)
}
else -> null
} }
} }
EventType.STATE_ROOM_NAME, } catch (failure: Throwable) {
EventType.STATE_ROOM_TOPIC, errorFormatter.toHumanReadable(failure)
EventType.STATE_ROOM_AVATAR,
EventType.STATE_ROOM_MEMBER,
EventType.STATE_ROOM_ALIASES,
EventType.STATE_ROOM_CANONICAL_ALIAS,
EventType.STATE_ROOM_HISTORY_VISIBILITY,
EventType.STATE_ROOM_SERVER_ACL,
EventType.CALL_INVITE,
EventType.CALL_CANDIDATES,
EventType.CALL_HANGUP,
EventType.CALL_ANSWER -> {
noticeEventFormatter.format(timelineEvent)
}
else -> null
} ?: "" } ?: ""
} }