const axios = require("axios"); const config = require("../config/configuration"); let cache = {}; async function getCurrentlyPlaying(cached = false) { if (!config.plex.token || !config.plex.url) { return []; } const key = config.plex.url + "|" + config.plex.token; if (cached) { return cache[key] || []; } const response = await axios.get(config.plex.url + "/status/sessions", { headers: { "Accept": "application/json", "X-Plex-Token": config.plex.token } }); if (!response.data.MediaContainer?.Metadata) { cache[key] = []; return [] } cache[key] = response.data.MediaContainer.Metadata.map(media => ({ "library": media.librarySectionTitle, "track": media.title, "album": media.parentTitle, "artist": media.grandparentTitle, "year": media.parentYear, "duration": media.duration, "playtime": media.viewOffset, "lastListenedAt": media.lastViewedAt, "mediaKey": media.guid.substring(media.guid.lastIndexOf('/') + 1), "sessionKey": media.sessionKey, "ip": media.Player.address, "state": media.Player.state, "deviceId": media.Player.machineIdentifier, "platform": media.Player.platform, "platformVersion": media.Player.platformVersion, "product": media.Player.product, "version": media.Player.version, "source": "plex" })); return cache[key]; } module.exports = { getCurrentlyPlaying }