Remove errors from the cache when they are shown to the user (#1392)

There's really no reason to retry encryption errors again if they've
already been made user-visible in a conversation.

Also, refactor e->error in background.js onError(), since both e and ev
in this method made it too easy to make a mistake.
This commit is contained in:
Scott Nonnenberg 2017-08-25 14:24:16 -07:00 committed by GitHub
parent 84fd605ad3
commit 9fb079253c
3 changed files with 17 additions and 8 deletions

View file

@ -302,18 +302,18 @@
}
function onError(ev) {
var e = ev.error;
console.log(e);
console.log(e.stack);
var error = ev.error;
console.log(error);
console.log(error.stack);
if (e.name === 'HTTPError' && (e.code == 401 || e.code == 403)) {
if (error.name === 'HTTPError' && (error.code == 401 || error.code == 403)) {
Whisper.Registration.remove();
Whisper.events.trigger('unauthorized');
extension.install();
return;
}
if (e.name === 'HTTPError' && e.code == -1) {
if (error.name === 'HTTPError' && error.code == -1) {
// Failed to connect to server
if (navigator.onLine) {
console.log('retrying in 1 minute');
@ -329,7 +329,10 @@
}
if (ev.proto) {
if (e.name === 'MessageCounterError') {
if (error.name === 'MessageCounterError') {
if (ev.confirm) {
ev.confirm();
}
// Ignore this message. It is likely a duplicate delivery
// because the server lost our ack the first time.
return;
@ -337,7 +340,7 @@
var envelope = ev.proto;
var message = initIncomingMessage(envelope);
return message.saveErrors(e).then(function() {
return message.saveErrors(error).then(function() {
var id = message.get('conversationId');
return ConversationController.findOrCreateById(id, 'private').then(function(conversation) {
conversation.set({
@ -356,6 +359,10 @@
conversation.notify(message);
}
if (ev.confirm) {
ev.confirm();
}
return new Promise(function(resolve, reject) {
conversation.save().then(resolve, reject);
});
@ -363,7 +370,7 @@
});
}
throw e;
throw error;
}
function onReadReceipt(ev) {

View file

@ -38631,6 +38631,7 @@ MessageReceiver.prototype.extend({
var ev = new Event('error');
ev.error = error;
ev.proto = envelope;
ev.confirm = this.removeFromCache.bind(this, envelope);
var returnError = function() {
return Promise.reject(error);

View file

@ -380,6 +380,7 @@ MessageReceiver.prototype.extend({
var ev = new Event('error');
ev.error = error;
ev.proto = envelope;
ev.confirm = this.removeFromCache.bind(this, envelope);
var returnError = function() {
return Promise.reject(error);