fix: properly remove reply fallback from (un)localized body

This commit is contained in:
Nicolas Werner 2024-09-28 14:40:22 +02:00
parent 43bc0e1963
commit e3d41bb449
No known key found for this signature in database
GPG Key ID: B38119FF80087618
2 changed files with 102 additions and 2 deletions

View File

@ -869,8 +869,9 @@ class Event extends MatrixEvent {
var body = plaintextBody ? this.plaintextBody : this.body; var body = plaintextBody ? this.plaintextBody : this.body;
// Html messages will already have their reply fallback removed during the Html to Text conversion. // Html messages will already have their reply fallback removed during the Html to Text conversion.
var mayHaveReplyFallback = var mayHaveReplyFallback = !plaintextBody ||
!plaintextBody || content['format'] != 'org.matrix.custom.html'; (content['format'] != 'org.matrix.custom.html' ||
formattedText.isEmpty);
// If we have an edit, we want to operate on the new content // If we have an edit, we want to operate on the new content
final newContent = content.tryGetMap<String, Object?>('m.new_content'); final newContent = content.tryGetMap<String, Object?>('m.new_content');

View File

@ -1686,6 +1686,105 @@ void main() {
editFormattedBody: '<b>edit formatted body</b>', editFormattedBody: '<b>edit formatted body</b>',
editHtml: true, editHtml: true,
); );
// test with reply fallback
testUnlocalizedBody(
expectation: 'body',
plaintextBody: false,
body: '> <@some:user.id> acb def\n\nbody',
formattedBody:
'<mx-reply><blockquote>abc</blockquote></mx-reply><b>formatted body</b>',
html: true,
isEdit: false,
// strictly speaking there is no quote in edits, but we have to handle them anyway because of other clients doing it wrong
editBody: '> <@some:user.id> acb def\n\nedit body',
editFormattedBody:
'<mx-reply><blockquote>abc</blockquote></mx-reply><b>edit formatted body</b>',
editHtml: true,
);
testUnlocalizedBody(
expectation: 'body',
plaintextBody: true,
body: '> <@some:user.id> acb def\n\nbody',
formattedBody:
'<mx-reply><blockquote>abc</blockquote></mx-reply><b>formatted body</b>',
html: false,
isEdit: false,
// strictly speaking there is no quote in edits, but we have to handle them anyway because of other clients doing it wrong
editBody: '> <@some:user.id> acb def\n\nedit body',
editFormattedBody:
'<mx-reply><blockquote>abc</blockquote></mx-reply><b>edit formatted body</b>',
editHtml: true,
);
testUnlocalizedBody(
expectation: 'body',
plaintextBody: true,
body: '> <@some:user.id> acb def\n\nbody',
formattedBody: null,
html: true,
isEdit: false,
// strictly speaking there is no quote in edits, but we have to handle them anyway because of other clients doing it wrong
editBody: '> <@some:user.id> acb def\n\nedit body',
editFormattedBody:
'<mx-reply><blockquote>abc</blockquote></mx-reply><b>edit formatted body</b>',
editHtml: true,
);
testUnlocalizedBody(
expectation: '**formatted body**',
plaintextBody: true,
body: '> <@some:user.id> acb def\n\nbody',
formattedBody:
'<mx-reply><blockquote>abc</blockquote></mx-reply><b>formatted body</b>',
html: true,
isEdit: false,
// strictly speaking there is no quote in edits, but we have to handle them anyway because of other clients doing it wrong
editBody: '> <@some:user.id> acb def\n\nedit body',
editFormattedBody:
'<mx-reply><blockquote>abc</blockquote></mx-reply><b>edit formatted body</b>',
editHtml: true,
);
testUnlocalizedBody(
expectation: 'edit body',
plaintextBody: false,
body: '> <@some:user.id> acb def\n\nbody',
formattedBody:
'<mx-reply><blockquote>abc</blockquote></mx-reply><b>formatted body</b>',
html: true,
isEdit: true,
// strictly speaking there is no quote in edits, but we have to handle them anyway because of other clients doing it wrong
editBody: '> <@some:user.id> acb def\n\nedit body',
editFormattedBody:
'<mx-reply><blockquote>abc</blockquote></mx-reply><b>edit formatted body</b>',
editHtml: true,
);
testUnlocalizedBody(
expectation: 'edit body',
plaintextBody: true,
body: '> <@some:user.id> acb def\n\nbody',
formattedBody:
'<mx-reply><blockquote>abc</blockquote></mx-reply><b>formatted body</b>',
html: true,
isEdit: true,
// strictly speaking there is no quote in edits, but we have to handle them anyway because of other clients doing it wrong
editBody: '> <@some:user.id> acb def\n\nedit body',
editFormattedBody:
'<mx-reply><blockquote>abc</blockquote></mx-reply><b>edit formatted body</b>',
editHtml: false,
);
testUnlocalizedBody(
expectation: '**edit formatted body**',
plaintextBody: true,
body: '> <@some:user.id> acb def\n\nbody',
formattedBody:
'<mx-reply><blockquote>abc</blockquote></mx-reply><b>formatted body</b>',
html: true,
isEdit: true,
// strictly speaking there is no quote in edits, but we have to handle them anyway because of other clients doing it wrong
editBody: '> <@some:user.id> acb def\n\nedit body',
editFormattedBody:
'<mx-reply><blockquote>abc</blockquote></mx-reply><b>edit formatted body</b>',
editHtml: true,
);
}); });
test('getDisplayEvent', () { test('getDisplayEvent', () {