From 5bffdbd6285a6816749c467d6e912d14748f9959 Mon Sep 17 00:00:00 2001 From: Sem Vissscher Date: Mon, 21 Dec 2020 21:35:02 +0100 Subject: [PATCH] Simplifies the notification plugin to use the globalized song info --- plugins/notifications/actions.js | 18 ------- plugins/notifications/back.js | 38 +++++++------- plugins/notifications/front.js | 86 -------------------------------- 3 files changed, 18 insertions(+), 124 deletions(-) delete mode 100644 plugins/notifications/actions.js delete mode 100644 plugins/notifications/front.js diff --git a/plugins/notifications/actions.js b/plugins/notifications/actions.js deleted file mode 100644 index 15e3f429..00000000 --- a/plugins/notifications/actions.js +++ /dev/null @@ -1,18 +0,0 @@ -const { triggerAction } = require("../utils"); - -const CHANNEL = "notification"; -const ACTIONS = { - NOTIFICATION: "notification", -}; - -function notify(info) { - triggerAction(CHANNEL, ACTIONS.NOTIFICATION, info); -} - -module.exports = { - CHANNEL, - ACTIONS, - global: { - notify, - }, -}; diff --git a/plugins/notifications/back.js b/plugins/notifications/back.js index 54dac482..108456de 100644 --- a/plugins/notifications/back.js +++ b/plugins/notifications/back.js @@ -1,33 +1,31 @@ -const { nativeImage, Notification } = require("electron"); - -const { listenAction } = require("../utils"); -const { ACTIONS, CHANNEL } = require("./actions.js"); +const {Notification} = require('electron'); function notify(info) { - let notificationImage = "assets/youtube-music.png"; + let notificationImage = 'assets/youtube-music.png'; + if (info.image) { - notificationImage = nativeImage.createFromDataURL(info.image); + notificationImage = info.image.resize({height: 256, width: 256}); } + // Fill the notification with content const notification = { - title: info.title || "Playing", + title: info.title || 'Playing', body: info.artist, icon: notificationImage, - silent: true, + silent: true }; + // Send the notification new Notification(notification).show(); } -function listenAndNotify() { - listenAction(CHANNEL, (event, action, imageSrc) => { - switch (action) { - case ACTIONS.NOTIFICATION: - notify(imageSrc); - break; - default: - console.log("Unknown action: " + action); - } +module.exports = win => { + win.on('ready-to-show', () => { + // Register the callback for new song information + global.songInfo.onNewData(songInfo => { + // If song is playing send notification + if (!songInfo.isPaused) { + notify(songInfo); + } + }); }); -} - -module.exports = listenAndNotify; +}; diff --git a/plugins/notifications/front.js b/plugins/notifications/front.js deleted file mode 100644 index ed07c701..00000000 --- a/plugins/notifications/front.js +++ /dev/null @@ -1,86 +0,0 @@ -let videoElement = null; -let image = null; - -const observer = new MutationObserver((mutations, observer) => { - if (!videoElement) { - videoElement = document.querySelector("video"); - } - - if (!image) { - image = document.querySelector(".ytmusic-player-bar.image"); - } - - if (videoElement !== null && image !== null) { - observer.disconnect(); - let notificationImage = null; - - videoElement.addEventListener("play", () => { - notify({ - title: getTitle(), - artist: getArtist(), - image: notificationImage, - }); - }); - - image.addEventListener("load", () => { - notificationImage = null; - const imageInBase64 = convertImageToBase64(image); - if (image && image.complete && image.naturalHeight !== 0) { - notificationImage = imageInBase64; - } - }); - } -}); - -// Convert an image (DOM element) to base64 string -const convertImageToBase64 = (image, size = 256) => { - image.setAttribute("crossorigin", "anonymous"); - - const c = document.createElement("canvas"); - c.height = size; - c.width = size; - - const ctx = c.getContext("2d"); - ctx.drawImage( - image, - 0, - 0, - image.naturalWidth, - image.naturalHeight, - 0, - 0, - c.width, - c.height - ); - - const imageInBase64 = c.toDataURL(); - return imageInBase64; -}; - -const getTitle = () => { - const title = document.querySelector(".title.ytmusic-player-bar").textContent; - return title; -}; - -const getArtist = () => { - const bar = document.querySelectorAll(".subtitle.ytmusic-player-bar")[0]; - let artist; - - if (bar.querySelectorAll(".yt-simple-endpoint.yt-formatted-string")[0]) { - artist = bar.querySelectorAll(".yt-simple-endpoint.yt-formatted-string")[0] - .textContent; - } else if (bar.querySelectorAll(".byline.ytmusic-player-bar")[0]) { - artist = bar.querySelectorAll(".byline.ytmusic-player-bar")[0].textContent; - } - - return artist; -}; - -const observeVideoAndThumbnail = () => { - observer.observe(document, { - childList: true, - subtree: true, - }); -}; - -module.exports = observeVideoAndThumbnail;