diff --git a/.gitignore b/.gitignore index 661998b1d..08c9c7fe2 100644 --- a/.gitignore +++ b/.gitignore @@ -1,7 +1,8 @@ /node_modules /dist -/static/daemon/lbrynet* +/static/daemon/lbrynet-daemon /static/locales yarn-error.log package-lock.json -.idea/ \ No newline at end of file +.idea/ +/build/daemon.ver \ No newline at end of file diff --git a/build/downloadDaemon.js b/build/downloadDaemon.js index 11b0b5ba2..3b1955215 100644 --- a/build/downloadDaemon.js +++ b/build/downloadDaemon.js @@ -1,6 +1,6 @@ /* eslint-disable no-console,import/no-extraneous-dependencies,import/no-commonjs */ const path = require('path'); -const fs = require('fs-path'); +const fs = require('fs'); const packageJSON = require('../package.json'); const axios = require('axios'); const decompress = require('decompress'); @@ -13,54 +13,74 @@ const downloadDaemon = targetPlatform => const daemonVersion = packageJSON.lbrySettings.lbrynetDaemonVersion; const daemonDir = packageJSON.lbrySettings.lbrynetDaemonDir; const daemonFileName = packageJSON.lbrySettings.lbrynetDaemonFileName; + const daemonFilePath = `${__dirname}/../${daemonDir}/${daemonFileName}`; let currentPlatform = os.platform(); if (currentPlatform === 'darwin') currentPlatform = 'macos'; if (currentPlatform === 'win32') currentPlatform = 'windows'; + const daemonVersionPath = __dirname + '/daemon.ver'; const daemonPlatform = targetPlatform || currentPlatform; - + const tmpZipPath = __dirname + '/../dist/daemon.zip'; const daemonURL = daemonURLTemplate .replace(/DAEMONVER/g, daemonVersion) .replace(/OSNAME/g, daemonPlatform); - const tmpZipPath = 'dist/daemon.zip'; + + + // 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) => { + fs.writeFile(tmpZipPath, result.data, error => { - 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 => { - if (error) return newReject(error); - return newResolve(); - }); - }) - ) - .then(() => del(`${daemonDir}/${daemonFileName}*`)) - .then(() => - decompress(tmpZipPath, daemonDir, { + if (error) return newReject(error); + return newResolve(); + }); + }) + ) + .then(() => del(`${daemonDir}/${daemonFileName}*`)) + .then(() => decompress(tmpZipPath, daemonDir, { filter: file => path.basename(file.path).replace(path.extname(file.path), '') === daemonFileName, + })) + .then(() => { + console.log('\x1b[32msuccess\x1b[0m Daemon downloaded!'); + if (hasDaemonVersion) { + del(daemonVersionPath); + } + + fs.writeFileSync(daemonVersionPath, daemonVersion, "utf8") + resolve('Done'); }) - ) - .then(() => { - console.log('\x1b[32msuccess\x1b[0m Daemon downloaded!'); - resolve(true); - }) - .catch(error => { - console.error( - `\x1b[31merror\x1b[0m Daemon download failed due to: \x1b[35m${error}\x1b[0m` - ); - reject(error); - }); + .catch(error => { + console.error( + `\x1b[31merror\x1b[0m Daemon download failed due to: \x1b[35m${error}\x1b[0m` + ); + reject(error); + }); + } }); module.exports = downloadDaemon;