diff --git a/index.html b/index.html index c416dc7d2..78f927ee2 100644 --- a/index.html +++ b/index.html @@ -154,7 +154,7 @@
Create a new wallet
- Import from file + Import from file @@ -163,6 +163,16 @@ + + + diff --git a/js/app.js b/js/app.js index 54891ef3f..6f64a9b30 100644 --- a/js/app.js +++ b/js/app.js @@ -16,7 +16,8 @@ var copayApp = window.copayApp = angular.module('copay',[ 'copay.controllerUtils', 'copay.setup', 'copay.directives', - 'copay.video' + 'copay.video', + 'copay.import' ]); angular.module('copay.header', []); @@ -32,4 +33,5 @@ angular.module('copay.setup', []); angular.module('copay.socket', []); angular.module('copay.directives', []); angular.module('copay.video', []); +angular.module('copay.import', []); diff --git a/js/controllers/import.js b/js/controllers/import.js new file mode 100644 index 000000000..43c3376c2 --- /dev/null +++ b/js/controllers/import.js @@ -0,0 +1,22 @@ +'use strict'; + +angular.module('copay.import').controller('ImportController', + function($scope, $rootScope, walletFactory, controllerUtils) { + $scope.title = 'Import a backup'; + + $scope.getFile = function() { + var reader = new FileReader(); + + // If we use onloadend, we need to check the readyState. + reader.onloadend = function(evt) { + if (evt.target.readyState == FileReader.DONE) { // DONE == 2 + var obj = JSON.parse(evt.target.result); + $rootScope.wallet = walletFactory.fromObj(obj); + + controllerUtils.startNetwork($rootScope.wallet); + } + }; + + reader.readAsBinaryString($scope.file); + }; + }); diff --git a/js/directives.js b/js/directives.js index 9dd48091c..580434df8 100644 --- a/js/directives.js +++ b/js/directives.js @@ -75,5 +75,15 @@ angular.module('copay.directives') } } }) -; + .directive('ngFileSelect',function() { + return { + link: function($scope, el) { + el.bind('change', function(e) { + $scope.file = (e.srcElement || e.target).files[0]; + console.log('file directive', $scope.file); + $scope.getFile(); + }); + } + } + }); diff --git a/js/models/core/WalletFactory.js b/js/models/core/WalletFactory.js index 7a2972cbe..86c863d9c 100644 --- a/js/models/core/WalletFactory.js +++ b/js/models/core/WalletFactory.js @@ -51,16 +51,11 @@ WalletFactory.prototype._checkRead = function(walletId) { return ret?true:false; }; -WalletFactory.prototype.read = function(walletId) { - if (! this._checkRead(walletId)) - return false; - - var s = this.storage; - var opts = s.get(walletId, 'opts'); - opts.id = walletId; - opts.publicKeyRing = new PublicKeyRing.fromObj(s.get(walletId, 'publicKeyRing')); - opts.txProposals = new TxProposals.fromObj(s.get(walletId, 'txProposals')); - opts.privateKey = new PrivateKey.fromObj(s.get(walletId, 'privateKey')); +WalletFactory.prototype.fromObj = function(obj) { + var opts = obj.opts; + opts.publicKeyRing = new PublicKeyRing.fromObj(obj.publicKeyRing); + opts.txProposals = new TxProposals.fromObj(obj.txProposals); + opts.privateKey = new PrivateKey.fromObj(obj.privateKey); opts.storage = this.storage; opts.network = this.network; opts.blockchain = this.blockchain; @@ -76,6 +71,22 @@ WalletFactory.prototype.read = function(walletId) { // No really an error, just to be sure. } this.log('### WALLET OPENED:', w.id); + + return w; +}; + +WalletFactory.prototype.read = function(walletId) { + if (! this._checkRead(walletId)) + return false; + + var s = this.storage; + var opts = s.get(walletId, 'opts'); + opts.id = walletId; + opts.publicKeyRing = s.get(walletId, 'publicKeyRing'); + opts.txProposals = s.get(walletId, 'txProposals'); + opts.privateKey = s.get(walletId, 'privateKey'); + + w = this.formObj(opts); return w; }; diff --git a/js/routes.js b/js/routes.js index 3970dd047..1206f5192 100644 --- a/js/routes.js +++ b/js/routes.js @@ -14,6 +14,10 @@ angular templateUrl: 'signin.html', validate: false }) + .when('/import', { + templateUrl: 'import.html', + validate: false + }) .when('/setup', { templateUrl: 'setup.html', validate: false