Bugfix. Retracted messages shouldn't be editable.

This commit is contained in:
JC Brand 2020-02-18 15:42:55 +01:00
parent 004d2b7f23
commit 227b70339c
5 changed files with 59 additions and 31 deletions

View File

@ -285,6 +285,12 @@
view.model.sendMessage('hello world');
await u.waitUntil(() => view.el.querySelectorAll('.chat-msg').length === 1);
const message = view.model.messages.at(0);
expect(view.model.messages.length).toBe(1);
expect(message.get('retracted')).toBeFalsy();
expect(message.get('editable')).toBeTruthy();
const retract_button = await u.waitUntil(() => view.el.querySelector('.chat-msg__content .chat-msg__action-retract'));
retract_button.click();
await u.waitUntil(() => u.isVisible(document.querySelector('#converse-modals .modal')));
@ -304,9 +310,9 @@
`</apply-to>`+
`</message>`);
const message = view.model.messages.at(0);
expect(view.model.messages.length).toBe(1);
expect(message.get('retracted')).toBeTruthy();
expect(message.get('editable')).toBeFalsy();
expect(view.el.querySelectorAll('.chat-msg--retracted').length).toBe(1);
const el = view.el.querySelector('.chat-msg--retracted .chat-msg__message');
expect(el.textContent.trim()).toBe('Romeo Montague has removed this message');
@ -565,7 +571,8 @@
const message = view.model.messages.at(0);
expect(message.get('retracted')).toBeTruthy();
expect(message.get('is_ephemeral')).toBe(false);
expect(message.get('is_ephemeral')).toBeTruthy();
expect(message.get('editable')).toBeFalsy();
const stanza_id = message.get(`stanza_id ${muc_jid}`);
// The server responds with a retraction message
@ -584,7 +591,8 @@
expect(view.model.messages.length).toBe(1);
expect(view.model.messages.at(0).get('retracted')).toBeTruthy();
expect(view.model.messages.at(0).get('is_ephemeral')).toBe(false);
expect(view.model.messages.at(0).get('is_ephemeral')).toBe(true);
expect(view.model.messages.at(0).get('editable')).toBe(false);
expect(view.el.querySelectorAll('.chat-msg--retracted').length).toBe(1);
const el = view.el.querySelector('.chat-msg--retracted .chat-msg__message div');
expect(el.textContent).toBe('romeo has removed this message');
@ -628,7 +636,6 @@
_converse.connection._dataRecv(test_utils.createRequest(error));
await u.waitUntil(() => view.el.querySelectorAll('.chat-error').length === 1);
await u.waitUntil(() => view.el.querySelectorAll('.chat-msg--retracted').length === 0);
expect(view.model.messages.length).toBe(1);
expect(view.model.messages.at(0).get('retracted')).toBeFalsy();

View File

@ -960,21 +960,6 @@ converse.plugins.add('converse-chatview', {
this.insertIntoTextArea('', true, false);
},
/**
* Retract one of your messages in this chat
* @private
* @method _converse.ChatBoxView#retractOwnMessage
* @param { _converse.Message } message - The message which we're retracting.
*/
retractOwnMessage(message) {
this.model.sendRetractionMessage(message);
message.save({
'retracted': (new Date()).toISOString(),
'retracted_id': message.get('origin_id'),
'is_ephemeral': true
});
},
async onMessageRetractButtonClicked (ev) {
ev.preventDefault();
const msg_el = u.ancestor(ev.target, '.message');
@ -995,7 +980,7 @@ converse.plugins.add('converse-chatview', {
}
const result = await _converse.api.confirm(__('Confirm'), messages);
if (result) {
this.retractOwnMessage(message);
this.model.retractOwnMessage(message);
}
},

View File

@ -969,12 +969,8 @@ converse.plugins.add('converse-muc-views', {
* @param { _converse.Message } message - The message which we're retracting.
*/
retractOwnMessage(message) {
this.model.sendRetractionMessage(message)
this.model.retractOwnMessage(message)
.catch(e => {
message.save({
'retracted': undefined,
'retracted_id': undefined
});
const errmsg = __('Sorry, something went wrong while trying to retract your message.');
if (u.isErrorStanza(e)) {
this.showErrorMessage(errmsg);
@ -984,10 +980,6 @@ converse.plugins.add('converse-muc-views', {
}
log.error(e);
});
message.save({
'retracted': (new Date()).toISOString(),
'retracted_id': message.get('origin_id')
});
},
/**

View File

@ -708,6 +708,22 @@ converse.plugins.add('converse-chat', {
}
},
/**
* Retract one of your messages in this chat
* @private
* @method _converse.ChatBoxView#retractOwnMessage
* @param { _converse.Message } message - The message which we're retracting.
*/
retractOwnMessage(message) {
this.sendRetractionMessage(message)
message.save({
'retracted': (new Date()).toISOString(),
'retracted_id': message.get('origin_id'),
'is_ephemeral': true,
'editable': false
});
},
/**
* Sends a message stanza to retract a message in this chat
* @private
@ -899,8 +915,7 @@ converse.plugins.add('converse-chat', {
}
if (_converse.allow_message_corrections === 'all') {
attrs.editable = !(attrs.file || attrs.retracted || 'oob_url' in attrs);
} else if ((_converse.allow_message_corrections === 'last') &&
(send_time > this.get('time_sent'))) {
} else if ((_converse.allow_message_corrections === 'last') && (send_time > this.get('time_sent'))) {
this.set({'time_sent': send_time});
const msg = this.messages.findWhere({'editable': true});
if (msg) {

View File

@ -647,6 +647,35 @@ converse.plugins.add('converse-muc', {
return promise;
},
/**
* Retract one of your messages in this chat
* @private
* @method _converse.ChatRoom#retractOwnMessage
* @param { _converse.Message } message - The message which we're retracting.
*/
async retractOwnMessage(message) {
const editable = message.get('editable');
const is_ephemeral = message.get('is_ephemeral');
// Optimistic save
message.save({
'retracted': (new Date()).toISOString(),
'retracted_id': message.get('origin_id'),
'is_ephemeral': true,
'editable': false
});
try {
await this.sendRetractionMessage(message)
} catch (e) {
message.save({
is_ephemeral,
editable,
'retracted': undefined,
'retracted_id': undefined,
});
throw e;
}
},
/**
* Sends a message stanza to retract a message in this groupchat.
* @private