Merge branch 'nico/fix-reply-fallback' into 'main'
fix: fallback in body for replies to replies Closes famedly/fluffychat#702 and famedly/fluffychat#359 See merge request famedly/company/frontend/famedlysdk!927
This commit is contained in:
commit
85bf49ddba
|
|
@ -747,6 +747,25 @@ class Room {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
String _stripBodyFallback(String body) {
|
||||||
|
if (body.startsWith('> <@')) {
|
||||||
|
var temp = '';
|
||||||
|
var inPrefix = true;
|
||||||
|
for (final l in body.split('\n')) {
|
||||||
|
if (inPrefix && (l.isEmpty || l.startsWith('> '))) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
inPrefix = false;
|
||||||
|
temp += temp.isEmpty ? l : ('\n' + l);
|
||||||
|
}
|
||||||
|
|
||||||
|
return temp;
|
||||||
|
} else {
|
||||||
|
return body;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// Sends an event to this room with this json as a content. Returns the
|
/// Sends an event to this room with this json as a content. Returns the
|
||||||
/// event ID generated from the server.
|
/// event ID generated from the server.
|
||||||
Future<String?> sendEvent(
|
Future<String?> sendEvent(
|
||||||
|
|
@ -765,7 +784,8 @@ class Room {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (inReplyTo != null) {
|
if (inReplyTo != null) {
|
||||||
var replyText = '<${inReplyTo.senderId}> ' + inReplyTo.body;
|
var replyText =
|
||||||
|
'<${inReplyTo.senderId}> ' + _stripBodyFallback(inReplyTo.body);
|
||||||
replyText = replyText.split('\n').map((line) => '> $line').join('\n');
|
replyText = replyText.split('\n').map((line) => '> $line').join('\n');
|
||||||
content['format'] = 'org.matrix.custom.html';
|
content['format'] = 'org.matrix.custom.html';
|
||||||
// be sure that we strip any previous reply fallbacks
|
// be sure that we strip any previous reply fallbacks
|
||||||
|
|
|
||||||
|
|
@ -638,6 +638,44 @@ void main() {
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// Reply to a reply
|
||||||
|
event = Event.fromJson({
|
||||||
|
'event_id': '\$replyEvent',
|
||||||
|
'content': {
|
||||||
|
'body': '> <@alice:example.org> Hey\n\nHello world',
|
||||||
|
'msgtype': 'm.text',
|
||||||
|
'format': 'org.matrix.custom.html',
|
||||||
|
'formatted_body':
|
||||||
|
'<mx-reply><blockquote><a href="https://matrix.to/#/!localpart:server.abc/\$replyEvent">In reply to</a> <a href="https://matrix.to/#/@alice:example.org">@alice:example.org</a><br>Hey</blockquote></mx-reply>Hello world',
|
||||||
|
'm.relates_to': {
|
||||||
|
'm.in_reply_to': {
|
||||||
|
'event_id': '\$replyEvent',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
'type': 'm.room.message',
|
||||||
|
'sender': '@alice:example.org',
|
||||||
|
}, room);
|
||||||
|
FakeMatrixApi.calledEndpoints.clear();
|
||||||
|
resp =
|
||||||
|
await room.sendTextEvent('Fox', txid: 'testtxid', inReplyTo: event);
|
||||||
|
expect(resp?.startsWith('\$event'), true);
|
||||||
|
entry = FakeMatrixApi.calledEndpoints.entries
|
||||||
|
.firstWhere((p) => p.key.contains('/send/m.room.message/'));
|
||||||
|
content = json.decode(entry.value.first);
|
||||||
|
expect(content, {
|
||||||
|
'body': '> <@alice:example.org> Hello world\n\nFox',
|
||||||
|
'msgtype': 'm.text',
|
||||||
|
'format': 'org.matrix.custom.html',
|
||||||
|
'formatted_body':
|
||||||
|
'<mx-reply><blockquote><a href="https://matrix.to/#/!localpart:server.abc/\$replyEvent">In reply to</a> <a href="https://matrix.to/#/@alice:example.org">@alice:example.org</a><br>Hello world</blockquote></mx-reply>Fox',
|
||||||
|
'm.relates_to': {
|
||||||
|
'm.in_reply_to': {
|
||||||
|
'event_id': '\$replyEvent',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
test('send reaction', () async {
|
test('send reaction', () async {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue