Fix export of redacted polls (#8118)

* Move RequiresClient from MatrixCapabilities to ElementWidgetCapabilities

Signed-off-by: Robin Kouwenhoven <r.kouwenhoven@outlook.com>

* 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 920f80a2d4385656925987ccc9d37420255405c1.

Co-authored-by: Michael Telatynski <7t3chguy@gmail.com>
Co-authored-by: Kerry <kerrya@element.io>
This commit is contained in:
Robin Kouwenhoven 2022-04-11 11:10:16 +02:00 committed by GitHub
parent 94385169f1
commit 7ba991cd8c
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 94 additions and 16 deletions

View file

@ -317,16 +317,7 @@ function textForMessageEvent(ev: MatrixEvent): () => string | null {
const senderDisplayName = ev.sender && ev.sender.name ? ev.sender.name : ev.getSender();
let message = ev.getContent().body;
if (ev.isRedacted()) {
message = _t("Message deleted");
const unsigned = ev.getUnsigned();
const redactedBecauseUserId = unsigned?.redacted_because?.sender;
if (redactedBecauseUserId && redactedBecauseUserId !== ev.getSender()) {
const room = MatrixClientPeg.get().getRoom(ev.getRoomId());
const sender = room?.getMember(redactedBecauseUserId);
message = _t("Message deleted by %(name)s", {
name: sender?.name || redactedBecauseUserId,
});
}
message = textForRedactedPollAndMessageEvent(ev);
}
if (SettingsStore.isEnabled("feature_extensible_events")) {
@ -727,11 +718,38 @@ export function textForLocationEvent(event: MatrixEvent): () => string | null {
});
}
function textForRedactedPollAndMessageEvent(ev: MatrixEvent): string {
let message = _t("Message deleted");
const unsigned = ev.getUnsigned();
const redactedBecauseUserId = unsigned?.redacted_because?.sender;
if (redactedBecauseUserId && redactedBecauseUserId !== ev.getSender()) {
const room = MatrixClientPeg.get().getRoom(ev.getRoomId());
const sender = room?.getMember(redactedBecauseUserId);
message = _t("Message deleted by %(name)s", {
name: sender?.name || redactedBecauseUserId,
});
}
return message;
}
function textForPollStartEvent(event: MatrixEvent): () => string | null {
return () => _t("%(senderName)s has started a poll - %(pollQuestion)s", {
senderName: getSenderName(event),
pollQuestion: (event.unstableExtensibleEvent as PollStartEvent)?.question?.text,
});
return () => {
let message = '';
if (event.isRedacted()) {
message = textForRedactedPollAndMessageEvent(event);
const senderDisplayName = event.sender?.name ?? event.getSender();
message = senderDisplayName + ': ' + message;
} else {
message = _t("%(senderName)s has started a poll - %(pollQuestion)s", {
senderName: getSenderName(event),
pollQuestion: (event.unstableExtensibleEvent as PollStartEvent)?.question?.text,
});
}
return message;
};
}
function textForPollEndEvent(event: MatrixEvent): () => string | null {

View file

@ -525,8 +525,6 @@
"%(senderDisplayName)s set the server ACLs for this room.": "%(senderDisplayName)s set the server ACLs for this room.",
"%(senderDisplayName)s changed the server ACLs for this room.": "%(senderDisplayName)s changed the server ACLs for this room.",
"🎉 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.",
"Message deleted": "Message deleted",
"Message deleted by %(name)s": "Message deleted by %(name)s",
"%(senderDisplayName)s sent an image.": "%(senderDisplayName)s sent an image.",
"%(senderDisplayName)s sent a sticker.": "%(senderDisplayName)s sent a sticker.",
"%(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 @@
"%(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",
"%(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",
"%(senderName)s has shared their location": "%(senderName)s has shared their location",
"Message deleted": "Message deleted",
"Message deleted by %(name)s": "Message deleted by %(name)s",
"%(senderName)s has started a poll - %(pollQuestion)s": "%(senderName)s has started a poll - %(pollQuestion)s",
"%(senderName)s has ended a poll": "%(senderName)s has ended a poll",
"Light": "Light",

View file

@ -379,4 +379,64 @@ describe('TextForEvent', () => {
expect(textForEvent(event)).toEqual(result);
});
});
describe("textForPollStartEvent()", () => {
let pollEvent;
beforeEach(() => {
pollEvent = new MatrixEvent({
type: 'org.matrix.msc3381.poll.start',
sender: '@a',
content: {
'org.matrix.msc3381.poll.start': {
answers: [
{ 'org.matrix.msc1767.text': 'option1' },
{ 'org.matrix.msc1767.text': 'option2' },
],
question: {
'body': 'Test poll name',
'msgtype': 'm.text',
'org.matrix.msc1767.text': 'Test poll name',
},
},
},
});
});
it("returns correct message for redacted poll start", () => {
pollEvent.makeRedacted(pollEvent);
expect(textForEvent(pollEvent)).toEqual('@a: Message deleted');
});
it("returns correct message for normal poll start", () => {
expect(textForEvent(pollEvent)).toEqual('@a has started a poll - ');
});
});
describe("textForMessageEvent()", () => {
let messageEvent;
beforeEach(() => {
messageEvent = new MatrixEvent({
type: 'm.room.message',
sender: '@a',
content: {
'body': 'test message',
'msgtype': 'm.text',
'org.matrix.msc1767.text': 'test message',
},
});
});
it("returns correct message for redacted message", () => {
messageEvent.makeRedacted(messageEvent);
expect(textForEvent(messageEvent)).toEqual('@a: Message deleted');
});
it("returns correct message for normal message", () => {
expect(textForEvent(messageEvent)).toEqual('@a: test message');
});
});
});