From f9a9d327d17ce37c056508e5567a95e602a2c6eb Mon Sep 17 00:00:00 2001 From: JC Brand Date: Sun, 13 Mar 2022 10:27:53 +0100 Subject: [PATCH] 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. --- src/headless/plugins/chat/model.js | 13 +++++----- src/headless/plugins/muc/muc.js | 2 +- .../chatview/tests/http-file-upload.js | 2 +- .../muc-views/tests/http-file-upload.js | 2 +- src/plugins/omemo/tests/corrections.js | 26 ++++++++++++++----- src/plugins/omemo/tests/media-sharing.js | 2 +- src/shared/chat/message-actions.js | 2 +- 7 files changed, 32 insertions(+), 17 deletions(-) diff --git a/src/headless/plugins/chat/model.js b/src/headless/plugins/chat/model.js index 32940094e..3639b05ab 100644 --- a/src/headless/plugins/chat/model.js +++ b/src/headless/plugins/chat/model.js @@ -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({ diff --git a/src/headless/plugins/muc/muc.js b/src/headless/plugins/muc/muc.js index e4ffad292..b4a150ce0 100644 --- a/src/headless/plugins/muc/muc.js +++ b/src/headless/plugins/muc/muc.js @@ -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')); } }, diff --git a/src/plugins/chatview/tests/http-file-upload.js b/src/plugins/chatview/tests/http-file-upload.js index c4a165f9d..4d3267ad7 100644 --- a/src/plugins/chatview/tests/http-file-upload.js +++ b/src/plugins/chatview/tests/http-file-upload.js @@ -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); }); diff --git a/src/plugins/muc-views/tests/http-file-upload.js b/src/plugins/muc-views/tests/http-file-upload.js index 9866f80a9..a0f67ee33 100644 --- a/src/plugins/muc-views/tests/http-file-upload.js +++ b/src/plugins/muc-views/tests/http-file-upload.js @@ -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); }); diff --git a/src/plugins/omemo/tests/corrections.js b/src/plugins/omemo/tests/corrections.js index fad45fe45..c3259e737 100644 --- a/src/plugins/omemo/tests/corrections.js +++ b/src/plugins/omemo/tests/corrections.js @@ -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() { ``); 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?'); })); }); diff --git a/src/plugins/omemo/tests/media-sharing.js b/src/plugins/omemo/tests/media-sharing.js index adeb2a8de..46b4b4872 100644 --- a/src/plugins/omemo/tests/media-sharing.js +++ b/src/plugins/omemo/tests/media-sharing.js @@ -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); }); diff --git a/src/shared/chat/message-actions.js b/src/shared/chat/message-actions.js index 37a420243..6ae11ecad 100644 --- a/src/shared/chat/message-actions.js +++ b/src/shared/chat/message-actions.js @@ -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; }