diff --git a/liberals/libnowplaying.js b/liberals/libnowplaying.js index 5ef7e92..04c7ce5 100644 --- a/liberals/libnowplaying.js +++ b/liberals/libnowplaying.js @@ -37,29 +37,35 @@ async function queryLastfm() { }) } +/** + * Queries Jellyfin for user set in config file and returns formatted result + * @returns {object} Object containing response in JSON and HTML (as string) + */ async function queryJellyfin() { return await fetch(`${globalConfig.nowplaying.jellyfin.host}/Sessions`, { headers: { "Authorization": `MediaBrowser Token=${globalConfig.nowplaying.jellyfin.apiKey}` } }).then(response => response.json()).then(response => { - for (x in response) { + for (let x in response) { if (response[x].UserName !== globalConfig.nowplaying.jellyfin.target) { break } // If session does not belong to target specified in config, skip - if (!response[x].NowPlayingItem) { break } // If the NowPlayingItem object is not present, skip (session is not playing anything) + if (response[x].NowPlayingItem == undefined) { break } // If the NowPlayingItem object is not present, skip (session is not playing anything) if (response[x].NowPlayingItem.MediaType !== "Audio") { break } // If not playing 'audio', skip, this might change in the future return { "json": { "songName": response[x].NowPlayingItem.Name, "artistName": response[x].NowPlayingItem.Artists[0], - "albumName": response.recenttracks.track[0].album["#text"], - "artUrl": response.recenttracks.track[0].image[3]["#text"], - "link": response.recenttracks.track[0].url + "albumName": response[x].NowPlayingItem.Album ?? `${response[x].NowPlayingItem.Name} (Single)`, + "artUrl": `${globalConfig.nowplaying.jellyfin.hostPublic}/Items/${response[x].NowPlayingItem.Id}/Images/Primary`, + "link": `https://www.last.fm/music/${response[x].NowPlayingItem.Artists[0].replaceAll(" ","+")}/_/${response[x].NowPlayingItem.Name.replaceAll(" ","+")}` }, - "html": `Album Art

I'm listening to

${response.recenttracks.track[0].name} by ${response.recenttracks.track[0].artist["#text"]}

from ${response.recenttracks.track[0].album["#text"]}

View on Last.fm
` + "html": `Album Art

I'm listening to

${response[x].NowPlayingItem.Name} by ${response[x].NowPlayingItem.Artists[0]}

from ${response[x].NowPlayingItem.Album ?? `${response[x].NowPlayingItem.Name} (Single)`}

View on Last.fm
` } } + + return notPlayingAnythingPlaceholder }) } -export { queryLastfm } \ No newline at end of file +export { queryLastfm, queryJellyfin } \ No newline at end of file diff --git a/routes/nowplaying.js b/routes/nowplaying.js index 29b8958..dee48d7 100644 --- a/routes/nowplaying.js +++ b/routes/nowplaying.js @@ -1,5 +1,5 @@ import { app, globalConfig } from "../index.js" -import { queryLastfm } from "../liberals/libnowplaying.js" +import { queryLastfm, queryJellyfin } from "../liberals/libnowplaying.js" var timeSinceLastLastfmQuery = Date.now()-5000 var cachedLastfmResult = {} @@ -23,4 +23,12 @@ app.get("/api/nowplaying", (rreq,rres) => { }) +app.get("/api/nowplayingbeta", (rreq,rres) => { + + queryJellyfin().then(response => { + rres.send(response[rreq.query.format] ?? response.json) + }) + +}) + export {app} \ No newline at end of file