2024-12-03 17:46:43 -05:00
|
|
|
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,
|
2024-12-03 18:58:15 -05:00
|
|
|
"source": "plex"
|
2024-12-03 17:46:43 -05:00
|
|
|
}));
|
|
|
|
return cache[key];
|
|
|
|
}
|
|
|
|
|
|
|
|
module.exports = {
|
|
|
|
getCurrentlyPlaying
|
|
|
|
}
|