diff --git a/src/Notifier.ts b/src/Notifier.ts index db9a7f1b1c3..047a59bc890 100644 --- a/src/Notifier.ts +++ b/src/Notifier.ts @@ -52,6 +52,7 @@ import ToastStore from "./stores/ToastStore"; import { ElementCall } from "./models/Call"; import { VoiceBroadcastChunkEventType, VoiceBroadcastInfoEventType } from "./voice-broadcast"; import { getSenderName } from "./utils/event/getSenderName"; +import { stripPlainReply } from "./utils/Reply"; /* * Dispatches: @@ -138,7 +139,7 @@ class NotifierClass { // notificationMessageForEvent includes sender, but we already have the sender here const msgType = ev.getContent().msgtype; if (ev.getContent().body && (!msgType || !msgTypeHandlers.hasOwnProperty(msgType))) { - msg = ev.getContent().body; + msg = stripPlainReply(ev.getContent().body); } } else if (ev.getType() === "m.room.member") { // context is all in the message here, we don't need @@ -149,7 +150,7 @@ class NotifierClass { // notificationMessageForEvent includes sender, but we've just out sender in the title const msgType = ev.getContent().msgtype; if (ev.getContent().body && (!msgType || !msgTypeHandlers.hasOwnProperty(msgType))) { - msg = ev.getContent().body; + msg = stripPlainReply(ev.getContent().body); } } diff --git a/test/Notifier-test.ts b/test/Notifier-test.ts index 16a10db9ec1..206d8b40ebf 100644 --- a/test/Notifier-test.ts +++ b/test/Notifier-test.ts @@ -31,7 +31,13 @@ import { createLocalNotificationSettingsIfNeeded, getLocalNotificationAccountDataEventType, } from "../src/utils/notifications"; -import { getMockClientWithEventEmitter, mkEvent, mockClientMethodsUser, mockPlatformPeg } from "./test-utils"; +import { + getMockClientWithEventEmitter, + mkEvent, + mkMessage, + mockClientMethodsUser, + mockPlatformPeg, +} from "./test-utils"; import { IncomingCallToast } from "../src/toasts/IncomingCallToast"; import { SdkContextClass } from "../src/contexts/SDKContext"; import UserActivity from "../src/UserActivity"; @@ -42,6 +48,7 @@ import { ThreadPayload } from "../src/dispatcher/payloads/ThreadPayload"; import { Action } from "../src/dispatcher/actions"; import { VoiceBroadcastChunkEventType, VoiceBroadcastInfoState } from "../src/voice-broadcast"; import { mkVoiceBroadcastInfoStateEvent } from "./voice-broadcast/utils/test-utils"; +import { addReplyToMessageContent } from "../src/utils/Reply"; jest.mock("../src/utils/notifications", () => ({ // @ts-ignore @@ -307,6 +314,30 @@ describe("Notifier", () => { Notifier.displayPopupNotification(audioEvent, testRoom); expect(MockPlatform.displayNotification).not.toHaveBeenCalled(); }); + + it("should strip reply fallback", () => { + const event = mkMessage({ + msg: "Test", + event: true, + user: mockClient.getSafeUserId(), + room: testRoom.roomId, + }); + const reply = mkMessage({ + msg: "This was a triumph", + event: true, + user: mockClient.getSafeUserId(), + room: testRoom.roomId, + }); + addReplyToMessageContent(reply.getContent(), event, { includeLegacyFallback: true }); + Notifier.displayPopupNotification(reply, testRoom); + expect(MockPlatform.displayNotification).toHaveBeenCalledWith( + "@bob:example.org (!room1:server)", + "This was a triumph", + expect.any(String), + testRoom, + reply, + ); + }); }); describe("getSoundForRoom", () => {