Delete public chat messages locally if not stored on the server

pull/596/head
Maxim Shishmarev 6 years ago
parent 5d2c15fd24
commit 1f4af59dad

@ -2425,11 +2425,20 @@
if (!channelAPI) {
return false;
}
const success = await channelAPI.deleteMessage(message.getServerId());
if (success) {
const serverId = message.getServerId();
const success = serverId
? await channelAPI.deleteMessage(serverId)
: false;
const shouldDeleteLocally = success || message.hasErrors() || !serverId;
// If the message has errors it is likely not saved
// on the server, so we delete it locally unconditionally
if (shouldDeleteLocally) {
this.removeMessage(message.id);
}
return success;
return shouldDeleteLocally;
},
removeMessage(messageId) {

@ -1335,26 +1335,34 @@
? i18n('deletePublicWarning')
: i18n('deleteWarning');
const doDelete = async () => {
if (this.model.isPublic()) {
const success = await this.model.deletePublicMessage(message);
if (!success) {
// Message failed to delete from server, show error?
return;
}
} else {
this.model.messageCollection.remove(message.id);
}
await window.Signal.Data.removeMessage(message.id, {
Message: Whisper.Message,
});
message.trigger('unload');
this.resetPanel();
this.updateHeader();
};
// The message wasn't saved, so we don't show any warning
if (message.hasErrors()) {
doDelete();
return;
}
const dialog = new Whisper.ConfirmationDialogView({
message: warningMessage,
okText: i18n('delete'),
resolve: async () => {
if (this.model.isPublic()) {
const success = await this.model.deletePublicMessage(message);
if (!success) {
// Message failed to delete from server, show error?
return;
}
} else {
this.model.messageCollection.remove(message.id);
}
await window.Signal.Data.removeMessage(message.id, {
Message: Whisper.Message,
});
message.trigger('unload');
this.resetPanel();
this.updateHeader();
},
resolve: doDelete,
});
this.$el.prepend(dialog.el);

Loading…
Cancel
Save