Commit ead8cdbc authored by JC Brand's avatar JC Brand

Retracted moderated message should not be editable.

Also, don't set retracted MUC messages as ephemeral, we want to keep on
showing them to provide context in a MUC.
parent 227b7033
......@@ -424,6 +424,7 @@
expect(view.model.messages.at(0).get('moderated')).toBe('retracted');
expect(view.model.messages.at(0).get('moderation_reason')).toBe(reason);
expect(view.model.messages.at(0).get('is_ephemeral')).toBe(false);
expect(view.model.messages.at(0).get('editable')).toBe(false);
expect(view.el.querySelectorAll('.chat-msg--retracted').length).toBe(1);
const msg_el = view.el.querySelector('.chat-msg--retracted .chat-msg__message');
......@@ -571,7 +572,7 @@
const message = view.model.messages.at(0);
expect(message.get('retracted')).toBeTruthy();
expect(message.get('is_ephemeral')).toBeTruthy();
expect(message.get('is_ephemeral')).toBe(false);
expect(message.get('editable')).toBeFalsy();
const stanza_id = message.get(`stanza_id ${muc_jid}`);
......@@ -591,7 +592,7 @@
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(true);
expect(view.model.messages.at(0).get('is_ephemeral')).toBe(false);
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');
......@@ -640,6 +641,7 @@
expect(view.model.messages.length).toBe(1);
expect(view.model.messages.at(0).get('retracted')).toBeFalsy();
expect(view.model.messages.at(0).get('is_ephemeral')).toBeFalsy();
expect(view.model.messages.at(0).get('editable')).toBeTruthy();
expect(view.el.querySelectorAll('.chat-error').length).toBe(1);
const errmsg = view.el.querySelector('.chat-error');
......@@ -675,6 +677,7 @@
expect(view.model.messages.length).toBe(1);
expect(view.model.messages.at(0).get('retracted')).toBeFalsy();
expect(view.model.messages.at(0).get('is_ephemeral')).toBeFalsy();
expect(view.model.messages.at(0).get('editable')).toBeTruthy();
const error_messages = view.el.querySelectorAll('.chat-error');
expect(error_messages.length).toBe(2);
......
......@@ -990,7 +990,7 @@ converse.plugins.add('converse-muc-views', {
* @param { string } [reason] - The reason for retracting the message.
*/
async retractOtherMessage (message, reason) {
const result = await this.model.sendRetractionIQ(message, reason);
const result = await this.model.retractOtherMessage(message, reason);
if (result === null) {
const err_msg = __(`A timeout occurred while trying to retract the message`);
_converse.api.alert('error', __('Error'), err_msg);
......@@ -1000,13 +1000,6 @@ converse.plugins.add('converse-muc-views', {
_converse.api.alert('error', __('Error'), err_msg);
_converse.log(err_msg, Strophe.LogLevel.WARN);
_converse.log(result, Strophe.LogLevel.WARN);
} else {
message.save({
'moderated': 'retracted',
'moderated_by': _converse.bare_jid,
'moderated_id': message.get('msgid'),
'moderation_reason': reason
});
}
},
......
......@@ -648,26 +648,23 @@ converse.plugins.add('converse-muc', {
},
/**
* Retract one of your messages in this chat
* Retract one of your messages in this groupchat
* @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,
......@@ -676,6 +673,37 @@ converse.plugins.add('converse-muc', {
}
},
/**
* Retract someone else's message in this groupchat.
* @private
* @method _converse.ChatRoom#retractOtherMessage
* @param { _converse.Message } message - The message which we're retracting.
* @param { string } [reason] - The reason for retracting the message.
*/
async retractOtherMessage (message, reason) {
const editable = message.get('editable');
// Optimistic save
message.save({
'moderated': 'retracted',
'moderated_by': _converse.bare_jid,
'moderated_id': message.get('msgid'),
'moderation_reason': reason,
'editable': false
});
const result = await this.sendRetractionIQ(message, reason);
if (result === null || u.isErrorStanza(result)) {
// Undo the save if something went wrong
message.save({
editable,
'moderated': undefined,
'moderated_by': undefined,
'moderated_id': undefined,
'moderation_reason': undefined,
});
}
return result;
},
/**
* Sends a message stanza to retract a message in this groupchat.
* @private
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment