Files
youtube-music/plugins/downloader/menu.js
2021-03-26 17:52:23 +03:00

79 lines
2.0 KiB
JavaScript

const { existsSync, mkdirSync } = require("fs");
const { join } = require("path");
const { URL } = require("url");
const { ipcMain } = require("electron");
const is = require("electron-is");
const ytpl = require("ytpl");
const { sendError } = require("./back");
const { defaultMenuDownloadLabel, getFolder } = require("./utils");
const { setOptions } = require('../../config/plugins')
const { dialog } = require('electron');
let downloadLabel = defaultMenuDownloadLabel;
module.exports = (win, options, refreshMenu) => [
{
label: downloadLabel,
click: async () => {
const currentURL = win.webContents.getURL();
const playlistID = new URL(currentURL).searchParams.get("list");
if (!playlistID) {
sendError(win, new Error("No playlist ID found"));
return;
}
const playlist = await ytpl(playlistID);
const playlistTitle = playlist.title;
const folder = getFolder(options.downloadFolder);
const playlistFolder = join(folder, playlistTitle);
if (existsSync(playlistFolder)) {
sendError(
win,
new Error(`The folder ${playlistFolder} already exists`)
);
return;
}
mkdirSync(playlistFolder, { recursive: true });
ipcMain.on("downloader-feedback", (_, feedback) => {
downloadLabel = feedback;
refreshMenu();
});
downloadLabel = `Downloading "${playlistTitle}"`;
refreshMenu();
if (is.dev()) {
console.log(
`Downloading playlist "${playlistTitle}" (${playlist.items.length} songs)`
);
}
playlist.items.slice(0, options.playlistMaxItems).forEach((song) => {
win.webContents.send(
"downloader-download-playlist",
song,
playlistTitle,
options
);
});
},
},
{
label: 'Choose download folder:',
click: () => {
let result = dialog.showOpenDialogSync({
properties: ['openDirectory', 'createDirectory'],
defaultPath: getFolder(options.downloadFolder),
})
if(result) {
options.downloadFolder = result[0];
setOptions("downloader", options);
} //else = user pressed cancel
}
},
];