mirror of
https://github.com/th-ch/youtube-music.git
synced 2026-01-14 20:01:47 +00:00
Use metadata URL in downloader (fallback to current URL)
This commit is contained in:
@ -35,7 +35,7 @@ const reinit = () => {
|
|||||||
// contextBridge.exposeInMainWorld("downloader", {
|
// contextBridge.exposeInMainWorld("downloader", {
|
||||||
// download: () => {
|
// download: () => {
|
||||||
global.download = () => {
|
global.download = () => {
|
||||||
const videoUrl = window.location.href;
|
const videoUrl = global.songInfo.url || window.location.href;
|
||||||
|
|
||||||
downloadVideoToMP3(
|
downloadVideoToMP3(
|
||||||
videoUrl,
|
videoUrl,
|
||||||
|
|||||||
@ -7,71 +7,84 @@ const is = require("electron-is");
|
|||||||
const ytpl = require("ytpl");
|
const ytpl = require("ytpl");
|
||||||
|
|
||||||
const { setOptions } = require("../../config/plugins");
|
const { setOptions } = require("../../config/plugins");
|
||||||
|
const getSongInfo = require("../../providers/song-info");
|
||||||
const { sendError } = require("./back");
|
const { sendError } = require("./back");
|
||||||
const { defaultMenuDownloadLabel, getFolder } = require("./utils");
|
const { defaultMenuDownloadLabel, getFolder } = require("./utils");
|
||||||
|
|
||||||
let downloadLabel = defaultMenuDownloadLabel;
|
let downloadLabel = defaultMenuDownloadLabel;
|
||||||
|
let metadataURL = undefined;
|
||||||
|
let callbackIsRegistered = false;
|
||||||
|
|
||||||
module.exports = (win, options, refreshMenu) => [
|
module.exports = (win, options, refreshMenu) => {
|
||||||
{
|
if (!callbackIsRegistered) {
|
||||||
label: downloadLabel,
|
const registerCallback = getSongInfo(win);
|
||||||
click: async () => {
|
registerCallback((info) => {
|
||||||
const currentURL = win.webContents.getURL();
|
metadataURL = info.url;
|
||||||
const playlistID = new URL(currentURL).searchParams.get("list");
|
});
|
||||||
if (!playlistID) {
|
callbackIsRegistered = true;
|
||||||
sendError(win, new Error("No playlist ID found"));
|
}
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
const playlist = await ytpl(playlistID);
|
return [
|
||||||
const playlistTitle = playlist.title;
|
{
|
||||||
|
label: downloadLabel,
|
||||||
|
click: async () => {
|
||||||
|
const currentURL = metadataURL || win.webContents.getURL();
|
||||||
|
const playlistID = new URL(currentURL).searchParams.get("list");
|
||||||
|
if (!playlistID) {
|
||||||
|
sendError(win, new Error("No playlist ID found"));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
const folder = getFolder(options.downloadFolder);
|
const playlist = await ytpl(playlistID);
|
||||||
const playlistFolder = join(folder, playlistTitle);
|
const playlistTitle = playlist.title;
|
||||||
if (existsSync(playlistFolder)) {
|
|
||||||
sendError(
|
|
||||||
win,
|
|
||||||
new Error(`The folder ${playlistFolder} already exists`)
|
|
||||||
);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
mkdirSync(playlistFolder, { recursive: true });
|
|
||||||
|
|
||||||
ipcMain.on("downloader-feedback", (_, feedback) => {
|
const folder = getFolder(options.downloadFolder);
|
||||||
downloadLabel = feedback;
|
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();
|
refreshMenu();
|
||||||
});
|
|
||||||
|
|
||||||
downloadLabel = `Downloading "${playlistTitle}"`;
|
if (is.dev()) {
|
||||||
refreshMenu();
|
console.log(
|
||||||
|
`Downloading playlist "${playlistTitle}" (${playlist.items.length} songs)`
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
if (is.dev()) {
|
playlist.items.slice(0, options.playlistMaxItems).forEach((song) => {
|
||||||
console.log(
|
win.webContents.send(
|
||||||
`Downloading playlist "${playlistTitle}" (${playlist.items.length} songs)`
|
"downloader-download-playlist",
|
||||||
);
|
song,
|
||||||
}
|
playlistTitle,
|
||||||
|
options
|
||||||
playlist.items.slice(0, options.playlistMaxItems).forEach((song) => {
|
);
|
||||||
win.webContents.send(
|
});
|
||||||
"downloader-download-playlist",
|
},
|
||||||
song,
|
|
||||||
playlistTitle,
|
|
||||||
options
|
|
||||||
);
|
|
||||||
});
|
|
||||||
},
|
},
|
||||||
},
|
{
|
||||||
{
|
label: "Choose download folder",
|
||||||
label: "Choose download folder",
|
click: () => {
|
||||||
click: () => {
|
let result = dialog.showOpenDialogSync({
|
||||||
let result = dialog.showOpenDialogSync({
|
properties: ["openDirectory", "createDirectory"],
|
||||||
properties: ["openDirectory", "createDirectory"],
|
defaultPath: getFolder(options.downloadFolder),
|
||||||
defaultPath: getFolder(options.downloadFolder),
|
});
|
||||||
});
|
if (result) {
|
||||||
if (result) {
|
options.downloadFolder = result[0];
|
||||||
options.downloadFolder = result[0];
|
setOptions("downloader", options);
|
||||||
setOptions("downloader", options);
|
} // else = user pressed cancel
|
||||||
} // else = user pressed cancel
|
},
|
||||||
},
|
},
|
||||||
},
|
];
|
||||||
];
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user