2018-03-14 21:38:55 +01:00
|
|
|
/* eslint-disable no-console,import/no-extraneous-dependencies,import/no-commonjs */
|
2018-03-08 00:03:45 +01:00
|
|
|
const path = require('path');
|
2018-07-18 23:23:26 +02:00
|
|
|
const fs = require('fs');
|
2018-03-08 00:03:45 +01:00
|
|
|
const packageJSON = require('../package.json');
|
|
|
|
const axios = require('axios');
|
|
|
|
const decompress = require('decompress');
|
|
|
|
const os = require('os');
|
2018-03-14 21:38:55 +01:00
|
|
|
const del = require('del');
|
2018-03-08 00:03:45 +01:00
|
|
|
|
2018-03-14 21:38:55 +01:00
|
|
|
const downloadDaemon = targetPlatform =>
|
|
|
|
new Promise((resolve, reject) => {
|
|
|
|
const daemonURLTemplate = packageJSON.lbrySettings.lbrynetDaemonUrlTemplate;
|
|
|
|
const daemonVersion = packageJSON.lbrySettings.lbrynetDaemonVersion;
|
2018-07-19 15:42:57 +02:00
|
|
|
const daemonDir = path.join(__dirname,'..',packageJSON.lbrySettings.lbrynetDaemonDir);
|
|
|
|
let daemonFileName = packageJSON.lbrySettings.lbrynetDaemonFileName;
|
2018-03-08 00:03:45 +01:00
|
|
|
|
2018-03-14 21:38:55 +01:00
|
|
|
let currentPlatform = os.platform();
|
|
|
|
if (currentPlatform === 'darwin') currentPlatform = 'macos';
|
2018-07-19 15:42:57 +02:00
|
|
|
if (currentPlatform === 'win32') {
|
|
|
|
currentPlatform = 'windows';
|
|
|
|
daemonFileName = daemonFileName + '.exe';
|
|
|
|
}
|
2018-03-08 00:03:45 +01:00
|
|
|
|
2018-07-19 15:42:57 +02:00
|
|
|
const daemonFilePath = path.join(daemonDir, daemonFileName);
|
|
|
|
const daemonVersionPath = path.join(__dirname, 'daemon.ver');
|
2018-03-14 21:38:55 +01:00
|
|
|
const daemonPlatform = targetPlatform || currentPlatform;
|
2018-07-19 15:42:57 +02:00
|
|
|
const tmpZipPath = path.join(__dirname, '../','dist','daemon.zip');
|
2018-03-14 21:38:55 +01:00
|
|
|
const daemonURL = daemonURLTemplate
|
|
|
|
.replace(/DAEMONVER/g, daemonVersion)
|
|
|
|
.replace(/OSNAME/g, daemonPlatform);
|
2018-07-19 15:42:57 +02:00
|
|
|
|
|
|
|
|
2018-07-18 23:23:26 +02:00
|
|
|
// 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");
|
|
|
|
}
|
2018-07-19 15:42:57 +02:00
|
|
|
|
|
|
|
if (hasDaemonDownloaded && hasDaemonVersion && downloadedDaemonVersion === daemonVersion) {
|
2018-07-18 23:23:26 +02:00
|
|
|
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) => {
|
|
|
|
fs.writeFile(tmpZipPath, result.data, error => {
|
2018-03-14 21:38:55 +01:00
|
|
|
|
2018-07-18 23:23:26 +02:00
|
|
|
if (error) return newReject(error);
|
|
|
|
return newResolve();
|
|
|
|
});
|
|
|
|
})
|
|
|
|
)
|
2018-07-19 15:42:57 +02:00
|
|
|
.then(() => del(`${daemonFilePath}*`))
|
2018-07-18 23:23:26 +02:00
|
|
|
.then(() => decompress(tmpZipPath, daemonDir, {
|
2018-03-14 21:38:55 +01:00
|
|
|
filter: file =>
|
2018-07-19 15:42:57 +02:00
|
|
|
path.basename(file.path) === daemonFileName,
|
2018-07-18 23:23:26 +02:00
|
|
|
}))
|
2018-07-19 15:42:57 +02:00
|
|
|
.then(() => del(`${tmpZipPath }*`))
|
2018-07-18 23:23:26 +02:00
|
|
|
.then(() => {
|
|
|
|
console.log('\x1b[32msuccess\x1b[0m Daemon downloaded!');
|
|
|
|
if (hasDaemonVersion) {
|
|
|
|
del(daemonVersionPath);
|
|
|
|
}
|
2018-07-19 15:42:57 +02:00
|
|
|
|
2018-07-18 23:23:26 +02:00
|
|
|
fs.writeFileSync(daemonVersionPath, daemonVersion, "utf8")
|
|
|
|
resolve('Done');
|
2018-03-14 21:38:55 +01:00
|
|
|
})
|
2018-07-18 23:23:26 +02:00
|
|
|
.catch(error => {
|
|
|
|
console.error(
|
|
|
|
`\x1b[31merror\x1b[0m Daemon download failed due to: \x1b[35m${error}\x1b[0m`
|
|
|
|
);
|
|
|
|
reject(error);
|
|
|
|
});
|
|
|
|
}
|
2018-03-08 00:03:45 +01:00
|
|
|
});
|
2018-03-14 21:38:55 +01:00
|
|
|
|
|
|
|
module.exports = downloadDaemon;
|
|
|
|
|
|
|
|
require('make-runnable/custom')({
|
|
|
|
printOutputFrame: false
|
|
|
|
});
|