diff --git a/API.js b/API.js index 5cf8d0841..76f30a29e 100644 --- a/API.js +++ b/API.js @@ -10,26 +10,13 @@ API.prototype._init = function(opts) { opts = opts || {}; self.opts = opts; - var Wallet = require('soop').load('./js/models/core/Wallet', { + var WalletFactory = require('soop').load('./js/models/core/WalletFactory', { Storage: opts.Storage || require('./test/mocks/FakeStorage'), Network: opts.Network || require('./js/models/network/Base'), Blockchain: opts.Blockchain || require('./js/models/blockchain/Insight') }); - - var config = { - wallet: { - requiredCopayers: opts.requiredCopayers || 3, - totalCopayers: opts.totalCopayers || 5, - }, - storage: { - filename: 'copaywallet.json' - } - }; - var walletConfig = opts.walletConfig || config; - var walletOpts = opts.walletOpts || {}; - - self.wallet = self.opts.wallet || Wallet.factory.create(walletConfig, walletOpts); + this.walletFactory = new WalletFactory(opts); }; API._coerceArgTypes = function(args, argTypes) { @@ -182,13 +169,13 @@ API.prototype.getCommands = decorate('getCommands', [ ['callback', 'function'] ]); -API.prototype._cmd_getPublicKeyRingId = function(callback) { +API.prototype._cmd_getWalletIds = function(callback) { var self = this; - return callback(null, self.wallet.publicKeyRing.walletId); + return callback(null, self.walletFactory.getWalletIds()); }; -API.prototype.getPublicKeyRingId = decorate('getPublicKeyRingId', [ +API.prototype.getWalletIds = decorate('getWalletIds', [ ['callback', 'function'] ]); diff --git a/js/models/core/WalletFactory.js b/js/models/core/WalletFactory.js index baef0b27c..3bcd14070 100644 --- a/js/models/core/WalletFactory.js +++ b/js/models/core/WalletFactory.js @@ -110,7 +110,6 @@ WalletFactory.prototype.create = function(opts) { opts.totalCopayers = totalCopayers; var w = new Wallet(opts); w.store(); - this.addWalletId(w.id); return w; }; @@ -156,28 +155,11 @@ WalletFactory.prototype.openRemote = function(peedId) { }; WalletFactory.prototype.getWalletIds = function() { - var ids = this.storage.getGlobal('walletIds'); - return ids || []; + return this.storage.getWalletIds(); } -WalletFactory.prototype._delWalletId = function(walletId) { - var ids = this.getWalletIds(); - var index = ids.indexOf(walletId); - if (index === -1) return; - ids.splice(index, 1); // removes walletId - this.storage.setGlobal('walletIds', ids); -}; - WalletFactory.prototype.remove = function(walletId) { - WalletFactory._delWalletId(walletId); - // TODO remove wallet contents, not only the id (Wallet.remove?) -}; - -WalletFactory.prototype.addWalletId = function(walletId) { - var ids = this.getWalletIds(); - if (ids.indexOf(walletId) !== -1) return; - ids.push(walletId); - this.storage.setGlobal('walletIds', ids); + // TODO remove wallet contents }; diff --git a/js/models/storage/Base.js b/js/models/storage/Base.js index 8f61f4dfe..29ca2564c 100644 --- a/js/models/storage/Base.js +++ b/js/models/storage/Base.js @@ -17,6 +17,9 @@ Storage.prototype.set = function(walletId,v) { Storage.prototype.remove = function(walletId, k) { }; +Storage.prototype.getWalletIds = function() { +}; + // remove all values Storage.prototype.clearAll = function() { }; diff --git a/js/models/storage/File.js b/js/models/storage/File.js index 9b3fa5f34..2c07b7010 100644 --- a/js/models/storage/File.js +++ b/js/models/storage/File.js @@ -89,6 +89,10 @@ Storage.prototype.remove = function(walletId, k, callback) { this.removeGlobal(this._key(walletId, k), callback); }; +Storage.prototype.getWalletIds = function() { + return []; +}; + // remove all values Storage.prototype.clearAll = function(callback) { this.data = {}; diff --git a/js/models/storage/LocalPlain.js b/js/models/storage/LocalPlain.js index 1bda410f2..d32234899 100644 --- a/js/models/storage/LocalPlain.js +++ b/js/models/storage/LocalPlain.js @@ -52,6 +52,21 @@ Storage.prototype.remove = function(walletId, k) { this.removeGlobal(this._key(walletId,k)); }; +Storage.prototype.getWalletIds = function() { + var walletIds = []; + + for (var i = 0; i < localStorage.length; i++) { + var key = localStorage.key(i); + var split = key.split('::'); + if (split.length == 2) { + var walletId = split[0]; + walletIds.push(walletId); + } + } + + return walletIds; +}; + // remove all values Storage.prototype.clearAll = function() { localStorage.clear(); diff --git a/test/mocks/FakeStorage.js b/test/mocks/FakeStorage.js index ef50df677..5819905e5 100644 --- a/test/mocks/FakeStorage.js +++ b/test/mocks/FakeStorage.js @@ -23,4 +23,8 @@ FakeStorage.prototype.clear = function() { delete this['storage']; } +FakeStorage.prototype.getWalletIds = function() { + return []; +}; + module.exports = require('soop')(FakeStorage); diff --git a/test/test.API.js b/test/test.API.js index a3046d20e..96795f75a 100644 --- a/test/test.API.js +++ b/test/test.API.js @@ -110,11 +110,11 @@ describe('API', function() { }); }); - describe('#getPublicKeyRingId', function() { - it('should get a public key ring ID', function(done) { + describe('#getWalletIds', function() { + it('should get the wallet ids', function(done) { var api = new API({Storage: Storage}); - api.getPublicKeyRingId(function(err, result) { - result.length.should.be.greaterThan(5); + api.getWalletIds(function(err, result) { + result.length.should.be.greaterThan(-1); done(); }); });