diff --git a/index.html b/index.html index 349bc4519..8ebc2f12c 100644 --- a/index.html +++ b/index.html @@ -337,6 +337,7 @@ + diff --git a/js/app.js b/js/app.js index 793b1ee05..e8bbf2fdf 100644 --- a/js/app.js +++ b/js/app.js @@ -12,6 +12,7 @@ angular.module('copay',[ 'copay.walletFactory', 'copay.signin', 'copay.socket', + 'copay.controllerUtils', 'copay.setup', 'copay.peer' ]); @@ -22,6 +23,7 @@ angular.module('copay.transactions', []); angular.module('copay.send', []); angular.module('copay.backup', []); angular.module('copay.walletFactory', []); +angular.module('copay.controllerUtils', []); angular.module('copay.signin', []); angular.module('copay.setup', []); angular.module('copay.peer', []); diff --git a/js/controllers/setup.js b/js/controllers/setup.js index a8f25cb3e..58d5f158d 100644 --- a/js/controllers/setup.js +++ b/js/controllers/setup.js @@ -1,7 +1,7 @@ 'use strict'; angular.module('copay.setup').controller('SetupController', - function($scope, $rootScope, $location, walletFactory) { + function($scope, $rootScope, $location, walletFactory, controllerUtils) { $scope.loading = false; @@ -32,16 +32,7 @@ angular.module('copay.setup').controller('SetupController', totalCopayers: totalCopayers }; var w = walletFactory.create(opts); - w.on('created', function(){ - $location.path('peer'); - $rootScope.wallet = w; - $rootScope.$digest(); - }); - w.on('openError', function(){ - $scope.loading = false; - $rootScope.flashMessage = {type:'error', message: 'Wallet not found'}; - $location.path('signin'); - }); + controllerUtils.setupUxHandlers(w); w.netStart(); }; diff --git a/js/controllers/signin.js b/js/controllers/signin.js index 5cdfc28a9..a636dbab2 100644 --- a/js/controllers/signin.js +++ b/js/controllers/signin.js @@ -1,7 +1,9 @@ 'use strict'; + + angular.module('copay.signin').controller('SigninController', - function($scope, $rootScope, $location, walletFactory) { + function($scope, $rootScope, $location, walletFactory, controllerUtils) { // var peerData = Storage.get($rootScope.walletId, 'peerData'); // $rootScope.peerId = peerData ? peerData.peerId : null; @@ -13,32 +15,6 @@ angular.module('copay.signin').controller('SigninController', return walletFactory.getWalletIds(); }; - var _setupUxHandlers = function(w) { - w.on('created', function() { - $location.path('peer'); - $rootScope.wallet = w; - - // Initial getBalance - $rootScope.wallet.getBalance(function(balance) { - $scope.$apply(function() { - $rootScope.totalBalance = balance; - }); - }); - - $rootScope.$digest(); - }); - w.on('refresh', function() { - -console.log('[signin.js.23] RECEIVED REFRESH'); //TODO - }); - - w.on('openError', function(){ - $scope.loading = false; - $rootScope.flashMessage = {type:'error', message: 'Wallet not found'}; - $location.path('signin'); - }); - }; - $scope.create = function() { $location.path('setup'); }; @@ -47,7 +23,7 @@ console.log('[signin.js.23] RECEIVED REFRESH'); //TODO $scope.loading = true; var w = walletFactory.open(walletId); - _setupUxHandlers(w); + controllerUtils.setupUxHandlers(w); w.netStart(); }; @@ -56,7 +32,7 @@ console.log('[signin.js.42:join:]'); //TODO $scope.loading = true; walletFactory.connectTo(cid, function(w) { console.log('[signin.js.50]'); //TODO - _setupUxHandlers(w); + controllerUtils.setupUxHandlers(w); w.netStart(); }); }; diff --git a/js/models/core/Wallet.js b/js/models/core/Wallet.js index 4d8270403..7c7231279 100644 --- a/js/models/core/Wallet.js +++ b/js/models/core/Wallet.js @@ -22,7 +22,7 @@ function Wallet(opts) { self[k] = opts[k]; }); - console.log('creating '+opts.requiredCopayers+' of '+opts.totalCopayers+' wallet'); + this.log('creating '+opts.requiredCopayers+' of '+opts.totalCopayers+' wallet'); this.id = opts.id || Wallet.getRandomId(); this.verbose = opts.verbose; @@ -33,7 +33,7 @@ function Wallet(opts) { Wallet.parent=EventEmitter; Wallet.prototype.log = function(){ -// if (!this.verbose) return; + if (!this.verbose) return; console.log(arguments); }; @@ -99,7 +99,7 @@ Wallet.prototype._handleData = function(senderId, data, isInbound) { if (this.id !== data.walletId) throw new Error('wrong message received: Bad wallet ID'); -console.log('[Wallet.js.98]' , data.type); //TODO + this.log('[Wallet.js.98]' , data.type); //TODO switch(data.type) { case 'publicKeyRing': @@ -120,6 +120,7 @@ Wallet.prototype._handleNetworkChange = function(newPeer) { this.sendWalletId(newPeer); this.sendPublicKeyRing(newPeer); this.sendTxProposals(newPeer); + this.emit('refresh'); }; Wallet.prototype.netStart = function() { @@ -135,7 +136,7 @@ Wallet.prototype.netStart = function() { }; Wallet.prototype.store = function() { -console.log('[Wallet.js.135:store:]'); //TODO + this.log('[Wallet.js.135:store:]'); //TODO this.storage.set(this.id,'opts', { id: this.id, spendUnconfirmed: this.spendUnconfirmed, @@ -146,7 +147,7 @@ console.log('[Wallet.js.135:store:]'); //TODO this.storage.set(this.id,'txProposals', this.txProposals.toObj()); this.storage.set(this.id,'privateKey', this.privateKey.toObj()); -console.log('[Wallet.js.146] EMIT REFRESH'); //TODO + this.log('[Wallet.js.146] EMIT REFRESH'); //TODO this.emit('refresh'); }; @@ -229,13 +230,13 @@ Wallet.prototype.sign = function(ntxid) { if (ret.signaturesAdded) { txp.signedBy[this.privateKey.id] = Date.now(); -console.log('[Wallet.js.230:ret:]',ret); //TODO + this.log('[Wallet.js.230:ret:]',ret); //TODO if (ret.isFullySigned) { -console.log('[Wallet.js.231] BROADCASTING TX!!!'); //TODO + this.log('[Wallet.js.231] BROADCASTING TX!!!'); //TODO var tx = txp.builder.build(); var txHex = tx.serialize().toString('hex'); this.blockchain.sendRawTransaction(txHex, function(txid) { -console.log('[Wallet.js.235:txid:]',txid); //TODO + this.log('[Wallet.js.235:txid:]',txid); //TODO if (txid) { this.store(); } diff --git a/js/models/core/WalletFactory.js b/js/models/core/WalletFactory.js index 348020a1b..a871b4968 100644 --- a/js/models/core/WalletFactory.js +++ b/js/models/core/WalletFactory.js @@ -148,7 +148,10 @@ WalletFactory.prototype.openRemote = function(peedId) { opts.storage = this.storage; opts.network = this.network; opts.blockchain = this.blockchain; - opts.spendUnconfirmed = opts.spendUnconfirmed || this.walletDefaults.spendUnconfirmed; + + opts.spendUnconfirmed = typeof opts.spendUnconfirmed === undefined + ?this.walletDefaults.spendUnconfirmed : opts.spendUnconfirmed; + opts.requiredCopayers = requiredCopayers; opts.totalCopayers = totalCopayers; var w = new Wallet(opts); diff --git a/js/models/network/WebRTC.js b/js/models/network/WebRTC.js index 80171fba7..e61fbf2bf 100644 --- a/js/models/network/WebRTC.js +++ b/js/models/network/WebRTC.js @@ -61,14 +61,9 @@ Network._arrayRemove = function(el, array) { return array; }; -// DEBUG -Network.prototype._showConnectedPeers = function() { -// console.log("### CONNECTED PEERS", this.connectedPeers); -}; - Network.prototype._onClose = function(peerId) { this.connectedPeers = Network._arrayRemove(peerId, this.connectedPeers); - this._notify(); + this._notifyNetworkChange(); }; Network.prototype._connectToPeers = function(peerIds) { @@ -97,7 +92,7 @@ Network.prototype._onData = function(data, isInbound) { switch(obj.data.type) { case 'peerList': this._connectToPeers(obj.data.peers); - this._notify(); + this._notifyNetworkChange(); break; case 'disconnect': this._onClose(obj.sender); @@ -144,7 +139,7 @@ Network.prototype._setupConnectionHandlers = function(dataConn, isInbound) { dataConn.peer, isInbound); self._addPeer(dataConn.peer, isInbound); - self._notify( isInbound ? dataConn.peer : null); + self._notifyNetworkChange( isInbound ? dataConn.peer : null); this.emit('open'); } }); @@ -166,8 +161,8 @@ Network.prototype._setupConnectionHandlers = function(dataConn, isInbound) { }); }; -Network.prototype._notify = function(newPeer) { - this._showConnectedPeers(); +Network.prototype._notifyNetworkChange = function(newPeer) { + console.log('[WebRTC.js.164:_notifyNetworkChange:]', newPeer); //TODO this.emit('networkChange', newPeer); }; @@ -178,7 +173,7 @@ Network.prototype._setupPeerHandlers = function(openCallback) { p.on('open', function(peerId) { self.peerId = peerId; self.connectedPeers = [peerId]; - self._notify(); + self._notifyNetworkChange(); return openCallback(peerId); }); @@ -263,7 +258,6 @@ Network.prototype.connectTo = function(peerId) { console.log('### STARTING TO CONNECT TO:' + peerId ); var dataConn = this.peer.connect(peerId, { -// label: 'wallet', serialization: 'none', reliable: true, metadata: { message: 'hi copayer!' } diff --git a/js/services/controllerUtils.js b/js/services/controllerUtils.js new file mode 100644 index 000000000..b01b1d6ab --- /dev/null +++ b/js/services/controllerUtils.js @@ -0,0 +1,25 @@ +'use strict'; + +angular.module('copay.controllerUtils').factory('controllerUtils', function ($rootScope, $location) { + var root = {}; + root.setupUxHandlers = function(w) { + w.on('created', function() { + $location.path('peer'); + $rootScope.wallet = w; + $rootScope.$digest(); + }); + w.on('refresh', function() { + console.log('[controllerUtils.js] RECEIVED REFRESH'); //TODO + $rootScope.$digest(); + }); + + w.on('openError', function(){ + $scope.loading = false; + $rootScope.flashMessage = {type:'error', message: 'Wallet not found'}; + $location.path('signin'); + }); + }; + + return root; +}); + diff --git a/test/test.PublicKeyRing.js b/test/test.PublicKeyRing.js index ac29a9647..b10338b94 100644 --- a/test/test.PublicKeyRing.js +++ b/test/test.PublicKeyRing.js @@ -56,7 +56,7 @@ describe('PublicKeyRing model', function() { w2.registeredCopayers().should.equal(0); w2.isComplete().should.equal(false); - w2.getAddress.bind(false).should.throw(); + (function() {w2.getAddress(0, false);}).should.throw(); }); it('should add and check when adding shared pub keys', function () { @@ -65,9 +65,10 @@ describe('PublicKeyRing model', function() { var copayers = k.copayers; w.isComplete().should.equal(true); - w.addCopayer.bind().should.throw(); - for(var i =0; i<5; i++) - w.addCopayer.bind(copayers[i]).should.throw(); + w.addCopayer.should.throw(); + for(var i =0; i<5; i++) { + (function() {w.addCopayer(copayers[i])}).should.throw(); + } }); it('show be able to tostore and read', function () { @@ -85,9 +86,10 @@ describe('PublicKeyRing model', function() { var w2 = PublicKeyRing.fromObj(data); w2.walletId.should.equal(w.walletId); w2.isComplete().should.equal(true); - w2.addCopayer.bind().should.throw(); - for(var i =0; i<5; i++) - w2.addCopayer.bind(copayers[i]).should.throw(); + w2.addCopayer.should.throw(); + for(var i =0; i<5; i++) { + (function() {w.addCopayer(copayers[i])}).should.throw(); + } w2.changeAddressIndex.should.equal(3); w2.addressIndex.should.equal(5);