Log out information from DOMException when import fails (#1923)
This should give us the information we're looking for when imports fail mysteriously! https://developer.mozilla.org/en-US/docs/Web/API/DOMException
This commit is contained in:
parent
8fd0adc486
commit
66aa76e501
2 changed files with 95 additions and 73 deletions
137
js/backup.js
137
js/backup.js
|
@ -102,12 +102,11 @@
|
|||
_.each(storeNames, function(storeName) {
|
||||
var transaction = idb_db.transaction(storeNames, 'readwrite');
|
||||
transaction.onerror = function(e) {
|
||||
var error = e.target.error;
|
||||
console.log(
|
||||
'exportToJsonFile: transaction error',
|
||||
error && error.stack ? error.stack : error
|
||||
handleDOMException(
|
||||
'exportToJsonFile transaction error (store: ' + storeName + ')',
|
||||
transaction.error,
|
||||
reject
|
||||
);
|
||||
reject(error);
|
||||
};
|
||||
transaction.oncomplete = function() {
|
||||
console.log('transaction complete');
|
||||
|
@ -117,13 +116,11 @@
|
|||
var request = store.openCursor();
|
||||
var count = 0;
|
||||
request.onerror = function(e) {
|
||||
var error = e.target.error;
|
||||
console.log(
|
||||
'Error attempting to export store',
|
||||
storeName,
|
||||
error && error.stack ? error.stack : error
|
||||
handleDOMException(
|
||||
'exportToJsonFile request error (store: ' + storeNames + ')',
|
||||
request.error,
|
||||
reject
|
||||
);
|
||||
reject(error);
|
||||
};
|
||||
request.onsuccess = function(event) {
|
||||
if (count === 0) {
|
||||
|
@ -169,6 +166,16 @@
|
|||
});
|
||||
}
|
||||
|
||||
function handleDOMException(prefix, error, reject) {
|
||||
console.log(
|
||||
prefix + ':',
|
||||
error && error.name,
|
||||
error && error.message,
|
||||
error && error.code
|
||||
);
|
||||
reject(error || new Error(prefix));
|
||||
}
|
||||
|
||||
/**
|
||||
* Import data from JSON into an IndexedDB database. This does not delete any existing data
|
||||
* from the database, so keys could clash
|
||||
|
@ -195,12 +202,11 @@
|
|||
|
||||
var transaction = idb_db.transaction(storeNames, 'readwrite');
|
||||
transaction.onerror = function(e) {
|
||||
var error = e.target.error;
|
||||
console.log(
|
||||
'importFromJsonString error:',
|
||||
error && error.stack ? error.stack : error
|
||||
handleDOMException(
|
||||
'importFromJsonString transaction error',
|
||||
transaction.error,
|
||||
reject
|
||||
);
|
||||
reject(error || new Error('importFromJsonString: transaction.onerror'));
|
||||
};
|
||||
transaction.oncomplete = finish.bind(null, 'transaction complete');
|
||||
|
||||
|
@ -230,15 +236,11 @@
|
|||
}
|
||||
};
|
||||
request.onerror = function(e) {
|
||||
var error = e.target.error;
|
||||
console.log(
|
||||
'Error adding object to store',
|
||||
storeName,
|
||||
':',
|
||||
toAdd,
|
||||
error && error.stack ? error.stack : error
|
||||
handleDOMException(
|
||||
'importFromJsonString request error (store: ' + storeName + ')',
|
||||
request.error,
|
||||
reject
|
||||
);
|
||||
reject(error || new Error('importFromJsonString: request.onerror'));
|
||||
};
|
||||
});
|
||||
});
|
||||
|
@ -399,14 +401,11 @@
|
|||
return new Promise(function(resolve, reject) {
|
||||
var transaction = idb_db.transaction('messages', 'readwrite');
|
||||
transaction.onerror = function(e) {
|
||||
var error = e.target.error;
|
||||
console.log(
|
||||
'exportConversation transaction error for conversation',
|
||||
name,
|
||||
':',
|
||||
error && error.stack ? error.stack : error
|
||||
handleDOMException(
|
||||
'exportConversation transaction error (conversation: ' + name + ')',
|
||||
transaction.error,
|
||||
reject
|
||||
);
|
||||
return reject(error || new Error('exportConversation: transaction.onerror'));
|
||||
};
|
||||
transaction.oncomplete = function() {
|
||||
// this doesn't really mean anything - we may have attachment processing to do
|
||||
|
@ -424,14 +423,11 @@
|
|||
stream.write('{"messages":[');
|
||||
|
||||
request.onerror = function(e) {
|
||||
var error = e.target.error;
|
||||
console.log(
|
||||
'exportConversation: error pulling messages for conversation',
|
||||
name,
|
||||
':',
|
||||
error && error.stack ? error.stack : error
|
||||
handleDOMException(
|
||||
'exportConversation request error (conversation: ' + name + ')',
|
||||
request.error,
|
||||
reject
|
||||
);
|
||||
return reject(error || new Error('exportConversation: request.onerror'));
|
||||
};
|
||||
request.onsuccess = function(event) {
|
||||
var cursor = event.target.result;
|
||||
|
@ -515,12 +511,11 @@
|
|||
return new Promise(function(resolve, reject) {
|
||||
var transaction = idb_db.transaction('conversations', 'readwrite');
|
||||
transaction.onerror = function(e) {
|
||||
var error = e.target.error;
|
||||
console.log(
|
||||
'exportConversations: transaction error:',
|
||||
error && error.stack ? error.stack : error
|
||||
handleDOMException(
|
||||
'exportConversations transaction error',
|
||||
transaction.error,
|
||||
reject
|
||||
);
|
||||
return reject(error || new Error('exportConversations: transaction.onerror'));
|
||||
};
|
||||
transaction.oncomplete = function() {
|
||||
// not really very useful - fires at unexpected times
|
||||
|
@ -530,12 +525,11 @@
|
|||
var store = transaction.objectStore('conversations');
|
||||
var request = store.openCursor();
|
||||
request.onerror = function(e) {
|
||||
var error = e.target.error;
|
||||
console.log(
|
||||
'exportConversations: error pulling conversations:',
|
||||
error && error.stack ? error.stack : error
|
||||
handleDOMException(
|
||||
'exportConversations request error',
|
||||
request.error,
|
||||
reject
|
||||
);
|
||||
return reject(error || new Error('exportConversations: request.onerror'));
|
||||
};
|
||||
request.onsuccess = function(event) {
|
||||
var cursor = event.target.result;
|
||||
|
@ -621,12 +615,11 @@
|
|||
|
||||
var transaction = idb_db.transaction('messages', 'readwrite');
|
||||
transaction.onerror = function(e) {
|
||||
var error = e.target.error;
|
||||
console.log(
|
||||
'saveAllMessages transaction error:',
|
||||
error && error.stack ? error.stack : error
|
||||
handleDOMException(
|
||||
'saveAllMessages transaction error',
|
||||
transaction.error,
|
||||
reject
|
||||
);
|
||||
return reject(error || new Error('saveAllMessages: transaction.onerror'));
|
||||
};
|
||||
transaction.oncomplete = finish.bind(null, 'transaction complete');
|
||||
|
||||
|
@ -650,12 +643,11 @@
|
|||
}
|
||||
};
|
||||
request.onerror = function(e) {
|
||||
var error = e.target.error;
|
||||
console.log(
|
||||
'Error adding object to store:',
|
||||
error && error.stack ? error.stack : error
|
||||
handleDOMException(
|
||||
'saveAllMessages request error',
|
||||
request.error,
|
||||
reject
|
||||
);
|
||||
reject(error || new Error('saveAllMessages: request.onerror'));
|
||||
};
|
||||
});
|
||||
});
|
||||
|
@ -748,12 +740,11 @@
|
|||
|
||||
transaction.oncomplete = finish.bind(null, 'transaction complete');
|
||||
transaction.onerror = function(e) {
|
||||
var error = e.target.error;
|
||||
console.log(
|
||||
'saveAllMessages transaction error:',
|
||||
error && error.stack ? error.stack : error
|
||||
handleDOMException(
|
||||
'clearAllStores transaction error',
|
||||
transaction.error,
|
||||
reject
|
||||
);
|
||||
return reject(error);
|
||||
};
|
||||
|
||||
var count = 0;
|
||||
|
@ -772,12 +763,11 @@
|
|||
};
|
||||
|
||||
request.onerror = function(e) {
|
||||
var error = e.target.error;
|
||||
console.log(
|
||||
'clearAllStores transaction error:',
|
||||
error && error.stack ? error.stack : error
|
||||
handleDOMException(
|
||||
'clearAllStores request error',
|
||||
request.error,
|
||||
reject
|
||||
);
|
||||
return reject(error || new Error('clearAllStores: request.onerror'));
|
||||
};
|
||||
});
|
||||
});
|
||||
|
@ -854,11 +844,12 @@
|
|||
});
|
||||
},
|
||||
// for testing
|
||||
sanitizeFileName: sanitizeFileName,
|
||||
trimFileName: trimFileName,
|
||||
getAttachmentFileName: getAttachmentFileName,
|
||||
getConversationDirName: getConversationDirName,
|
||||
getConversationLoggingName: getConversationLoggingName
|
||||
handleDOMException,
|
||||
sanitizeFileName,
|
||||
trimFileName,
|
||||
getAttachmentFileName,
|
||||
getConversationDirName,
|
||||
getConversationLoggingName,
|
||||
};
|
||||
|
||||
}());
|
||||
|
|
|
@ -1,6 +1,37 @@
|
|||
'use strict';
|
||||
|
||||
describe('Backup', function() {
|
||||
describe('handleDOMException', function() {
|
||||
it('handles null, still calls reject', function() {
|
||||
var called = 0;
|
||||
var reject = function() {
|
||||
called += 1;
|
||||
};
|
||||
var error = null;
|
||||
var prefix = 'something';
|
||||
|
||||
Whisper.Backup.handleDOMException(prefix, error, reject);
|
||||
|
||||
assert.strictEqual(called, 1);
|
||||
});
|
||||
|
||||
it('handles object code and message', function() {
|
||||
var called = 0;
|
||||
var reject = function() {
|
||||
called += 1;
|
||||
};
|
||||
var error = {
|
||||
code: 4,
|
||||
message: 'some cryptic error',
|
||||
};
|
||||
var prefix = 'something';
|
||||
|
||||
Whisper.Backup.handleDOMException(prefix, error, reject);
|
||||
|
||||
assert.strictEqual(called, 1);
|
||||
});
|
||||
});
|
||||
|
||||
describe('sanitizeFileName', function() {
|
||||
it('leaves a basic string alone', function() {
|
||||
var initial = 'Hello, how are you #5 (\'fine\' + great).jpg';
|
||||
|
|
Loading…
Add table
Reference in a new issue