92 lines
3.5 KiB
JavaScript
92 lines
3.5 KiB
JavaScript
|
const path = require('path');
|
||
|
const fs = require('fs');
|
||
|
const packageJSON = require('../package.json');
|
||
|
const fetch = require('node-fetch');
|
||
|
const decompress = require('decompress');
|
||
|
const os = require('os');
|
||
|
const del = require('del');
|
||
|
|
||
|
const downloadLBRYFirst = targetPlatform =>
|
||
|
new Promise((resolve, reject) => {
|
||
|
const lbryFirstURLTemplate = packageJSON.lbrySettings.LBRYFirstUrlTemplate;
|
||
|
const lbryFirstVersion = packageJSON.lbrySettings.LBRYFirstVersion;
|
||
|
const lbryFirstDir = path.join(__dirname, '..', packageJSON.lbrySettings.LBRYFirstDir);
|
||
|
let lbryFirstFileName = packageJSON.lbrySettings.LBRYFirstFileName;
|
||
|
|
||
|
const currentPlatform = os.platform();
|
||
|
|
||
|
let lbryFirstPlatform = process.env.TARGET || targetPlatform || currentPlatform;
|
||
|
if (lbryFirstPlatform === 'linux') lbryFirstPlatform = 'Linux';
|
||
|
if (lbryFirstPlatform === 'mac' || lbryFirstPlatform === 'darwin') lbryFirstPlatform = 'Darwin';
|
||
|
if (lbryFirstPlatform === 'win32' || lbryFirstPlatform === 'windows') {
|
||
|
lbryFirstPlatform = 'Windows';
|
||
|
lbryFirstFileName += '.exe';
|
||
|
}
|
||
|
const lbryFirstFilePath = path.join(lbryFirstDir, lbryFirstFileName);
|
||
|
const lbryFirstVersionPath = path.join(__dirname, 'lbryFirst.ver');
|
||
|
const tmpZipPath = path.join(__dirname, '..', 'dist', 'lbryFirst.zip');
|
||
|
const lbryFirstURL = lbryFirstURLTemplate.replace(/LBRYFIRSTVER/g, lbryFirstVersion).replace(/OSNAME/g, lbryFirstPlatform);
|
||
|
console.log('URL:', lbryFirstURL);
|
||
|
|
||
|
// If a lbryFirst and lbryFirst.ver exists, check to see if it matches the current lbryFirst version
|
||
|
const hasLbryFirstDownloaded = fs.existsSync(lbryFirstFilePath);
|
||
|
const hasLbryFirstVersion = fs.existsSync(lbryFirstVersionPath);
|
||
|
let downloadedLbryFirstVersion;
|
||
|
|
||
|
if (hasLbryFirstVersion) {
|
||
|
downloadedLbryFirstVersion = fs.readFileSync(lbryFirstVersionPath, 'utf8');
|
||
|
}
|
||
|
|
||
|
if (hasLbryFirstDownloaded && hasLbryFirstVersion && downloadedLbryFirstVersion === lbryFirstVersion) {
|
||
|
console.log('\x1b[34minfo\x1b[0m LbryFirst already downloaded');
|
||
|
resolve('Done');
|
||
|
} else {
|
||
|
console.log('\x1b[34minfo\x1b[0m Downloading lbryFirst...');
|
||
|
fetch(lbryFirstURL, {
|
||
|
method: 'GET',
|
||
|
headers: {
|
||
|
'Content-Type': 'application/zip',
|
||
|
},
|
||
|
})
|
||
|
.then(response => response.buffer())
|
||
|
.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, error => {
|
||
|
if (error) return newReject(error);
|
||
|
return newResolve();
|
||
|
});
|
||
|
})
|
||
|
)
|
||
|
.then(() => del(`${lbryFirstFilePath}*`))
|
||
|
.then()
|
||
|
.then(() =>
|
||
|
decompress(tmpZipPath, lbryFirstDir, {
|
||
|
filter: file => path.basename(file.path) === lbryFirstFileName,
|
||
|
})
|
||
|
)
|
||
|
.then(() => {
|
||
|
console.log('\x1b[32msuccess\x1b[0m LbryFirst downloaded!');
|
||
|
if (hasLbryFirstVersion) {
|
||
|
del(lbryFirstVersionPath);
|
||
|
}
|
||
|
|
||
|
fs.writeFileSync(lbryFirstVersionPath, lbryFirstVersion, 'utf8');
|
||
|
resolve('Done');
|
||
|
})
|
||
|
.catch(error => {
|
||
|
console.error(`\x1b[31merror\x1b[0m LbryFirst download failed due to: \x1b[35m${error}\x1b[0m`);
|
||
|
reject(error);
|
||
|
});
|
||
|
}
|
||
|
});
|
||
|
|
||
|
downloadLBRYFirst();
|