diff --git a/plugins/notifications/interactive.js b/plugins/notifications/interactive.js index 0f4efada..381f3fe9 100644 --- a/plugins/notifications/interactive.js +++ b/plugins/notifications/interactive.js @@ -1,9 +1,9 @@ -const { notificationImage, icons } = require("./utils"); +const { notificationImage, icons, save_temp_icons } = require("./utils"); const getSongControls = require('../../providers/song-controls'); const registerCallback = require("../../providers/song-info"); const { changeProtocolHandler } = require("../../providers/protocol-handler"); -const { Notification } = require("electron"); +const { Notification, app } = require("electron"); const path = require('path'); let songControls; @@ -13,19 +13,21 @@ let savedNotification; module.exports = (win, _config) => { songControls = getSongControls(win); config = _config; + if (app.isPackaged && !config.smallInteractive) save_temp_icons(); let lastSongInfo = { url: undefined }; // Register songInfoCallback - registerCallback((songInfo, cause) => { + registerCallback(songInfo => { if (!songInfo.isPaused && (songInfo.url !== lastSongInfo.url || config.unpauseNotification)) { lastSongInfo = { ...songInfo }; sendXML(songInfo); } }); - win.webContents.once("closed", () => { - savedNotification = undefined; + //TODO on app before close, close notification + app.once("before-quit", () => { + savedNotification?.close(); }); changeProtocolHandler( @@ -42,7 +44,6 @@ module.exports = (win, _config) => { ) } - function sendXML(songInfo) { const imgSrc = notificationImage(songInfo, true); @@ -63,7 +64,7 @@ function sendXML(songInfo) { ${songInfo.title} - ${songInfo.artist}} + ${songInfo.artist} @@ -82,10 +83,35 @@ function sendXML(songInfo) { savedNotification.show(); } +const iconLocation = app.isPackaged ? + path.resolve(app.getPath("userData"), 'icons') : + path.resolve(__dirname, '..', '..', 'assets/media-icons-black'); + + const getButton = (kind) => ``; const display = (kind) => config.smallInteractive ? `content="${icons[kind]}"` : - `content="" imageUri="file:///${path.resolve(__dirname, "../../assets/media-icons-black", `${kind}.png`)}"`; + `content="" imageUri="file:///${path.resolve(__dirname, iconLocation, `${kind}.png`)}"`; + + +// TODO MAKE DIFFERENT TEMPLATES +const xml = (songInfo, options) => { + const xml = ` + + + + Header Text + Body Text + Body 2 Text + Attribution Text + + + + + + + `; +} diff --git a/plugins/notifications/utils.js b/plugins/notifications/utils.js index 7cb9e61e..64309c02 100644 --- a/plugins/notifications/utils.js +++ b/plugins/notifications/utils.js @@ -4,7 +4,8 @@ const { app } = require("electron"); const fs = require("fs"); const icon = "assets/youtube-music.png"; -const tempIcon = path.join(app.getPath("userData"), "tempIcon.png"); +const userData = app.getPath("userData"); +const tempIcon = path.join(userData, "tempIcon.png"); module.exports.icons = { play: "\u{1405}", // ᐅ @@ -24,7 +25,7 @@ module.exports.urgencyLevels = [ { name: "High", value: "critical" }, ]; -module.exports.notificationImage = function (songInfo, saveIcon = false) { +module.exports.notificationImage = (songInfo, saveIcon = false) => { //return local path to temp icon if (saveIcon && !!songInfo.image) { try { @@ -44,6 +45,16 @@ module.exports.notificationImage = function (songInfo, saveIcon = false) { : icon }; +module.exports.save_temp_icons = () => { + for (const kind of Object.keys(module.exports.icons)) { + const destinationPath = path.join(userData, 'icons', `${kind}.png`); + if (fs.existsSync(destinationPath)) continue; + const iconPath = path.resolve(__dirname, "../../assets/media-icons-black", `${kind}.png`); + fs.mkdirSync(path.dirname(destinationPath), { recursive: true }); + fs.copyFile(iconPath, destinationPath, ()=>{}); + } +}; + function centerNativeImage(nativeImage) { const tempImage = nativeImage.resize({ height: 256 }); const margin = Math.max((tempImage.getSize().width - 256), 0);