mirror of
https://github.com/MasterAcnolo/Freedom-Loader.git
synced 2026-07-29 18:25:47 +02:00
Using MVC Model + AutoDeteck Package + Fix Download/Info
This commit is contained in:
46
server/services/download.services.js
Normal file
46
server/services/download.services.js
Normal file
@@ -0,0 +1,46 @@
|
||||
const { execFile } = require("child_process");
|
||||
const { userYtDlp } = require("../helpers/path");
|
||||
const path = require("path");
|
||||
const fs = require("fs");
|
||||
const { logger } = require("../logger");
|
||||
const { buildYtDlpArgs } = require("../helpers/buildArgs");
|
||||
|
||||
function fetchDownload(options, listeners) {
|
||||
|
||||
return new Promise((resolve, reject) => {
|
||||
const outputFolder = options.outputFolder || path.join(process.env.USERPROFILE, "Downloads", "Freedom Loader");
|
||||
fs.mkdirSync(outputFolder, { recursive: true });
|
||||
|
||||
const args = buildYtDlpArgs({ ...options, outputFolder });
|
||||
logger.info(`[yt-dlp args] ${args.join(" ")}`);
|
||||
|
||||
const child = execFile(userYtDlp, args);
|
||||
|
||||
child.on("error", err => reject(new Error(`Erreur yt-dlp : ${err.message}`)));
|
||||
|
||||
child.on("close", code => {
|
||||
listeners.forEach(fn => fn("done"));
|
||||
if (code === 0) resolve(outputFolder);
|
||||
else reject(new Error(`yt-dlp a échoué avec le code : ${code}`));
|
||||
});
|
||||
|
||||
|
||||
child.stdout.on("data", data => {
|
||||
data.toString().split("\n").forEach(line => {
|
||||
if (!line.trim()) return;
|
||||
logger.info(`[yt-dlp stdout] ${line}`);
|
||||
|
||||
/* Barre de Chargement*/
|
||||
if (line.startsWith("[download] Destination:")) listeners.forEach(fn => fn("reset"));
|
||||
const match = line.match(/\[download\]\s+(\d+\.\d+)%/);
|
||||
if (match) listeners.forEach(fn => fn(parseFloat(match[1])));
|
||||
});
|
||||
});
|
||||
|
||||
child.stderr.on("data", data => {
|
||||
data.toString().split("\n").forEach(line => line.trim() && logger.error(`[yt-dlp stderr] ${line}`));
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
module.exports = { fetchDownload };
|
||||
Reference in New Issue
Block a user