From 79a95f133bde84f3fb26e7012ea598933608a36f Mon Sep 17 00:00:00 2001 From: Araxeus <78568641+Araxeus@users.noreply.github.com> Date: Sat, 23 Oct 2021 18:22:17 +0300 Subject: [PATCH] use apiLoad event --- preload.js | 27 +++++++++++++++++++++++++++ providers/song-info-front.js | 31 ++++++------------------------- 2 files changed, 33 insertions(+), 25 deletions(-) diff --git a/preload.js b/preload.js index 5a09c845..67ae8f7c 100644 --- a/preload.js +++ b/preload.js @@ -10,6 +10,8 @@ const setupSongInfo = require("./providers/song-info-front"); const plugins = config.plugins.getEnabled(); +let api; + plugins.forEach(([plugin, options]) => { const preloadPath = path.join(__dirname, "plugins", plugin, "preload.js"); fileExists(preloadPath, () => { @@ -38,6 +40,9 @@ document.addEventListener("DOMContentLoaded", () => { }); }); + // wait for complete load of youtube api + listenForApiLoad(); + // inject song-info provider setupSongInfo(); @@ -51,3 +56,25 @@ document.addEventListener("DOMContentLoaded", () => { global.reload = () => remote.getCurrentWindow().webContents.loadURL(config.get("url")); }); + +function listenForApiLoad() { + api = document.querySelector('#movie_player'); + if (api) { + onApiLoaded(); + return; + } + + const observer = new MutationObserver(() => { + api = document.querySelector('#movie_player'); + if (api) { + observer.disconnect(); + onApiLoaded(); + } + }) + + observer.observe(document.documentElement, { childList: true, subtree: true }); +} + +function onApiLoaded() { + document.dispatchEvent(new CustomEvent('apiLoaded', { detail: api })); +} diff --git a/providers/song-info-front.js b/providers/song-info-front.js index 674faeb7..80c2e990 100644 --- a/providers/song-info-front.js +++ b/providers/song-info-front.js @@ -4,35 +4,16 @@ const { getImage } = require("./song-info"); global.songInfo = {}; -let api = document.querySelector('#movie_player'); - ipcRenderer.on("update-song-info", async (_, extractedSongInfo) => { global.songInfo = JSON.parse(extractedSongInfo); global.songInfo.image = await getImage(global.songInfo.imageSrc); }); -function setup() { - if (api) { - injectListener(); - return; - } - - const observer = new MutationObserver(() => { - api = document.querySelector('#movie_player'); - if (api) { - observer.disconnect(); - injectListener(); - } +module.exports = () => { + document.addEventListener('apiLoaded', e => { + document.querySelector('video').addEventListener('loadeddata', () => { + const data = e.detail.getPlayerResponse(); + ipcRenderer.send("song-info-request", JSON.stringify(data)); + }); }) - - observer.observe(document.documentElement, { childList: true, subtree: true }); -} - -function injectListener() { - document.querySelector('video').addEventListener('loadeddata', () => { - const data = api.getPlayerResponse(); - ipcRenderer.send("song-info-request", JSON.stringify(data)); - }); }; - -module.exports = setup;