From 8a1cd77ef4df4f343bb307145ffc18e945fb7b9d Mon Sep 17 00:00:00 2001 From: Jaiwanth Date: Tue, 22 Jun 2021 12:12:37 +0530 Subject: [PATCH] Handle no match cases and modify textForEvent to handle redacted messages --- src/TextForEvent.ts | 15 +++++++++------ src/utils/exportUtils/PlainTextExport.ts | 7 ++++--- 2 files changed, 13 insertions(+), 9 deletions(-) diff --git a/src/TextForEvent.ts b/src/TextForEvent.ts index df2047a645..70952eeca5 100644 --- a/src/TextForEvent.ts +++ b/src/TextForEvent.ts @@ -13,13 +13,14 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. */ -import {MatrixClientPeg} from './MatrixClientPeg'; +import { MatrixClientPeg } from './MatrixClientPeg'; import { _t } from './languageHandler'; import * as Roles from './Roles'; -import {isValid3pidInvite} from "./RoomInvite"; +import { isValid3pidInvite } from "./RoomInvite"; import SettingsStore from "./settings/SettingsStore"; -import {ALL_RULE_TYPES, ROOM_RULE_TYPES, SERVER_RULE_TYPES, USER_RULE_TYPES} from "./mjolnir/BanList"; -import {WIDGET_LAYOUT_EVENT_TYPE} from "./stores/widgets/WidgetLayoutStore"; +import { ALL_RULE_TYPES, ROOM_RULE_TYPES, SERVER_RULE_TYPES, USER_RULE_TYPES } from "./mjolnir/BanList"; +import { WIDGET_LAYOUT_EVENT_TYPE } from "./stores/widgets/WidgetLayoutStore"; +import { MatrixEvent } from "matrix-js-sdk/src/models/event"; // These functions are frequently used just to check whether an event has // any text to display at all. For this reason they return deferred values @@ -235,11 +236,13 @@ function textForServerACLEvent(ev): () => string | null { return getText; } -function textForMessageEvent(ev): () => string | null { +function textForMessageEvent(ev: MatrixEvent): () => string | null { return () => { const senderDisplayName = ev.sender && ev.sender.name ? ev.sender.name : ev.getSender(); + const isRedacted = ev.isRedacted(); let message = ev.getContent().body; - if (ev.getContent().msgtype === "m.emote") { + if (isRedacted) message = "Message Deleted"; + else if (ev.getContent().msgtype === "m.emote") { message = "* " + senderDisplayName + " " + message; } else if (ev.getContent().msgtype === "m.image") { message = _t('%(senderDisplayName)s sent an image.', {senderDisplayName}); diff --git a/src/utils/exportUtils/PlainTextExport.ts b/src/utils/exportUtils/PlainTextExport.ts index 72ab0f122f..69c80122d6 100644 --- a/src/utils/exportUtils/PlainTextExport.ts +++ b/src/utils/exportUtils/PlainTextExport.ts @@ -35,12 +35,13 @@ export default class PlainTextExporter extends Exporter { const match = REPLY_REGEX.exec(content.body); + if (!match) return content.body; + let rplSource: string; const rplName = match[1]; const rplText = match[3]; - const sourceMatch = REPLY_REGEX.exec(content.body); - rplSource = sourceMatch && sourceMatch.length === 4 ? sourceMatch[3] : content.body; - rplSource = rplSource.substring(0, REPLY_SOURCE_MAX_LENGTH); + + rplSource = match[2].substring(1, REPLY_SOURCE_MAX_LENGTH); // Get the first non-blank line from the source. const lines = rplSource.split('\n').filter((line) => !/^\s*$/.test(line)) if (lines.length > 0) {