From 185ebbf41792113815dcfcc6dcc654302b0f3150 Mon Sep 17 00:00:00 2001 From: Araxeus <78568641+Araxeus@users.noreply.github.com> Date: Sun, 21 Nov 2021 19:44:01 +0200 Subject: [PATCH] fix downloader playlist download --- plugins/downloader/menu.js | 20 +++++++++----------- providers/song-info.js | 5 ++++- 2 files changed, 13 insertions(+), 12 deletions(-) diff --git a/plugins/downloader/menu.js b/plugins/downloader/menu.js index ce7f5643..9ec83d4c 100644 --- a/plugins/downloader/menu.js +++ b/plugins/downloader/menu.js @@ -1,25 +1,23 @@ const { existsSync, mkdirSync } = require("fs"); const { join } = require("path"); -const { URL } = require("url"); -const { dialog } = require("electron"); +const { dialog, ipcMain } = require("electron"); const is = require("electron-is"); const ytpl = require("ytpl"); const chokidar = require('chokidar'); const { setOptions } = require("../../config/plugins"); -const registerCallback = require("../../providers/song-info"); const { sendError } = require("./back"); const { defaultMenuDownloadLabel, getFolder } = require("./utils"); let downloadLabel = defaultMenuDownloadLabel; -let metadataURL = undefined; +let playingPlaylistId = undefined; let callbackIsRegistered = false; module.exports = (win, options) => { if (!callbackIsRegistered) { - registerCallback((info) => { - metadataURL = info.url; + ipcMain.on("video-src-changed", async (_, data) => { + playingPlaylistId = JSON.parse(data)?.videoDetails?.playlistId; }); callbackIsRegistered = true; } @@ -28,17 +26,17 @@ module.exports = (win, options) => { { label: downloadLabel, click: async () => { - const currentURL = metadataURL || win.webContents.getURL(); - const playlistID = new URL(currentURL).searchParams.get("list"); - if (!playlistID) { + const currentPagePlaylistId = new URL(win.webContents.getURL()).searchParams.get("list"); + const playlistId = currentPagePlaylistId || playingPlaylistId; + if (!playlistId) { sendError(win, new Error("No playlist ID found")); return; } - console.log(`trying to get playlist ID: '${playlistID}'`); + console.log(`trying to get playlist ID: '${playlistId}'`); let playlist; try { - playlist = await ytpl(playlistID, { + playlist = await ytpl(playlistId, { limit: options.playlistMaxItems || Infinity, }); } catch (e) { diff --git a/providers/song-info.js b/providers/song-info.js index 37954df2..936ea6ef 100644 --- a/providers/song-info.js +++ b/providers/song-info.js @@ -19,6 +19,8 @@ const songInfo = { songDuration: 0, elapsedSeconds: 0, url: "", + videoId: "", + playlistId: "", }; // Grab the native image using the src @@ -41,7 +43,7 @@ const handleData = async (responseText, win) => { if (microformat) { songInfo.uploadDate = microformat.uploadDate; songInfo.url = microformat.urlCanonical?.split("&")[0]; - + songInfo.playlistId = new URL(microformat.urlCanonical).searchParams.get("list"); // used for options.resumeOnStart config.set("url", microformat.urlCanonical); } @@ -54,6 +56,7 @@ const handleData = async (responseText, win) => { songInfo.songDuration = videoDetails.lengthSeconds; songInfo.elapsedSeconds = videoDetails.elapsedSeconds; songInfo.isPaused = videoDetails.isPaused; + songInfo.videoId = videoDetails.videoId; const oldUrl = songInfo.imageSrc; songInfo.imageSrc = videoDetails.thumbnail?.thumbnails?.pop()?.url.split("?")[0];