Use body as attribute for the message body text

For error messages we still use the `message` attribute, since error
messages generally don't have a body, and if one does, it likely refers
to the `body` of a rejected message that the error refers to.

We're still setting both `body` and `message` attributes, but usage of
`message` for a normal `chat`, `groupchat` or `headline` stanza should
be considered deprecated.
This commit is contained in:
JC Brand 2022-03-13 10:27:53 +01:00
parent d2622f6fed
commit f9a9d327d1
7 changed files with 32 additions and 17 deletions

View File

@ -244,7 +244,7 @@ const ChatBox = ModelWithContact.extend({
async onMessageUploadChanged (message) {
if (message.get('upload') === _converse.SUCCESS) {
const attrs = {
'body': message.get('message'),
'body': message.get('body'),
'spoiler_hint': message.get('spoiler_hint'),
'oob_url': message.get('oob_url')
@ -632,10 +632,10 @@ const ChatBox = ModelWithContact.extend({
message.save({'older_versions': older_versions});
} else {
// This is a correction of an earlier message we already received
if(Object.keys(older_versions).length) {
older_versions[message.get('edited')] = message.get('message');
}else {
older_versions[message.get('time')] = message.get('message');
if (Object.keys(older_versions).length) {
older_versions[message.get('edited')] = message.getMessageText();
} else {
older_versions[message.get('time')] = message.getMessageText();
}
attrs = Object.assign(attrs, {'older_versions': older_versions});
delete attrs['id']; // Delete id, otherwise a new cache entry gets created
@ -976,7 +976,8 @@ const ChatBox = ModelWithContact.extend({
let message = this.messages.findWhere('correcting')
if (message) {
const older_versions = message.get('older_versions') || {};
older_versions[message.get('time')] = message.getMessageText();
const edited_time = message.get('edited') || message.get('time');
older_versions[edited_time] = message.getMessageText();
const plaintext = attrs.is_encrypted ? attrs.message : undefined;
message.save({

View File

@ -2709,7 +2709,7 @@ const ChatRoomMixin = {
.map(ref => ref.value);
return mentions.includes(nick);
} else {
return new RegExp(`\\b${nick}\\b`).test(message.get('message'));
return new RegExp(`\\b${nick}\\b`).test(message.get('body'));
}
},

View File

@ -246,7 +246,7 @@ describe("XEP-0363: HTTP File Upload", function () {
message.save({
'upload': _converse.SUCCESS,
'oob_url': message.get('get'),
'message': message.get('get')
'body': message.get('get'),
});
await u.waitUntil(() => view.querySelectorAll('.chat-msg__text').length);
});

View File

@ -112,7 +112,7 @@ describe("XEP-0363: HTTP File Upload", function () {
message.save({
'upload': _converse.SUCCESS,
'oob_url': message.get('get'),
'message': message.get('get')
'body': message.get('get'),
});
await u.waitUntil(() => view.querySelectorAll('.chat-msg__text').length);
});

View File

@ -92,14 +92,14 @@ describe("An OMEMO encrypted message", function() {
const first_msg = view.model.messages.findWhere({'message': 'But soft, what light through yonder airlock breaks?'});
const new_text = 'But soft, what light through yonder window breaks?';
textarea.value = new_text;
const newer_text = 'But soft, what light through yonder door breaks?';
textarea.value = newer_text;
message_form.onKeyDown({
target: textarea,
preventDefault: function preventDefault () {},
keyCode: 13 // Enter
});
await u.waitUntil(() => view.querySelector('.chat-msg__text').textContent.replace(/<!-.*?->/g, '') === new_text);
await u.waitUntil(() => view.querySelector('.chat-msg__text').textContent.replace(/<!-.*?->/g, '') === newer_text);
await u.waitUntil(() => _converse.connection.sent_stanzas.filter(s => s.nodeName === 'message').length === 3);
const msg = _converse.connection.sent_stanzas.pop();
@ -127,10 +127,10 @@ describe("An OMEMO encrypted message", function() {
`</message>`);
const older_versions = first_msg.get('older_versions');
const keys = Object.keys(older_versions);
let keys = Object.keys(older_versions);
expect(keys.length).toBe(1);
expect(older_versions[keys[0]]).toBe('But soft, what light through yonder airlock breaks?');
expect(first_msg.get('plaintext')).toBe(new_text);
expect(first_msg.get('plaintext')).toBe(newer_text);
expect(first_msg.get('is_encrypted')).toBe(true);
expect(first_msg.get('body')).toBe(fallback_text);
expect(first_msg.get('message')).toBe(fallback_text);
@ -139,7 +139,21 @@ describe("An OMEMO encrypted message", function() {
target: textarea,
keyCode: 38 // Up arrow
});
expect(textarea.value).toBe('But soft, what light through yonder window breaks?');
expect(textarea.value).toBe('But soft, what light through yonder door breaks?');
const newest_text = 'But soft, what light through yonder window breaks?';
textarea.value = newest_text;
message_form.onKeyDown({
target: textarea,
preventDefault: function preventDefault () {},
keyCode: 13 // Enter
});
await u.waitUntil(() => view.querySelector('.chat-msg__text').textContent.replace(/<!-.*?->/g, '') === newest_text);
keys = Object.keys(older_versions);
expect(keys.length).toBe(2);
expect(older_versions[keys[0]]).toBe('But soft, what light through yonder airlock breaks?');
expect(older_versions[keys[1]]).toBe('But soft, what light through yonder door breaks?');
}));
});

View File

@ -71,7 +71,7 @@ describe("The OMEMO module", function() {
message.save({
'upload': _converse.SUCCESS,
'oob_url': message.get('get'),
'message': message.get('get')
'body': message.get('get')
});
await u.waitUntil(() => view.querySelectorAll('.chat-msg__text').length);
});

View File

@ -71,7 +71,7 @@ class MessageActions extends CustomElement {
// TODO: Use state intead of DOM querying
// Then this code can also be put on the model
const unsent_text = u.ancestor(this, '.chatbox')?.querySelector('.chat-textarea')?.value;
if (unsent_text && (!currently_correcting || currently_correcting.get('message') !== unsent_text)) {
if (unsent_text && (!currently_correcting || currently_correcting.getMessageText() !== unsent_text)) {
if (!confirm(__('You have an unsent message which will be lost if you continue. Are you sure?'))) {
return;
}