daemon -> sdk
This commit is contained in:
parent
8ee5c5c667
commit
5512dd7c4f
8 changed files with 116 additions and 117 deletions
3
.gitignore
vendored
3
.gitignore
vendored
|
@ -1,4 +1,3 @@
|
|||
node_modules
|
||||
static/daemon
|
||||
dist
|
||||
build/daemon.ver
|
||||
build/sdk.ver
|
||||
|
|
|
@ -1,88 +0,0 @@
|
|||
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 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...");
|
||||
fetch(daemonURL, {
|
||||
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(`${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();
|
89
build/download-sdk.js
Normal file
89
build/download-sdk.js
Normal file
|
@ -0,0 +1,89 @@
|
|||
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");
|
||||
|
||||
// Downloads and extracts the LBRY SDK
|
||||
const downloadSDK = targetPlatform =>
|
||||
new Promise((resolve, reject) => {
|
||||
const sdkURLTemplate = packageJSON.lbrySettings.lbrynetSDKUrlTemplate;
|
||||
const sdkVersion = packageJSON.lbrySettings.lbrynetSDKVersion;
|
||||
const sdkDir = path.join(__dirname, "..", packageJSON.lbrySettings.lbrynetSDKDir);
|
||||
let sdkFileName = packageJSON.lbrySettings.lbrynetSDKFileName;
|
||||
|
||||
let currentPlatform = os.platform();
|
||||
|
||||
var sdkPlatform = process.env.TARGET || targetPlatform || currentPlatform;
|
||||
if (sdkPlatform === "mac" || sdkPlatform === "darwin") sdkPlatform = "mac";
|
||||
if (sdkPlatform === "win32" || sdkPlatform === "windows") {
|
||||
sdkPlatform = "windows";
|
||||
sdkFileName = sdkFileName + ".exe";
|
||||
}
|
||||
const sdkFilePath = path.join(sdkDir, sdkFileName);
|
||||
const sdkVersionPath = path.join(__dirname, "sdk.ver");
|
||||
const tmpZipPath = path.join(__dirname, "..", "dist", "sdk.zip");
|
||||
const sdkURL = sdkURLTemplate.replace(/SDKVER/g, sdkVersion).replace(/OSNAME/g, sdkPlatform);
|
||||
|
||||
// If an sdk was perviously downloaded and sdk.ver exists, check to see if it matches the current sdk version
|
||||
const hasSDKDownloaded = fs.existsSync(sdkFilePath);
|
||||
const hasSDKVersion = fs.existsSync(sdkVersionPath);
|
||||
let downloadedSDKVersion;
|
||||
if (hasSDKVersion) {
|
||||
downloadedSDKVersion = fs.readFileSync(sdkVersionPath, "utf8");
|
||||
}
|
||||
|
||||
if (hasSDKDownloaded && hasSDKVersion && downloadedSDKVersion === sdkVersion) {
|
||||
console.log("\x1b[34minfo\x1b[0m SDK already downloaded");
|
||||
resolve("Done");
|
||||
return;
|
||||
} else {
|
||||
console.log("\x1b[34minfo\x1b[0m Downloading SDK...");
|
||||
fetch(sdkURL, {
|
||||
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(`${sdkFilePath}*`))
|
||||
.then(() =>
|
||||
decompress(tmpZipPath, sdkDir, {
|
||||
filter: file => path.basename(file.path) === sdkFileName
|
||||
})
|
||||
)
|
||||
.then(() => {
|
||||
console.log("\x1b[32msuccess\x1b[0m SDK downloaded!");
|
||||
if (hasSDKVersion) {
|
||||
del(sdkVersionPath);
|
||||
}
|
||||
|
||||
fs.writeFileSync(sdkVersionPath, sdkVersion, "utf8");
|
||||
resolve("Done");
|
||||
})
|
||||
.catch(error => {
|
||||
console.error(`\x1b[31merror\x1b[0m SDK download failed due to: \x1b[35m${error}\x1b[0m`);
|
||||
reject(error);
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
downloadSDK();
|
10
package.json
10
package.json
|
@ -6,7 +6,7 @@
|
|||
"scripts": {
|
||||
"start": "electron ./src/main",
|
||||
"dev": "NODE_ENV=development electron ./src/main/index.js",
|
||||
"postinstall": "node build/download-daemon.js"
|
||||
"postinstall": "node build/download-sdk.js"
|
||||
},
|
||||
"dependencies": {
|
||||
"electron": "^4.0.4",
|
||||
|
@ -21,10 +21,10 @@
|
|||
"electron-reload": "^1.2.5"
|
||||
},
|
||||
"lbrySettings": {
|
||||
"lbrynetDaemonVersion": "0.30.4",
|
||||
"lbrynetDaemonUrlTemplate": "https://github.com/lbryio/lbry/releases/download/vDAEMONVER/lbrynet-OSNAME.zip",
|
||||
"lbrynetDaemonDir": "dist/daemon",
|
||||
"lbrynetDaemonFileName": "lbrynet"
|
||||
"lbrynetSDKVersion": "0.30.4",
|
||||
"lbrynetSDKUrlTemplate": "https://github.com/lbryio/lbry/releases/download/vSDKVER/lbrynet-OSNAME.zip",
|
||||
"lbrynetSDKDir": "dist/sdk",
|
||||
"lbrynetSDKFileName": "lbrynet"
|
||||
},
|
||||
"repository": {
|
||||
"type": "git",
|
||||
|
|
|
@ -12,7 +12,7 @@
|
|||
<body>
|
||||
<h1>Hello world</h1>
|
||||
<div class="content">
|
||||
<div id="loading">Starting daemon...</div>
|
||||
<div id="loading">Starting SDK...</div>
|
||||
<div id="resolve">
|
||||
<input id="resolve-input" />
|
||||
<button id="resolve-button">Resolve</button>
|
||||
|
|
|
@ -3,7 +3,7 @@ const { app } = require("electron");
|
|||
const path = require("path");
|
||||
const findProcess = require("find-process");
|
||||
const createWindow = require("./create-window");
|
||||
const Daemon = require("./daemon");
|
||||
const SDK = require("./sdk");
|
||||
const IS_DEV = process.env.NODE_ENV === "development";
|
||||
|
||||
// Auto-reload when we make changes
|
||||
|
@ -21,16 +21,16 @@ app.on("ready", function() {
|
|||
// This allows you to run the sdk binary separately and have your app connect to it
|
||||
const processListArgs = process.platform === "win32" ? "lbrynet" : "lbrynet start";
|
||||
findProcess("name", processListArgs).then(processList => {
|
||||
const isDaemonRunning = processList.length > 0;
|
||||
const isSDKRunning = processList.length > 0;
|
||||
|
||||
if (!isDaemonRunning) {
|
||||
daemon = new Daemon();
|
||||
daemon.on("exit", () => {
|
||||
daemon = null;
|
||||
dialog.showErrorBox("Daemon has Exited");
|
||||
if (!isSDKRunning) {
|
||||
sdk = new SDK();
|
||||
sdk.on("exit", () => {
|
||||
sdk = null;
|
||||
dialog.showErrorBox("SDK has quit");
|
||||
app.quit();
|
||||
});
|
||||
daemon.launch();
|
||||
sdk.launch();
|
||||
}
|
||||
});
|
||||
});
|
||||
|
|
|
@ -1,20 +1,19 @@
|
|||
const path = require("path");
|
||||
const { spawn, execSync } = require("child_process");
|
||||
|
||||
class Daemon {
|
||||
class SDK {
|
||||
constructor() {
|
||||
this.path = process.env.LBRY_DAEMON || path.join(__dirname, "../../dist/daemon/lbrynet");
|
||||
this.path = process.env.LBRY_DAEMON || path.join(__dirname, "../../dist/sdk/lbrynet");
|
||||
this.handlers = [];
|
||||
this.subprocess = undefined;
|
||||
}
|
||||
|
||||
launch() {
|
||||
console.log("launching daemon");
|
||||
this.subprocess = spawn(this.path, ["start"]);
|
||||
this.subprocess.stdout.on("data", data => console.log(`Daemon: ${data}`));
|
||||
this.subprocess.stderr.on("data", data => console.error(`Daemon: ${data}`));
|
||||
this.subprocess.stdout.on("data", data => console.log(`SDK: ${data}`));
|
||||
this.subprocess.stderr.on("data", data => console.error(`SDK: ${data}`));
|
||||
this.subprocess.on("exit", () => this.fire("exit"));
|
||||
this.subprocess.on("error", error => console.error(`Daemon error: ${error}`));
|
||||
this.subprocess.on("error", error => console.error(`SDK error: ${error}`));
|
||||
}
|
||||
|
||||
quit() {
|
||||
|
@ -44,4 +43,4 @@ class Daemon {
|
|||
}
|
||||
}
|
||||
|
||||
module.exports = Daemon;
|
||||
module.exports = SDK;
|
|
@ -1,12 +1,12 @@
|
|||
const { Lbry } = require("lbry-redux");
|
||||
|
||||
Lbry.connect().then(checkDaemonStarted);
|
||||
Lbry.connect().then(checkSDKStarted);
|
||||
|
||||
// This waits until the daemon is fully started before doing anything else
|
||||
function checkDaemonStarted() {
|
||||
// Wait until the sdk is fully started before doing anything else
|
||||
function checkSDKStarted() {
|
||||
Lbry.status().then(status => {
|
||||
if (status.is_running) {
|
||||
// Daemon is now running
|
||||
// SDK is now running
|
||||
const resolveWrapper = document.getElementById("resolve");
|
||||
const loadingWrapper = document.getElementById("loading");
|
||||
loadingWrapper.style.display = "none";
|
||||
|
@ -15,8 +15,8 @@ function checkDaemonStarted() {
|
|||
}
|
||||
|
||||
setTimeout(() => {
|
||||
checkDaemonStarted();
|
||||
}, 250);
|
||||
checkSDKStarted();
|
||||
}, 500);
|
||||
});
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue