node-build.js
2.75 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
'use strict';
var rxjs_Observable = require('rxjs/Observable');
var http = require('http');
var https = require('https');
var fs = require('fs');
var NodeFileHandler = (function () {
function NodeFileHandler() {
}
NodeFileHandler.prototype.selectProtocol = function (url) {
if (url.search(/^http:\/\//) === 0) {
return http;
}
else if (url.search(/^https:\/\//) === 0) {
return https;
}
else {
return null;
}
};
NodeFileHandler.prototype.download = function (source, target) {
var handler = this.selectProtocol(source);
return rxjs_Observable.Observable.create(function (subscriber) {
if (!handler) {
subscriber.error("No handler for source: " + source);
return;
}
// file already exists and is not empty
if (fs.existsSync(target) && (fs.statSync(target)['size'] > 0)) {
subscriber.complete();
return;
}
var file = fs.createWriteStream(target, { 'flags': 'a' });
handler.get(source, function (response) {
var size = response.headers['content-length']; // in bytes
var prog = 0; // already downloaded
var progCounts = 100; // how many progress events should be triggerd (1-100 %)
var nextProg = (1 / progCounts);
response.on('data', function (chunk) {
prog += chunk.length;
file.write(chunk, 'binary');
if ((prog / size) > nextProg) {
subscriber.next(prog / size);
nextProg += (1 / progCounts);
}
});
response.on('end', function () {
file.end();
subscriber.complete();
});
}).on('error', function (error) {
fs.unlink(target);
subscriber.error("Error while downloading: " + error);
});
});
};
return NodeFileHandler;
}());
var Bsync = (function () {
function Bsync() {
}
Bsync.configIpcMain = function (ipcMain, downloadDir) {
var nodeFileHander = new NodeFileHandler();
ipcMain.on('bsync-download', function (event, args) {
nodeFileHander.download(args.source, downloadDir + args.target)
.subscribe(function (progress) { event.sender.send('bsync-download-progress', progress); }, function (error) { event.sender.send('bsync-download-error', error); }, function () { event.sender.send('bsync-download-complete'); });
});
};
return Bsync;
}());
module.exports = Bsync;
//# sourceMappingURL=node-build.js.map