Skip to content

Commit 949b45f

Browse files
committed
Merge pull request #180 from isocolsky/scanning
Scanning
2 parents c42b4a4 + 8a73672 commit 949b45f

File tree

3 files changed

+59
-25
lines changed

3 files changed

+59
-25
lines changed

lib/model/wallet.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ Wallet.create = function(opts) {
3232
x.pubKey = opts.pubKey;
3333
x.network = opts.network;
3434
x.addressManager = AddressManager.create();
35+
x.scanStatus = null;
3536

3637
return x;
3738
};
@@ -53,6 +54,7 @@ Wallet.fromObj = function(obj) {
5354
x.pubKey = obj.pubKey;
5455
x.network = obj.network;
5556
x.addressManager = AddressManager.fromObj(obj.addressManager);
57+
x.scanStatus = obj.scanStatus;
5658

5759
return x;
5860
};

lib/server.js

Lines changed: 21 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1225,26 +1225,34 @@ WalletService.prototype.startScan = function(opts, cb) {
12251225
var self = this;
12261226

12271227
function scanFinished(err) {
1228-
var data = {};
1229-
if (err) {
1230-
data.result = 'error';
1231-
data.error = err;
1232-
} else {
1233-
data.result = 'success';
1234-
}
1235-
self._notify('ScanFinished', data, true);
1228+
var result = err ? 'error' : 'success';
1229+
var data = {
1230+
result: result,
1231+
};
1232+
if (err) data.error = err;
1233+
1234+
self.getWallet({}, function(err, wallet) {
1235+
wallet.scanStatus = result;
1236+
self.storage.storeWallet(wallet, function() {
1237+
self._notify('ScanFinished', data, true);
1238+
});
1239+
});
12361240
};
12371241

12381242
self.getWallet({}, function(err, wallet) {
12391243
if (err) return cb(err);
12401244
if (!wallet.isComplete()) return cb(new ClientError('Wallet is not complete'));
1245+
wallet.scanStatus = 'running';
1246+
self.storage.storeWallet(wallet, function(err) {
1247+
if (err) return cb(err);
12411248

1242-
setTimeout(function() {
1243-
self.scan(opts, scanFinished);
1244-
}, 100);
1249+
setTimeout(function() {
1250+
self.scan(opts, scanFinished);
1251+
}, 100);
12451252

1246-
return cb(null, {
1247-
started: true
1253+
return cb(null, {
1254+
started: true
1255+
});
12481256
});
12491257
});
12501258
};

test/integration/server.js

Lines changed: 36 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -2669,18 +2669,42 @@ describe('Wallet service', function() {
26692669
];
26702670
WalletService.onNotification(function(n) {
26712671
if (n.type == 'ScanFinished') {
2672-
should.not.exist(n.creatorId);
2673-
server.storage.fetchAddresses(wallet.id, function(err, addresses) {
2674-
should.exist(addresses);
2675-
addresses.length.should.equal(expectedPaths.length);
2676-
var paths = _.pluck(addresses, 'path');
2677-
_.difference(paths, expectedPaths).length.should.equal(0);
2678-
server.createAddress({}, function(err, address) {
2679-
should.not.exist(err);
2680-
address.path.should.equal('m/2147483647/0/4');
2681-
done();
2682-
});
2683-
})
2672+
server.getWallet({}, function(err, wallet) {
2673+
should.exist(wallet.scanStatus);
2674+
wallet.scanStatus.should.equal('success');
2675+
should.not.exist(n.creatorId);
2676+
server.storage.fetchAddresses(wallet.id, function(err, addresses) {
2677+
should.exist(addresses);
2678+
addresses.length.should.equal(expectedPaths.length);
2679+
var paths = _.pluck(addresses, 'path');
2680+
_.difference(paths, expectedPaths).length.should.equal(0);
2681+
server.createAddress({}, function(err, address) {
2682+
should.not.exist(err);
2683+
address.path.should.equal('m/2147483647/0/4');
2684+
done();
2685+
});
2686+
})
2687+
});
2688+
}
2689+
});
2690+
server.startScan({}, function(err) {
2691+
should.not.exist(err);
2692+
server.getWallet({}, function(err, wallet) {
2693+
should.exist(wallet.scanStatus);
2694+
wallet.scanStatus.should.equal('running');
2695+
});
2696+
});
2697+
});
2698+
it('should set scan status error when unable to reach blockchain', function(done) {
2699+
blockchainExplorer.getAddressActivity = sinon.stub().yields('dummy error');
2700+
WalletService.onNotification(function(n) {
2701+
if (n.type == 'ScanFinished') {
2702+
should.exist(n.data.error);
2703+
server.getWallet({}, function(err, wallet) {
2704+
should.exist(wallet.scanStatus);
2705+
wallet.scanStatus.should.equal('error');
2706+
done();
2707+
});
26842708
}
26852709
});
26862710
server.startScan({}, function(err) {

0 commit comments

Comments
 (0)