105 lines
2.8 KiB
JavaScript
105 lines
2.8 KiB
JavaScript
const { execSync } = require("child_process");
|
|
const path = require("path");
|
|
const http = require("http");
|
|
const https = require("https");
|
|
const fs = require("fs");
|
|
const crypto = require("crypto");
|
|
const os = require("os");
|
|
const url = require("url");
|
|
|
|
const nodeApps = ["js-video-player", "markdown-previewer", "mermaid", "terminal"];
|
|
|
|
function getAppPath(name) {
|
|
return path.join("app", name);
|
|
}
|
|
|
|
function installNodeDep() {
|
|
for (let i = 0; i < nodeApps.length; i++) {
|
|
execSync("npm install", {
|
|
cwd: getAppPath(nodeApps[i]),
|
|
stdio: [0, 1, 2],
|
|
});
|
|
}
|
|
}
|
|
|
|
const pythonDeps = [
|
|
"pyqt5",
|
|
"pyqt5-sip",
|
|
"pyqtwebengine",
|
|
"pymupdf",
|
|
"qrcode",
|
|
"markdown",
|
|
"epc",
|
|
"retrying"
|
|
];
|
|
|
|
function installPythonDep() {
|
|
const installCmd = "pip install " + pythonDeps.join(" ");
|
|
console.log(installCmd);
|
|
execSync(installCmd, {
|
|
stdio: [0, 1, 2],
|
|
});
|
|
}
|
|
|
|
function downloadFile(urlStr, sha256hash) {
|
|
const u = url.parse(urlStr);
|
|
let handler = http;
|
|
if (u.protocol === "https:") {
|
|
handler = https;
|
|
}
|
|
const hasher = crypto.createHash("sha256");
|
|
const name = path.posix.basename(u.pathname);
|
|
const file = path.join(os.tmpdir(), name);
|
|
return new Promise((resolve, reject) => {
|
|
fs.open(file, "w", (err, fd) => {
|
|
if (err) {
|
|
reject(err);
|
|
return;
|
|
}
|
|
handler.get(u, (res) => {
|
|
res.on("data", (chunk) => {
|
|
fs.write(fd, chunk, (err) => {
|
|
if (err) {
|
|
reject(err);
|
|
return;
|
|
}
|
|
});
|
|
hasher.update(chunk);
|
|
});
|
|
res.on("end", () => {
|
|
const hash = hasher.digest("hex");
|
|
if (hash !== sha256hash) {
|
|
reject(new Error("download failed: hash mismatch"));
|
|
return
|
|
}
|
|
resolve(file);
|
|
});
|
|
}).on("error", (err) => {
|
|
reject(err)
|
|
});
|
|
});
|
|
});
|
|
}
|
|
|
|
const kliteCodecPackURL = "https://files3.codecguide.com/K-Lite_Codec_Pack_1595_Basic.exe";
|
|
const kliteCodecPackHash = "73772a2a0e8f9bc4ec4ca35578608cda76847e563613d1600bd5bf659a908559";
|
|
|
|
async function installCodecPack() {
|
|
const installer = await downloadFile(kliteCodecPackURL, kliteCodecPackHash);
|
|
const installCmd = `${installer} /verysilent /nocancel /norestart`;
|
|
console.log("installing k-lite-codec-pack basic ...");
|
|
execSync(installCmd);
|
|
}
|
|
|
|
installNodeDep();
|
|
|
|
installPythonDep();
|
|
|
|
(async function() {
|
|
try {
|
|
await installCodecPack();
|
|
} catch (err) {
|
|
console.error(err);
|
|
}
|
|
})();
|