mirror of
https://github.com/MasterAcnolo/Freedom-Loader.git
synced 2026-07-29 18:25:47 +02:00
58 lines
2.1 KiB
JavaScript
58 lines
2.1 KiB
JavaScript
const { execFile } = require("child_process");
|
|
const express = require("express");
|
|
const router = express.Router();
|
|
const path = require("path");
|
|
const fs = require("fs");
|
|
|
|
const { logger } = require("../logger");
|
|
const config = require("../../config");
|
|
const { isValidUrl, isSafePath } = require("../helpers/validation");
|
|
const { buildYtDlpArgs } = require("../helpers/buildArgs");
|
|
const { notifyDownloadFinished } = require("../helpers/notify");
|
|
|
|
const { userYtDlp } = require("../helpers/path");
|
|
|
|
router.post("/", (req, res) => {
|
|
try {
|
|
const options = {
|
|
url: req.body.url,
|
|
audioOnly: req.body.audioOnly === "1",
|
|
quality: req.body.quality || "best",
|
|
outputFolder: req.body.savePath || path.join(process.env.USERPROFILE, "Downloads", "Freedom Loader"),
|
|
};
|
|
|
|
if (!options.url || !isValidUrl(options.url)) return res.status(400).send("❌ URL invalide !");
|
|
|
|
if (!isSafePath(options.outputFolder)) return res.status(400).send("❌ Chemin de sauvegarde non autorisé.");
|
|
|
|
fs.mkdirSync(options.outputFolder, { recursive: true });
|
|
|
|
const args = buildYtDlpArgs(options);
|
|
logger.info(args)
|
|
const child = execFile(userYtDlp, args);
|
|
|
|
child.on("error", err => {
|
|
logger.error(`Erreur yt-dlp : ${err.message}`);
|
|
res.status(500).send(`❌ Erreur yt-dlp : ${err.message}`);
|
|
});
|
|
|
|
child.on("close", code => {
|
|
if (code === 0) {
|
|
notifyDownloadFinished(options.outputFolder);
|
|
res.send("✅ Téléchargement terminé !");
|
|
} else res.status(500).send(`❌ yt-dlp a échoué avec le code : ${code}`);
|
|
});
|
|
|
|
if (config.debugMode == true) {
|
|
child.stdout.on("data", data => data.toString().split("\n").forEach(line => line.trim() && logger.info(`[yt-dlp stdout] ${line}`)));
|
|
child.stderr.on("data", data => data.toString().split("\n").forEach(line => line.trim() && logger.error(`[yt-dlp stderr] ${line}`)));
|
|
}
|
|
|
|
} catch (err) {
|
|
logger.error(`Erreur serveur dans /download : ${err.message}`);
|
|
res.status(500).send(`Erreur serveur : ${err.message}`);
|
|
}
|
|
});
|
|
|
|
module.exports = router;
|