Download plugin - advanced options (folder, FFmpeg args)

This commit is contained in:
TC
2020-12-03 18:55:27 +01:00
parent 4d4a1f038b
commit 7b20b9339d
2 changed files with 29 additions and 7 deletions

View File

@ -7,6 +7,7 @@ let progress = null;
const downloadButton = ElementFromFile( const downloadButton = ElementFromFile(
templatePath(__dirname, "download.html") templatePath(__dirname, "download.html")
); );
let pluginOptions = {};
const observer = new MutationObserver((mutations, observer) => { const observer = new MutationObserver((mutations, observer) => {
if (!menu) { if (!menu) {
@ -43,11 +44,13 @@ global.download = () => {
triggerAction(CHANNEL, ACTIONS.ERROR, error); triggerAction(CHANNEL, ACTIONS.ERROR, error);
reinit(); reinit();
}, },
reinit reinit,
pluginOptions
); );
}; };
function observeMenu() { function observeMenu(options) {
pluginOptions = { ...pluginOptions, ...options };
observer.observe(document, { observer.observe(document, {
childList: true, childList: true,
subtree: true, subtree: true,

View File

@ -19,7 +19,13 @@ const ffmpeg = createFFmpeg({
progress: () => {}, // console.log, progress: () => {}, // console.log,
}); });
const downloadVideoToMP3 = (videoUrl, sendFeedback, sendError, reinit) => { const downloadVideoToMP3 = (
videoUrl,
sendFeedback,
sendError,
reinit,
options
) => {
sendFeedback("Downloading…"); sendFeedback("Downloading…");
let videoName = "YouTube Music - Unknown title"; let videoName = "YouTube Music - Unknown title";
@ -54,11 +60,18 @@ const downloadVideoToMP3 = (videoUrl, sendFeedback, sendError, reinit) => {
.on("error", sendError) .on("error", sendError)
.on("end", () => { .on("end", () => {
const buffer = Buffer.concat(chunks); const buffer = Buffer.concat(chunks);
toMP3(videoName, buffer, sendFeedback, sendError, reinit); toMP3(videoName, buffer, sendFeedback, sendError, reinit, options);
}); });
}; };
const toMP3 = async (videoName, buffer, sendFeedback, sendError, reinit) => { const toMP3 = async (
videoName,
buffer,
sendFeedback,
sendError,
reinit,
options
) => {
const safeVideoName = randomBytes(32).toString("hex"); const safeVideoName = randomBytes(32).toString("hex");
try { try {
@ -71,11 +84,17 @@ const toMP3 = async (videoName, buffer, sendFeedback, sendError, reinit) => {
ffmpeg.FS("writeFile", safeVideoName, buffer); ffmpeg.FS("writeFile", safeVideoName, buffer);
sendFeedback("Converting…"); sendFeedback("Converting…");
await ffmpeg.run("-i", safeVideoName, safeVideoName + ".mp3"); await ffmpeg.run(
"-i",
safeVideoName,
...options.ffmpegArgs,
safeVideoName + ".mp3"
);
const folder = options.downloadFolder || downloadsFolder();
const filename = filenamify(videoName + ".mp3", { replacement: "_" }); const filename = filenamify(videoName + ".mp3", { replacement: "_" });
writeFileSync( writeFileSync(
join(downloadsFolder(), filename), join(folder, filename),
ffmpeg.FS("readFile", safeVideoName + ".mp3") ffmpeg.FS("readFile", safeVideoName + ".mp3")
); );