Skip to content

Commit 0d56583

Browse files
committed
fix(matrix): send mention finals normally
1 parent bca2501 commit 0d56583

2 files changed

Lines changed: 32 additions & 7 deletions

File tree

extensions/matrix/src/matrix/monitor/handler.test.ts

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3147,6 +3147,32 @@ describe("matrix monitor handler draft streaming", () => {
31473147
await finish();
31483148
});
31493149

3150+
it("redacts partial previews before normal final delivery for changed Matrix mentions", async () => {
3151+
const { dispatch, redactEventMock } = createStreamingHarness({
3152+
blockStreamingEnabled: true,
3153+
streaming: "partial",
3154+
});
3155+
const { deliver, opts, finish } = await dispatch();
3156+
3157+
opts.onPartialReply?.({ text: "hello @alice:example.org" });
3158+
await vi.waitFor(() => {
3159+
expect(sendSingleTextMessageMatrixMock).toHaveBeenCalledTimes(1);
3160+
});
3161+
3162+
await deliver({ text: "hello @alice:example.org!" }, { kind: "final" });
3163+
3164+
expect(editMessageMatrixMock).not.toHaveBeenCalled();
3165+
expect(redactEventMock).toHaveBeenCalledWith("!room:example.org", "$draft1");
3166+
expect(deliverMatrixRepliesMock).toHaveBeenCalledTimes(1);
3167+
const deliverParams = requireRecord(
3168+
callArg(deliverMatrixRepliesMock, 0, 0, "deliver replies params"),
3169+
"deliver replies params",
3170+
);
3171+
const replies = requireArray(deliverParams.replies, "delivered replies");
3172+
expect(requireRecord(replies[0], "delivered reply").text).toBe("hello @alice:example.org!");
3173+
await finish();
3174+
});
3175+
31503176
it("keeps the draft preview and sends media-only for TTS supplement finals", async () => {
31513177
const { dispatch, redactEventMock } = createStreamingHarness({
31523178
blockStreamingEnabled: true,

extensions/matrix/src/matrix/monitor/handler.ts

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1876,14 +1876,13 @@ export function createMatrixRoomMessageHandler(params: MatrixMonitorHandlerParam
18761876
await draftStream.discardPending();
18771877
}
18781878
const draftEventId = draftStream.eventId();
1879-
const matchingDraftTextNeedsNormalMentionDelivery =
1879+
const draftFinalTextNeedsNormalMentionDelivery =
18801880
Boolean(draftEventId) &&
18811881
typeof payload.text === "string" &&
18821882
Boolean(payload.text.trim()) &&
18831883
!payload.isError &&
18841884
!payloadReplyMismatch &&
18851885
!mustDeliverFinalNormally &&
1886-
draftStream.matchesPreparedText(payload.text) &&
18871886
(await matrixTextWouldActivateMentions(client, payload.text));
18881887

18891888
if (
@@ -1893,7 +1892,7 @@ export function createMatrixRoomMessageHandler(params: MatrixMonitorHandlerParam
18931892
!hasMedia &&
18941893
!payloadReplyMismatch &&
18951894
!mustDeliverFinalNormally &&
1896-
!matchingDraftTextNeedsNormalMentionDelivery
1895+
!draftFinalTextNeedsNormalMentionDelivery
18971896
) {
18981897
const finalPreviewText = payload.text;
18991898
await deliverWithFinalizableLivePreviewAdapter<
@@ -1976,14 +1975,14 @@ export function createMatrixRoomMessageHandler(params: MatrixMonitorHandlerParam
19761975
typeof payloadText === "string" &&
19771976
Boolean(payloadText.trim()) &&
19781977
payloadTextMatchesDraft;
1979-
const matchingMediaTextNeedsNormalMentionDelivery =
1978+
const mediaTextNeedsNormalMentionDelivery =
19801979
typeof payloadText === "string" &&
1981-
reusesDraftTextUnchanged &&
1980+
Boolean(payloadText.trim()) &&
19821981
(await matrixTextWouldActivateMentions(client, payloadText));
19831982
const requiresFinalTextEdit =
19841983
quietDraftStreaming ||
19851984
(typeof payloadText === "string" && !payloadTextMatchesDraft);
1986-
if (textEditOk && matchingMediaTextNeedsNormalMentionDelivery) {
1985+
if (textEditOk && mediaTextNeedsNormalMentionDelivery) {
19871986
textEditOk = false;
19881987
} else if (textEditOk && payloadText && requiresFinalTextEdit) {
19891988
const { editMessageMatrix } = await loadMatrixSendModule();
@@ -2038,7 +2037,7 @@ export function createMatrixRoomMessageHandler(params: MatrixMonitorHandlerParam
20382037
(payload.isError ||
20392038
payloadReplyMismatch ||
20402039
mustDeliverFinalNormally ||
2041-
matchingDraftTextNeedsNormalMentionDelivery);
2040+
draftFinalTextNeedsNormalMentionDelivery);
20422041
if (draftRedacted && draftEventId) {
20432042
await redactMatrixDraftEvent(client, roomId, draftEventId);
20442043
}

0 commit comments

Comments
 (0)