diff --git a/plugins/shortcuts/back.js b/plugins/shortcuts/back.js index ddb70c75..22a0319f 100644 --- a/plugins/shortcuts/back.js +++ b/plugins/shortcuts/back.js @@ -68,9 +68,8 @@ function registerShortcuts(win, options) { const player = setupMPRIS(); - const mprisSeek = p => { - player.seeked(p); - } + const mprisSeek = player.seeked; + win.webContents.send("registerOnSeek"); ipcMain.on('seeked', (_, t) => mprisSeek(secToMicro(t))); @@ -107,13 +106,15 @@ function registerShortcuts(win, options) { registerCallback(songInfo => { if (player) { - player.metadata = { + const data = { 'mpris:length': secToMicro(songInfo.songDuration), 'mpris:artUrl': songInfo.imageSrc, 'xesam:title': songInfo.title, 'xesam:artist': songInfo.artist, 'mpris:trackid': '/' - };; + }; + if (songInfo.album) data['xesam:album'] = songInfo.album; + player.metadata = data; mprisSeek(secToMicro(songInfo.elapsedSeconds)) player.playbackStatus = songInfo.isPaused ? "Paused" : "Playing" } diff --git a/plugins/tuna-obs/back.js b/plugins/tuna-obs/back.js index 13c472a0..e4ba39ba 100644 --- a/plugins/tuna-obs/back.js +++ b/plugins/tuna-obs/back.js @@ -11,7 +11,8 @@ const data = { status: '', progress: 0, duration: 0, - album_url: '' + album_url: '', + album: undefined }; const post = async (data) => { @@ -44,7 +45,8 @@ module.exports = async () => { data.album_url = songInfo.imageSrc; data.title = songInfo.title; data.artists = [songInfo.artist]; - data.status = songInfo.isPaused ? 'Paused' : 'Playing'; + data.status = songInfo.isPaused ? 'stopped' : 'playing'; + data.album = songInfo.album; post(data); }) } diff --git a/providers/song-info-front.js b/providers/song-info-front.js index 6e14dd7a..04fcbe08 100644 --- a/providers/song-info-front.js +++ b/providers/song-info-front.js @@ -4,6 +4,8 @@ const { getImage } = require("./song-info"); global.songInfo = {}; +function $(selector) { return document.querySelector(selector); } + ipcRenderer.on("update-song-info", async (_, extractedSongInfo) => { global.songInfo = JSON.parse(extractedSongInfo); global.songInfo.image = await getImage(global.songInfo.imageSrc); @@ -13,8 +15,9 @@ module.exports = () => { document.addEventListener('apiLoaded', e => { setupTimeChangeListener(); - document.querySelector('video').addEventListener('loadedmetadata', () => { + $('video').addEventListener('loadedmetadata', () => { const data = e.detail.getPlayerResponse(); + data.videoDetails.album = $('ytmusic-player-page')?.__data?.playerPageWatchMetadata?.albumName?.runs[0].text ipcRenderer.send("song-info-request", JSON.stringify(data)); }); }, { once: true, passive: true }) @@ -25,5 +28,5 @@ function setupTimeChangeListener() { ipcRenderer.send('timeChanged', mutations[0].target.value); global.songInfo.elapsedSeconds = mutations[0].target.value; }); - progressObserver.observe(document.querySelector('#progress-bar'), { attributeFilter: ["value"] }) + progressObserver.observe($('#progress-bar'), { attributeFilter: ["value"] }) } diff --git a/providers/song-info.js b/providers/song-info.js index 37cd55fa..b7d257ed 100644 --- a/providers/song-info.js +++ b/providers/song-info.js @@ -45,6 +45,7 @@ const songInfo = { songDuration: 0, elapsedSeconds: 0, url: "", + album: undefined }; const handleData = async (responseText, win) => { @@ -57,6 +58,7 @@ const handleData = async (responseText, win) => { songInfo.image = await getImage(songInfo.imageSrc); songInfo.uploadDate = data?.microformat?.microformatDataRenderer?.uploadDate; songInfo.url = data?.microformat?.microformatDataRenderer?.urlCanonical?.split("&")[0]; + songInfo.album = data?.videoDetails?.album // used for options.resumeOnStart config.set("url", data?.microformat?.microformatDataRenderer?.urlCanonical);