electron-starter/build/download-daemon.js
2019-01-02 20:03:48 -05:00

105 lines
3.5 KiB
JavaScript

/* eslint-disable no-console,import/no-extraneous-dependencies,import/no-commonjs */
const path = require("path");
const fs = require("fs");
const packageJSON = require("../package.json");
const axios = require("axios");
const decompress = require("decompress");
const os = require("os");
const del = require("del");
const downloadDaemon = targetPlatform =>
new Promise((resolve, reject) => {
const daemonURLTemplate = packageJSON.lbrySettings.lbrynetDaemonUrlTemplate;
const daemonVersion = packageJSON.lbrySettings.lbrynetDaemonVersion;
const daemonDir = path.join(
__dirname,
"..",
packageJSON.lbrySettings.lbrynetDaemonDir
);
let daemonFileName = packageJSON.lbrySettings.lbrynetDaemonFileName;
let currentPlatform = os.platform();
var daemonPlatform =
process.env.TARGET || targetPlatform || currentPlatform;
if (daemonPlatform === "mac" || daemonPlatform === "darwin")
daemonPlatform = "mac";
if (daemonPlatform === "win32" || daemonPlatform === "windows") {
daemonPlatform = "windows";
daemonFileName = daemonFileName + ".exe";
}
const daemonFilePath = path.join(daemonDir, daemonFileName);
const daemonVersionPath = path.join(__dirname, "daemon.ver");
const tmpZipPath = path.join(__dirname, "..", "dist", "daemon.zip");
const daemonURL = daemonURLTemplate
.replace(/DAEMONVER/g, daemonVersion)
.replace(/OSNAME/g, daemonPlatform);
// If a daemon and daemon.ver exists, check to see if it matches the current daemon version
const hasDaemonDownloaded = fs.existsSync(daemonFilePath);
const hasDaemonVersion = fs.existsSync(daemonVersionPath);
let downloadedDaemonVersion;
if (hasDaemonVersion) {
downloadedDaemonVersion = fs.readFileSync(daemonVersionPath, "utf8");
}
if (
hasDaemonDownloaded &&
hasDaemonVersion &&
downloadedDaemonVersion === daemonVersion
) {
console.log("\x1b[34minfo\x1b[0m Daemon already downloaded");
resolve("Done");
return;
} else {
console.log("\x1b[34minfo\x1b[0m Downloading daemon...");
axios
.request({
responseType: "arraybuffer",
url: daemonURL,
method: "get",
headers: {
"Content-Type": "application/zip"
}
})
.then(
result =>
new Promise((newResolve, newReject) => {
const distPath = path.join(__dirname, "..", "dist");
const hasDistFolder = fs.existsSync(distPath);
if (!hasDistFolder) {
fs.mkdirSync(distPath);
}
fs.writeFile(tmpZipPath, result.data, error => {
if (error) return newReject(error);
return newResolve();
});
})
)
.then(() => del(`${daemonFilePath}*`))
.then(() =>
decompress(tmpZipPath, daemonDir, {
filter: file => path.basename(file.path) === daemonFileName
})
)
.then(() => {
console.log("\x1b[32msuccess\x1b[0m Daemon downloaded!");
if (hasDaemonVersion) {
del(daemonVersionPath);
}
fs.writeFileSync(daemonVersionPath, daemonVersion, "utf8");
resolve("Done");
})
.catch(error => {
console.error(
`\x1b[31merror\x1b[0m Daemon download failed due to: \x1b[35m${error}\x1b[0m`
);
reject(error);
});
}
});
downloadDaemon();