58 lines
1.6 KiB
JavaScript
58 lines
1.6 KiB
JavaScript
var {WebSocketServer} = require("ws");
|
|
var qs = require("qs");
|
|
var proxyaddr = require("proxy-addr");
|
|
var child_process = require("child_process");
|
|
var {app, server} = require("./web");
|
|
var {getList, uncacheList} = require("./metalist");
|
|
var fs = require("fs");
|
|
|
|
var wss = new WebSocketServer({ server });
|
|
|
|
wss.on("connection", function(ws, req) {
|
|
req.ip = proxyaddr(req, app.get("trust proxy"));
|
|
req.query = qs.parse(req.url.substring(req.url.indexOf('?')+1));
|
|
|
|
var log = (msg, e) => console[e?'error':'log'](`[${new Date().toLocaleString()}] ${req.ip} - ${msg}`);
|
|
log("socket open: " + req.url);
|
|
|
|
var url = req.query.url;
|
|
if (!url) { ws.send(color("red", "missing url")); ws.close(); return }
|
|
|
|
ws.send(color("green", "spawning yt-dlp..."));
|
|
var cp = child_process.spawn("yt-dlp", ["--no-mtime", url], {cwd: process.env.DOWNLOADS, shell: false});
|
|
|
|
cp.on("error", error => {
|
|
log(error.message, true);
|
|
ws.send(color("red", error.message));
|
|
});
|
|
cp.stdout.on("data", data => {
|
|
var msg = data.toString().trim();
|
|
if (msg) {
|
|
log(msg);
|
|
ws.send("yt-dlp: " + color("blue", msg));
|
|
}
|
|
});
|
|
cp.stderr.on("data", data => {
|
|
var msg = data.toString().trim();
|
|
if (msg) {
|
|
log(msg, true);
|
|
ws.send(color("orange", "yt-dlp: " + color("blue", msg)));
|
|
}
|
|
});
|
|
cp.on("close", (code, signal) => {
|
|
log(`cp exit ${code} (${signal})`);
|
|
ws.send(color("green", `yt-dlp exited with code ${code}`));
|
|
uncacheList();
|
|
ws.close();
|
|
});
|
|
|
|
ws.on("close", () => {
|
|
log("socket closed");
|
|
cp.kill();
|
|
});
|
|
});
|
|
|
|
function color(color, text) {
|
|
return `<span style="color: ${color}">${text}</span>`;
|
|
}
|