101 lines
2.7 KiB
Plaintext

#!/usr/bin/env mew_js
const nwjs = require("../conf/nwjs.json");
@.async(function () {
@.fs.makeDirs(@path(__dirname, "../cache"));
let client = @.net.httpClient();
let url = @.format(nwjs.url, { "version": nwjs.version });
let localPath = @path(__dirname, "../cache", url.split("?")[0].split("/").slice(-1)[0]);
if (@.fs.exists(localPath)) {
@info(`Cache available ${@.fs.filename(localPath)}`);
this.next(localPath);
return;
}
let lastSize = 0;
let lastProgress = 0;
let lastTime = Date.now();
@info(`Downloading ${url}`);
client.download(url, localPath, {
"resumeBroken": true,
"redirects": Object.create(null),
"onSuccess": () => {
this.next(localPath);
},
"onProgress": (size, total) => {
let progress = size / total * 100;
let now = Date.now();
if ((progress - lastProgress > 10) ||
(now - lastTime > 1000)) {
let speed = (size - lastSize) / (now - lastTime) * 1000 / 1024;
lastSize = size;
lastTime = now;
lastProgress = progress;
process.stdout.write(`Downloaded ${@.fs.filename(localPath)}: ${progress.toFixed(2)}%, speed ${speed.toFixed(2)} KiB/s\r`);
}
},
"onError": this.reject
});
}).then(function (localPath) {
@info(`Extracting ${localPath}`);
let extractPath = @path(__dirname, `../tmp/${@.fs.basename(localPath)}`);
@.fs.deleteFile.sync(extractPath);
@.fs.makeDirs(extractPath);
@.task.execute("tar", ["xf", localPath], extractPath, (error) => {
if (error) {
this.reject(error); return;
}
this.next(extractPath);
});
}).then(function (extractPath) {
@info(`Upgrading ${@.fs.filename(extractPath)}`);
@.fs.deleteFile.sync(@path(__dirname, "../nwjs"));
console.log(@path(extractPath, @.fs.listFiles(extractPath)[0].name))
@.fs.moveFile.sync(@path(extractPath, @.fs.listFiles(extractPath)[0].name),
@path(__dirname, "../nwjs"))
@.fs.deleteFile.sync(extractPath);
if (@.fs.exists(@path(__dirname, "../node/bin/node"))) {
@.fs.linkFile("../node/bin/node", @path(__dirname, "../nwjs/node"));
@.fs.linkFile("node", @path(__dirname, "../nwjs/node.exe"));
}
if (!@.fs.exists(@path(__dirname, "../package.nw"))) {
@.fs.linkFile("../package.nw", @path(__dirname, "../nwjs/package.nw"));
}
this.next();
}).finished((error) => {
if (error) {
@error(error);
process.exit(1);
}
@celebr(`Succeeded upgrading nwjs to version ${nwjs.version}`);
process.exit(0);
});