Synchronize all storage upgrade.

This commit is contained in:
Andy Phillipson 2017-01-22 15:22:59 -05:00
commit d4ac5f9551

View file

@ -156,7 +156,7 @@ angular.module('copayApp.services')
} }
data = data || {}; data = data || {};
var upgraded = ''; var upgraded = '';
Object.keys(data).forEach(function(key) { Object.asyncEach(data, function(key, callback) {
// Keys are account emails // Keys are account emails
if (!data[key]['bitpayApi-' + network]) { if (!data[key]['bitpayApi-' + network]) {
// Needs upgrade // Needs upgrade
@ -170,17 +170,20 @@ angular.module('copayApp.services')
_02_setBitpayDebitCards(network, data[key]['bitpayDebitCards-' + network], function(err) { _02_setBitpayDebitCards(network, data[key]['bitpayDebitCards-' + network], function(err) {
if (err) return cb(err); if (err) return cb(err);
callback();
}); });
}); });
} }
}); }, function() {
// Remove obsolete key. // done
storage.remove('bitpayAccounts-' + network, function() { // Remove obsolete key.
if (upgraded.length > 0) { storage.remove('bitpayAccounts-' + network, function() {
cb(null, 'upgraded to \'bitpayAccounts-v2-' + network + '\':' + upgraded); if (upgraded.length > 0) {
} else { cb(null, 'upgraded to \'bitpayAccounts-v2-' + network + '\':' + upgraded);
cb(); } else {
} cb();
}
});
}); });
}); });
}; };
@ -267,12 +270,14 @@ angular.module('copayApp.services')
$log.info('Storage upgraded for \'' + key + '\': ' + msg); $log.info('Storage upgraded for \'' + key + '\': ' + msg);
}; };
// IMPORTANT: This function is designed to block execution until it completes.
// Ideally storage should not be used until it has been verified.
function _upgrade(cb) { function _upgrade(cb) {
var errorCount = 0; var errorCount = 0;
var errorMessage = undefined; var errorMessage = undefined;
var keys = Object.keys(_upgraders).sort(); var keys = Object.keys(_upgraders).sort();
var networks = ['livenet', 'testnet']; var networks = ['livenet', 'testnet'];
keys.forEach(function(key) { Object.asyncEach(keys, function(key, callback) {
networks.forEach(function(network) { networks.forEach(function(network) {
var storagekey = key.split('_')[1]; var storagekey = key.split('_')[1];
_upgraders[key](storagekey, network, function(err, msg) { _upgraders[key](storagekey, network, function(err, msg) {
@ -282,10 +287,31 @@ angular.module('copayApp.services')
errorMessage = errorCount + ' storage upgrade failures'; errorMessage = errorCount + ' storage upgrade failures';
} }
if (msg) _handleUpgradeSuccess(storagekey + '-' + network, msg); if (msg) _handleUpgradeSuccess(storagekey + '-' + network, msg);
callback();
}); });
}); });
}, function() {
//done
cb(errorMessage);
}); });
cb(errorMessage); };
Object.asyncEach = function(iterableList, callback, done) {
var i = -1;
var length = iterableList.length;
function loop() {
i++;
if (i === length) {
done();
return;
} else if (i < length) {
callback(iterableList[i], loop);
} else {
return;
}
}
loop();
}; };
root.tryToMigrate = function(cb) { root.tryToMigrate = function(cb) {