From 7cf78c6635919d561cc915077404592e132d7fc1 Mon Sep 17 00:00:00 2001 From: Araxeus Date: Mon, 10 May 2021 04:15:56 +0300 Subject: [PATCH] setup SongInfo **once** --- index.js | 2 ++ plugins/discord/back.js | 4 +--- plugins/downloader/back.js | 3 +-- plugins/last-fm/back.js | 6 ++---- plugins/notifications/back.js | 3 +-- plugins/taskbar-mediacontrol/back.js | 3 +-- plugins/touchbar/back.js | 3 +-- providers/song-info.js | 22 +++++++++++----------- 8 files changed, 20 insertions(+), 26 deletions(-) diff --git a/index.js b/index.js index 81fd45b5..f4e4212d 100644 --- a/index.js +++ b/index.js @@ -11,6 +11,7 @@ const { setApplicationMenu } = require("./menu"); const { fileExists, injectCSS } = require("./plugins/utils"); const { isTesting } = require("./utils/testing"); const { setUpTray } = require("./tray"); +const { setupSongInfo } = require("./providers/song-info"); // Catch errors and log them unhandled({ @@ -157,6 +158,7 @@ function createMainWindow() { } app.once("browser-window-created", (event, win) => { + setupSongInfo(win); loadPlugins(win); win.webContents.on("did-fail-load", ( diff --git a/plugins/discord/back.js b/plugins/discord/back.js index 33dbb38b..c6faadd7 100644 --- a/plugins/discord/back.js +++ b/plugins/discord/back.js @@ -1,6 +1,6 @@ const Discord = require("discord-rpc"); -const getSongInfo = require("../../providers/song-info"); +const registerCallback = require("../../providers/song-info"); const rpc = new Discord.Client({ transport: "ipc", @@ -12,8 +12,6 @@ const clientId = "790655993809338398"; let clearActivity; module.exports = (win, {activityTimoutEnabled, activityTimoutTime}) => { - const registerCallback = getSongInfo(win); - // If the page is ready, register the callback win.once("ready-to-show", () => { rpc.once("ready", () => { diff --git a/plugins/downloader/back.js b/plugins/downloader/back.js index 76a77b92..ee345ab2 100644 --- a/plugins/downloader/back.js +++ b/plugins/downloader/back.js @@ -4,7 +4,7 @@ const { join } = require("path"); const ID3Writer = require("browser-id3-writer"); const { dialog, ipcMain } = require("electron"); -const getSongInfo = require("../../providers/song-info"); +const registerCallback = require("../../providers/song-info"); const { injectCSS, listenAction } = require("../utils"); const { cropMaxWidth } = require("./utils"); const { ACTIONS, CHANNEL } = require("./actions.js"); @@ -25,7 +25,6 @@ let nowPlayingMetadata = {}; function handle(win) { injectCSS(win.webContents, join(__dirname, "style.css")); - const registerCallback = getSongInfo(win); registerCallback((info) => { nowPlayingMetadata = info; }); diff --git a/plugins/last-fm/back.js b/plugins/last-fm/back.js index 54975103..567dccc0 100644 --- a/plugins/last-fm/back.js +++ b/plugins/last-fm/back.js @@ -2,7 +2,7 @@ const fetch = require('node-fetch'); const md5 = require('md5'); const { shell } = require('electron'); const { setOptions } = require('../../config/plugins'); -const getSongInfo = require('../../providers/song-info'); +const registerCallback = require('../../providers/song-info'); const defaultConfig = require('../../config/defaults'); const createFormData = params => { @@ -128,9 +128,7 @@ const setNowPlaying = (songInfo, config) => { // this will store the timeout that will trigger addScrobble let scrobbleTimer = undefined; -const lastfm = async (win, config) => { - const registerCallback = getSongInfo(win); - +const lastfm = async (_win, config) => { if (!config.api_root) { // settings are not present, creating them with the default values config = defaultConfig.plugins['last-fm']; diff --git a/plugins/notifications/back.js b/plugins/notifications/back.js index d1ef3114..91d3ea72 100644 --- a/plugins/notifications/back.js +++ b/plugins/notifications/back.js @@ -1,6 +1,6 @@ const { Notification } = require("electron"); const is = require("electron-is"); -const getSongInfo = require("../../providers/song-info"); +const registerCallback = require("../../providers/song-info"); const { notificationImage } = require("./utils"); const { setupInteractive, notifyInteractive } = require("./interactive") @@ -29,7 +29,6 @@ module.exports = (win, options) => { if (isInteractive) { setupInteractive(win, options.unpauseNotification); } - const registerCallback = getSongInfo(win); let oldNotification; let oldURL = ""; win.once("ready-to-show", () => { diff --git a/plugins/taskbar-mediacontrol/back.js b/plugins/taskbar-mediacontrol/back.js index 46cb399e..26a11732 100644 --- a/plugins/taskbar-mediacontrol/back.js +++ b/plugins/taskbar-mediacontrol/back.js @@ -1,12 +1,11 @@ const getSongControls = require('../../providers/song-controls'); -const getSongInfo = require('../../providers/song-info'); +const registerCallback = require('../../providers/song-info'); const path = require('path'); let controls; let currentSongInfo; module.exports = win => { - const registerCallback = getSongInfo(win); const { playPause, next, previous } = getSongControls(win); controls = { playPause, next, previous }; diff --git a/plugins/touchbar/back.js b/plugins/touchbar/back.js index 0fca17a7..acaee583 100644 --- a/plugins/touchbar/back.js +++ b/plugins/touchbar/back.js @@ -7,7 +7,7 @@ const { TouchBarScrubber, } = TouchBar; -const getSongInfo = require("../../providers/song-info"); +const registerCallback = require("../../providers/song-info"); const getSongControls = require("../../providers/song-controls"); // Songtitle label @@ -59,7 +59,6 @@ const touchBar = new TouchBar({ }); module.exports = (win) => { - const registerCallback = getSongInfo(win); const { playPause, next, previous, like, dislike } = getSongControls(win); // If the page is ready, register the callback diff --git a/providers/song-info.js b/providers/song-info.js index 5701d1f3..97ddb071 100644 --- a/providers/song-info.js +++ b/providers/song-info.js @@ -51,6 +51,7 @@ const songInfo = { }; const handleData = async (responseText, win) => { + console.log("handling song-info") let data = JSON.parse(responseText); songInfo.title = data?.videoDetails?.title; songInfo.artist = await getArtist(win) || cleanupArtistName(data?.videoDetails?.author); @@ -64,15 +65,15 @@ const handleData = async (responseText, win) => { win.webContents.send("update-song-info", JSON.stringify(songInfo)); }; +// This variable will be filled with the callbacks once they register +const callbacks = []; + +// This function will allow plugins to register callback that will be triggered when data changes +const registerCallback = (callback) => { + callbacks.push(callback); +}; + const registerProvider = (win) => { - // This variable will be filled with the callbacks once they register - const callbacks = []; - - // This function will allow plugins to register callback that will be triggered when data changes - const registerCallback = (callback) => { - callbacks.push(callback); - }; - win.on("page-title-updated", async () => { // Get and set the new data songInfo.isPaused = await getPausedStatus(win); @@ -93,8 +94,6 @@ const registerProvider = (win) => { c(songInfo); }); }); - - return registerCallback; }; const suffixesToRemove = [' - Topic', 'VEVO']; @@ -110,7 +109,8 @@ function cleanupArtistName(artist) { return artist; } -module.exports = registerProvider; +module.exports = registerCallback; +module.exports.setupSongInfo = registerProvider; module.exports.getImage = getImage; module.exports.cleanupArtistName = cleanupArtistName;