Skip to content
This repository was archived by the owner on Sep 11, 2024. It is now read-only.

Commit 7ba991c

Browse files
rkouwenhovent3chguyKerry
authored
Fix export of redacted polls (#8118)
* Move RequiresClient from MatrixCapabilities to ElementWidgetCapabilities Signed-off-by: Robin Kouwenhoven <[email protected]> * Fix export of redacted polls * Fix ESLint error * Add test cases for poll events * Add test cases for message events * Fix lint errors * Fix i18n error * Revert "Move RequiresClient from MatrixCapabilities to ElementWidgetCapabilities" This reverts commit 920f80a. Co-authored-by: Michael Telatynski <[email protected]> Co-authored-by: Kerry <[email protected]>
1 parent 9438516 commit 7ba991c

File tree

3 files changed

+94
-16
lines changed

3 files changed

+94
-16
lines changed

src/TextForEvent.tsx

Lines changed: 32 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -317,16 +317,7 @@ function textForMessageEvent(ev: MatrixEvent): () => string | null {
317317
const senderDisplayName = ev.sender && ev.sender.name ? ev.sender.name : ev.getSender();
318318
let message = ev.getContent().body;
319319
if (ev.isRedacted()) {
320-
message = _t("Message deleted");
321-
const unsigned = ev.getUnsigned();
322-
const redactedBecauseUserId = unsigned?.redacted_because?.sender;
323-
if (redactedBecauseUserId && redactedBecauseUserId !== ev.getSender()) {
324-
const room = MatrixClientPeg.get().getRoom(ev.getRoomId());
325-
const sender = room?.getMember(redactedBecauseUserId);
326-
message = _t("Message deleted by %(name)s", {
327-
name: sender?.name || redactedBecauseUserId,
328-
});
329-
}
320+
message = textForRedactedPollAndMessageEvent(ev);
330321
}
331322

332323
if (SettingsStore.isEnabled("feature_extensible_events")) {
@@ -727,11 +718,38 @@ export function textForLocationEvent(event: MatrixEvent): () => string | null {
727718
});
728719
}
729720

721+
function textForRedactedPollAndMessageEvent(ev: MatrixEvent): string {
722+
let message = _t("Message deleted");
723+
const unsigned = ev.getUnsigned();
724+
const redactedBecauseUserId = unsigned?.redacted_because?.sender;
725+
if (redactedBecauseUserId && redactedBecauseUserId !== ev.getSender()) {
726+
const room = MatrixClientPeg.get().getRoom(ev.getRoomId());
727+
const sender = room?.getMember(redactedBecauseUserId);
728+
message = _t("Message deleted by %(name)s", {
729+
name: sender?.name || redactedBecauseUserId,
730+
});
731+
}
732+
733+
return message;
734+
}
735+
730736
function textForPollStartEvent(event: MatrixEvent): () => string | null {
731-
return () => _t("%(senderName)s has started a poll - %(pollQuestion)s", {
732-
senderName: getSenderName(event),
733-
pollQuestion: (event.unstableExtensibleEvent as PollStartEvent)?.question?.text,
734-
});
737+
return () => {
738+
let message = '';
739+
740+
if (event.isRedacted()) {
741+
message = textForRedactedPollAndMessageEvent(event);
742+
const senderDisplayName = event.sender?.name ?? event.getSender();
743+
message = senderDisplayName + ': ' + message;
744+
} else {
745+
message = _t("%(senderName)s has started a poll - %(pollQuestion)s", {
746+
senderName: getSenderName(event),
747+
pollQuestion: (event.unstableExtensibleEvent as PollStartEvent)?.question?.text,
748+
});
749+
}
750+
751+
return message;
752+
};
735753
}
736754

737755
function textForPollEndEvent(event: MatrixEvent): () => string | null {

src/i18n/strings/en_EN.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -525,8 +525,6 @@
525525
"%(senderDisplayName)s set the server ACLs for this room.": "%(senderDisplayName)s set the server ACLs for this room.",
526526
"%(senderDisplayName)s changed the server ACLs for this room.": "%(senderDisplayName)s changed the server ACLs for this room.",
527527
"🎉 All servers are banned from participating! This room can no longer be used.": "🎉 All servers are banned from participating! This room can no longer be used.",
528-
"Message deleted": "Message deleted",
529-
"Message deleted by %(name)s": "Message deleted by %(name)s",
530528
"%(senderDisplayName)s sent an image.": "%(senderDisplayName)s sent an image.",
531529
"%(senderDisplayName)s sent a sticker.": "%(senderDisplayName)s sent a sticker.",
532530
"%(senderName)s set the main address for this room to %(address)s.": "%(senderName)s set the main address for this room to %(address)s.",
@@ -575,6 +573,8 @@
575573
"%(senderName)s changed a rule that was banning servers matching %(oldGlob)s to matching %(newGlob)s for %(reason)s": "%(senderName)s changed a rule that was banning servers matching %(oldGlob)s to matching %(newGlob)s for %(reason)s",
576574
"%(senderName)s updated a ban rule that was matching %(oldGlob)s to matching %(newGlob)s for %(reason)s": "%(senderName)s updated a ban rule that was matching %(oldGlob)s to matching %(newGlob)s for %(reason)s",
577575
"%(senderName)s has shared their location": "%(senderName)s has shared their location",
576+
"Message deleted": "Message deleted",
577+
"Message deleted by %(name)s": "Message deleted by %(name)s",
578578
"%(senderName)s has started a poll - %(pollQuestion)s": "%(senderName)s has started a poll - %(pollQuestion)s",
579579
"%(senderName)s has ended a poll": "%(senderName)s has ended a poll",
580580
"Light": "Light",

test/TextForEvent-test.ts

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -379,4 +379,64 @@ describe('TextForEvent', () => {
379379
expect(textForEvent(event)).toEqual(result);
380380
});
381381
});
382+
383+
describe("textForPollStartEvent()", () => {
384+
let pollEvent;
385+
386+
beforeEach(() => {
387+
pollEvent = new MatrixEvent({
388+
type: 'org.matrix.msc3381.poll.start',
389+
sender: '@a',
390+
content: {
391+
'org.matrix.msc3381.poll.start': {
392+
answers: [
393+
{ 'org.matrix.msc1767.text': 'option1' },
394+
{ 'org.matrix.msc1767.text': 'option2' },
395+
],
396+
question: {
397+
'body': 'Test poll name',
398+
'msgtype': 'm.text',
399+
'org.matrix.msc1767.text': 'Test poll name',
400+
},
401+
},
402+
},
403+
});
404+
});
405+
406+
it("returns correct message for redacted poll start", () => {
407+
pollEvent.makeRedacted(pollEvent);
408+
409+
expect(textForEvent(pollEvent)).toEqual('@a: Message deleted');
410+
});
411+
412+
it("returns correct message for normal poll start", () => {
413+
expect(textForEvent(pollEvent)).toEqual('@a has started a poll - ');
414+
});
415+
});
416+
417+
describe("textForMessageEvent()", () => {
418+
let messageEvent;
419+
420+
beforeEach(() => {
421+
messageEvent = new MatrixEvent({
422+
type: 'm.room.message',
423+
sender: '@a',
424+
content: {
425+
'body': 'test message',
426+
'msgtype': 'm.text',
427+
'org.matrix.msc1767.text': 'test message',
428+
},
429+
});
430+
});
431+
432+
it("returns correct message for redacted message", () => {
433+
messageEvent.makeRedacted(messageEvent);
434+
435+
expect(textForEvent(messageEvent)).toEqual('@a: Message deleted');
436+
});
437+
438+
it("returns correct message for normal message", () => {
439+
expect(textForEvent(messageEvent)).toEqual('@a: test message');
440+
});
441+
});
382442
});

0 commit comments

Comments
 (0)