Files
emacs/lisp/emacs-application-framework/install-eaf-win32.js
2021-01-30 14:52:51 +01:00

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);
}
})();