Better handling for errorDecrypting

This commit is contained in:
Mo Bitar
2018-01-03 00:56:31 -06:00
parent fdbd2638a4
commit d8b1559d84
7 changed files with 59 additions and 18 deletions

View File

@@ -77,7 +77,7 @@ class SyncManager {
markAllItemsDirtyAndSaveOffline(callback, alternateUUIDs) {
// use a copy, as alternating uuid will affect array
var originalItems = this.modelManager.allItems.slice();
var originalItems = this.modelManager.allItems.filter((item) => {return !item.errorDecrypting}).slice();
var block = () => {
var allItems = this.modelManager.allItems;
@@ -359,9 +359,30 @@ class SyncManager {
var keys = this.authManager.keys() || this.passcodeManager.keys();
EncryptionHelper.decryptMultipleItems(responseItems, keys);
var items = this.modelManager.mapResponseItemsToLocalModelsOmittingFields(responseItems, omitFields, source);
// During the decryption process, items may be marked as "errorDecrypting". If so, we want to be sure
// to persist this new state by writing these items back to local storage. When an item's "errorDecrypting"
// flag is changed, its "errorDecryptingValueChanged" flag will be set, so we can find these items by filtering (then unsetting) below:
var itemsWithErrorStatusChange = items.filter((item) => {
var valueChanged = item.errorDecryptingValueChanged;
// unset after consuming value
item.errorDecryptingValueChanged = false;
return valueChanged;
});
if(itemsWithErrorStatusChange.length > 0) {
this.writeItemsToLocalStorage(itemsWithErrorStatusChange, false, null);
}
return items;
}
refreshErroredItems() {
var erroredItems = this.modelManager.allItems.filter((item) => {return item.errorDecrypting == true});
if(erroredItems.length > 0) {
this.handleItemsResponse(erroredItems, null, ModelManager.MappingSourceLocalRetrieved);
}
}
handleUnsavedItemsResponse(unsaved) {
if(unsaved.length == 0) {
return;