From 37526b554e53cb35b68f9d7e17590823a167135f Mon Sep 17 00:00:00 2001 From: Ivan Socolsky Date: Mon, 20 Oct 2014 18:33:21 -0300 Subject: [PATCH] replaced last opened with last focused wallet --- js/controllers/home.js | 4 ++-- js/models/Identity.js | 21 +++++++-------------- js/models/Profile.js | 15 ++++++++++++--- js/models/TxProposal.js | 1 - js/services/controllerUtils.js | 10 ++++++---- test/Identity.js | 9 +++++---- test/Profile.js | 24 ++++++++++++++---------- 7 files changed, 46 insertions(+), 38 deletions(-) diff --git a/js/controllers/home.js b/js/controllers/home.js index fc11bd7d9..2fffeb661 100644 --- a/js/controllers/home.js +++ b/js/controllers/home.js @@ -25,13 +25,13 @@ angular.module('copayApp.controllers').controller('HomeController', function($sc networkName: config.networkName, walletDefaults: config.wallet, passphraseConfig: config.passphraseConfig, - }, function(err, iden, firstWallet) { + }, function(err, iden, lastFocusedWallet) { if (err && !iden) { console.log('Error:' + err) controllerUtils.onErrorDigest( $scope, (err.toString() || '').match('PNOTFOUND') ? 'Profile not found' : 'Unknown error'); } else { - controllerUtils.bindProfile($scope, iden, firstWallet); + controllerUtils.bindProfile($scope, iden, lastFocusedWallet); } }); } diff --git a/js/models/Identity.js b/js/models/Identity.js index 73e27818a..4615db638 100644 --- a/js/models/Identity.js +++ b/js/models/Identity.js @@ -207,10 +207,8 @@ Identity.open = function(email, password, opts, cb) { wallets.push(w); } if (--remaining == 0) { - var firstWallet = _.findWhere(wallets, { - id: wids[0] - }); - return cb(err, iden, firstWallet); + var lastFocused = iden.profile.getLastFocusedWallet(); + return cb(err, iden, lastFocused); } }) }); @@ -350,7 +348,7 @@ Identity.prototype.toEncryptedObj = function() { ret.iterations = this.storage.iterations; ret.wallets = {}; - _.each(this.openWallets, function(w){ + _.each(this.openWallets, function(w) { ret.wallets[w.getId()] = w.toEncryptedObj(); }); @@ -437,11 +435,8 @@ Identity.prototype.createWallet = function(opts, cb) { this.addWallet(w, function(err) { if (err) return cb(err); self.openWallets.push(w); - - self.profile.setLastOpenedTs(w.id, function(err) { - w.netStart(); - return cb(err, w); - }); + w.netStart(); + return cb(err, w); }); }; @@ -511,10 +506,8 @@ Identity.prototype.openWallet = function(walletId, cb) { self.openWallets.push(w); w.store(function(err) { - self.profile.setLastOpenedTs(walletId, function() { - w.netStart(); - return cb(err, w); - }); + w.netStart(); + return cb(err, w); }); }); // }); diff --git a/js/models/Profile.js b/js/models/Profile.js index 6753db231..367af685d 100644 --- a/js/models/Profile.js +++ b/js/models/Profile.js @@ -76,7 +76,7 @@ Profile.prototype.getWallet = function(walletId, cb) { Profile.prototype.listWallets = function() { return _.sortBy(this.walletInfos, function(winfo) { - return -winfo.lastOpenedTs || -winfo.createdTs; + return winfo.createdTs; }); }; @@ -121,12 +121,21 @@ Profile.prototype.addWallet = function(walletId, info, cb) { }; -Profile.prototype.setLastOpenedTs = function(walletId, cb) { +Profile.prototype.setLastFocusedTs = function(walletId, cb) { return this.addToWallet(walletId, { - lastOpenedTs: Date.now() + lastFocusedTs: Date.now() }, cb); }; +Profile.prototype.getLastFocusedWallet = function() { + var self = this; + var maxTs = _.max(_.pluck(self.walletInfos, 'lastFocusedTs')); + var last = _.findWhere(_.values(self.walletInfos), { + lastFocusedTs: maxTs + }); + return last ? last.id : null; +}; + Profile.prototype.store = function(opts, cb) { var self = this; var val = self.toObj(); diff --git a/js/models/TxProposal.js b/js/models/TxProposal.js index 6570db64e..557a64c34 100644 --- a/js/models/TxProposal.js +++ b/js/models/TxProposal.js @@ -25,7 +25,6 @@ function TxProposal(opts) { this.version = opts.version; this.builder = opts.builder; this.createdTs = opts.createdTs; - this.createdTs = opts.createdTs; this._inputSigners = []; // CopayerIds diff --git a/js/services/controllerUtils.js b/js/services/controllerUtils.js index a50a52deb..63a00edbe 100644 --- a/js/services/controllerUtils.js +++ b/js/services/controllerUtils.js @@ -209,10 +209,12 @@ angular.module('copayApp.services') preconditions.checkState(w && _.isObject(w)); $rootScope.wallet = w; - root.redirIfLogged(); - root.updateBalance(w, function() { - $rootScope.$digest(); - }) + $rootScope.iden.profile.setLastFocusedTs(w.id, function() { + root.redirIfLogged(); + root.updateBalance(w, function() { + $rootScope.$digest(); + }) + }); }; root.bindProfile = function($scope, iden, w) { diff --git a/test/Identity.js b/test/Identity.js index a63a9fedb..177700453 100644 --- a/test/Identity.js +++ b/test/Identity.js @@ -134,6 +134,7 @@ describe('Identity model', function() { profile.listWallets = sinon.stub().returns([{ id: 'walletid' }]); + profile.getLastFocusedWallet = sinon.stub().returns(null); Identity._openProfile = sinon.stub().callsArgWith(3, null, profile); Identity._walletRead = sinon.stub().callsArgWith(2, null, wallet); }); @@ -147,7 +148,7 @@ describe('Identity model', function() { }); }); - it('should return last used wallet', function(done) { + it('should return last focused wallet', function(done) { var wallets = [{ id: 'wallet1', store: sinon.stub().yields(null), @@ -162,13 +163,14 @@ describe('Identity model', function() { netStart: sinon.stub(), }]; profile.listWallets = sinon.stub().returns(wallets); + profile.getLastFocusedWallet = sinon.stub().returns(wallets[1]); Identity._walletRead = sinon.stub(); Identity._walletRead.onCall(0).callsArgWith(2, null, wallets[0]); Identity._walletRead.onCall(1).callsArgWith(2, null, wallets[1]); Identity._walletRead.onCall(2).callsArgWith(2, null, wallets[2]); Identity.open(email, password, config, function(err, iden, w) { - w.id.should.equal('wallet1'); + w.id.should.equal('wallet2'); done(); }); }); @@ -270,12 +272,11 @@ describe('Identity model', function() { Identity._walletRead = sinon.stub().callsArgWith(2, null, wallet); }); - it('should return wallet and call .store, .setLastOpenedTs & .migrateWallet', function(done) { + it('should return wallet and call .store & .migrateWallet', function(done) { iden.openWallet('dummy', function(err, w) { should.not.exist(err); w.store.calledOnce.should.equal(true); - iden.profile.setLastOpenedTs.calledTwice.should.equal(true); // iden.migrateWallet.calledOnce.should.equal(true); done(); }); diff --git a/test/Profile.js b/test/Profile.js index fe243c1c2..fe09f1773 100644 --- a/test/Profile.js +++ b/test/Profile.js @@ -15,7 +15,7 @@ describe('Profile model', function() { var storage = new FakeStorage(); var opts = { email: email, - hash:hash, + hash: hash, }; beforeEach(function() { @@ -87,7 +87,9 @@ describe('Profile model', function() { describe('#addToWallet', function() { it('should warn if wallet does not exist', function(done) { var p = new Profile(opts, storage); - p.addToWallet('234',{1:1}, function(err) { + p.addToWallet('234', { + 1: 1 + }, function(err) { err.toString().should.contain('WNOEXIST'); done(); }); @@ -95,7 +97,9 @@ describe('Profile model', function() { it('should add info to a wallet', function(done) { var p = new Profile(opts, storage); p.addWallet('234', {}, function(err) { - p.addToWallet('234',{'hola':1}, function(err) { + p.addToWallet('234', { + 'hola': 1 + }, function(err) { var w = p.getWallet('234'); should.exist(w); w.hola.should.equal(1); @@ -105,19 +109,19 @@ describe('Profile model', function() { }) }); }); - + describe('#listWallets', function() { it('should list wallets in order', function(done) { var p = new Profile(opts, storage); p.addWallet('123', {}, function(err) { - setTimeout(function() { - p.addWallet('234', {}, function(err) { - _.pluck(p.listWallets(), 'id').should.deep.equal(['234', '123']); - done(); - }) - },10); + setTimeout(function() { + p.addWallet('234', {}, function(err) { + _.pluck(p.listWallets(), 'id').should.deep.equal(['123', '234']); + done(); + }) + }, 10); }); }); });