From c08eda28ab04cc3b4beca43a819d0e9ac4825e53 Mon Sep 17 00:00:00 2001 From: Mario Colque Date: Tue, 1 Apr 2014 18:22:07 -0300 Subject: [PATCH] added support for localstorage --- index.html | 1 + js/app.js | 4 ++- js/controllers/peer.js | 1 - js/controllers/signin.js | 37 ++++++++++++++------- js/services/network.js | 69 +++++++++++++++++++++++++--------------- js/services/storage.js | 22 +++++++++++++ 6 files changed, 96 insertions(+), 38 deletions(-) create mode 100644 js/services/storage.js diff --git a/index.html b/index.html index f80a6e116..7d1aca91b 100644 --- a/index.html +++ b/index.html @@ -205,6 +205,7 @@ + diff --git a/js/app.js b/js/app.js index 56fc11cde..7d9375b56 100644 --- a/js/app.js +++ b/js/app.js @@ -11,7 +11,8 @@ angular.module('copay',[ 'copay.backup', 'copay.network', 'copay.signin', - 'copay.peer' + 'copay.peer', + 'copay.storage' ]); angular.module('copay.header', []); @@ -22,4 +23,5 @@ angular.module('copay.backup', []); angular.module('copay.network', []); angular.module('copay.signin', []); angular.module('copay.peer', []); +angular.module('copay.storage', []); diff --git a/js/controllers/peer.js b/js/controllers/peer.js index b54f12561..b99729a5a 100644 --- a/js/controllers/peer.js +++ b/js/controllers/peer.js @@ -4,7 +4,6 @@ angular.module('copay.peer').controller('PeerController', function($scope, $rootScope, $location, $routeParams, Network) { $scope.init = function() { - console.log('connecting peer init'); //Network.connect($rootScope.masterId); }; }); diff --git a/js/controllers/signin.js b/js/controllers/signin.js index dea6aef69..25806c3b2 100644 --- a/js/controllers/signin.js +++ b/js/controllers/signin.js @@ -1,28 +1,43 @@ 'use strict'; angular.module('copay.signin').controller('SigninController', - function($scope, $rootScope, $location, Network) { + function($scope, $rootScope, $location, Network, Storage) { + var peerData = Storage.get('peerData'); + $scope.loading = false; - $rootScope.peerId = null; + $rootScope.peerId = peerData ? peerData.peerId : null; $scope.create = function() { $scope.loading = true; - Network.init(function(pid) { - $rootScope.masterId = pid; - $location.path('peer'); + Network.init(function() { + $location.path('peer'); }); }; $scope.join = function(cid) { $scope.loading = true; - Network.init(function() { - Network.connect(cid, function() { - $rootScope.masterId = cid; - $location.path('peer'); - }); - }); + if (cid) { + $rootScope.connectedTo.push(cid); + Network.init(function() { + Network.connect(cid, function() { + $location.path('peer'); + }); + }); + } }; + + if (peerData && peerData.peerId) { + console.log('------- reloaded ----------'); + console.log(peerData); + $rootScope.peerId = peerData.peerId; + $rootScope.connectedPeers = peerData.connectedPeers; + + console.log(peerData.connectedTo[0]); + + $scope.join(peerData.connectedTo[0]); + } }); + diff --git a/js/services/network.js b/js/services/network.js index c2387191e..d378523c1 100644 --- a/js/services/network.js +++ b/js/services/network.js @@ -1,11 +1,10 @@ 'use strict'; angular.module('copay.network') - .factory('Network', function($rootScope) { + .factory('Network', function($rootScope, Storage) { var peer; $rootScope.connectedPeers = []; $rootScope.connectedTo = []; - $rootScope.masterId = null; $rootScope.peerId = null; var _arrayDiff = function(a, b) { @@ -22,6 +21,18 @@ angular.module('copay.network') return diff; }; + var _isInArray = function(i, array) { + return array.indexOf(i) > -1; + }; + + var _saveDataStorage = function() { + Storage.save('peerData', { + peerId: $rootScope.peerId, + connectedTo: $rootScope.connectedTo, + connectedPeers: $rootScope.connectedPeers + }); + }; + var _sender = function(pid, data) { if (pid !== $rootScope.peerId) { console.log('-------- sending data to: ' + pid + ' --------'); @@ -46,9 +57,14 @@ angular.module('copay.network') console.log(data); var obj = JSON.parse(data); - if (obj.data.peers) { + if (obj.data.type === 'connectToPeers') _connectToPeers(obj.data.peers); - } + + if (obj.data.type === 'getPeers') + _send(obj.sender, { + type: 'connectToPeers', + peers: $rootScope.connectedPeers + }); }; var _connectToPeers = function(peers) { @@ -67,9 +83,13 @@ angular.module('copay.network') peer.on('open', function(pid) { $rootScope.peerId = pid; - $rootScope.connectedPeers.push(pid); - cb(pid); + if (!_isInArray(pid, $rootScope.connectedPeers)) + $rootScope.connectedPeers.push(pid); + + _saveDataStorage(); + + cb(); $rootScope.$digest(); }); @@ -77,25 +97,26 @@ angular.module('copay.network') peer.on('connection', function(conn) { if (conn.label === 'wallet') { conn.on('open', function() { - console.log('-------- ' + conn.peer + ' conected to me --------'); + console.log('<<<<<<<<<<< ' + conn.peer + ' conected to me --------'); - console.log($rootScope.masterId); - console.log($rootScope.peerId); - - if ($rootScope.masterId === $rootScope.peerId) { - console.log('-------- I am the master --------'); + var isConnected = $rootScope.connectedTo.indexOf(conn.peer); + if (isConnected === -1) { var c = peer.connect(conn.peer, { label: 'wallet', serialization: 'none', reliable: false, - metadata: { message: 'hi peer!' } + metadata: { message: 'hi copayer!' } }); c.on('open', function() { - $rootScope.connectedPeers.push(conn.peer); - $rootScope.connectedTo.push(conn.peer); + console.log('>>>>>>>>> i am connected to ' + conn.peer); + if (!_isInArray(conn.peer, $rootScope.connectedPeers)) + $rootScope.connectedPeers.push(conn.peer); - _send($rootScope.connectedPeers, { peers: $rootScope.connectedPeers }); + if (!_isInArray(conn.peer, $rootScope.connectedTo)) + $rootScope.connectedTo.push(conn.peer); + + _saveDataStorage(); $rootScope.$digest(); }); @@ -104,6 +125,8 @@ angular.module('copay.network') } }); + peer.on('data', _onData); + peer.on('close', function() { console.log('------- connection closed ---------'); }); @@ -121,19 +144,14 @@ angular.module('copay.network') c.on('open', function() { console.log('-------- I\'m connected to ' + pid + ' ------'); - console.log($rootScope.connectedPeers); - console.log($rootScope.connectedTo); - $rootScope.connectedPeers.push(pid); $rootScope.connectedTo.push(pid); - if (typeof cb === 'function') - cb(); + if (typeof cb === 'function') cb(); + _send(c.peer, { type: 'getPeers' }); + $rootScope.$digest(); - - console.log($rootScope.connectedPeers); - console.log($rootScope.connectedTo); }); c.on('data', _onData); @@ -150,13 +168,14 @@ angular.module('copay.network') _sender(pid, data); }); } else if (typeof pids === 'string') { - _sender(pid, data); + _sender(pids, data); } }; var _disconnect = function() { peer.disconnect(); peer.destroy(); + Storage.remove('peerData'); console.log('Disconnected and destroyed connection'); } diff --git a/js/services/storage.js b/js/services/storage.js new file mode 100644 index 000000000..b036f5aa4 --- /dev/null +++ b/js/services/storage.js @@ -0,0 +1,22 @@ +'use strict'; + +angular.module('copay.storage') + .factory('Storage', function($rootScope) { + return { + get: function(key) { + return JSON.parse(localStorage.getItem(key)); + }, + + save: function(key, data) { + localStorage.setItem(key, JSON.stringify(data)); + }, + + remove: function(key) { + localStorage.removeItem(key); + }, + + clearAll: function() { + localStorage.clear(); + } + }; + });