diff --git a/services/plex.js b/services/plex.js deleted file mode 100644 index 70b729e..0000000 --- a/services/plex.js +++ /dev/null @@ -1,53 +0,0 @@ -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 -} \ No newline at end of file diff --git a/services/spotify.js b/services/spotify.js deleted file mode 100644 index c574b64..0000000 --- a/services/spotify.js +++ /dev/null @@ -1,98 +0,0 @@ -const axios = require("axios"); -const config = require("../config/configuration") -const logger = require("./logging"); -const fs = require("fs/promises"); -const fss = require("fs"); - -let token = null; -let cache = {} - -async function refreshTokenIfNeeded() { - if (!token || token["expires_at"] && token["expires_at"] - Date.now() > 900) { - return false; - } - - try { - const response = await axios.post("https://accounts.spotify.com/api/token", - { - client_id: config.spotify.client_id, - refresh_token: token["refresh_token"], - grant_type: "refresh_token" - }, - { - headers: { - "Authorization": "Basic " + new Buffer.from(config.spotify.client_id + ':' + config.spotify.client_secret).toString('base64'), - "Content-Type": "application/x-www-form-urlencoded" - } - } - ); - - const data = response.data; - data["expires_at"] = Date.now() + data["expires_in"] * 1000; - if (!data["refresh_token"]) { - data["refresh_token"] = token["refresh_token"]; - } - await fs.writeFile("credentials.spotify.json", JSON.stringify(data)); - token = data; - logger.debug("Updated access token for Spotify."); - return true; - } catch (ex) { - logger.error(ex, "Failed to get Spotify oauth."); - return false; - } -} - -async function loadCredentials() { - if (!fss.existsSync("credentials.spotify.json")) { - logger.info("No Spotify credentials found."); - return; - } - - const content = await fs.readFile("credentials.spotify.json", "utf-8"); - token = JSON.parse(content); -} - -async function getCurrentlyPlaying(cached = false) { - if (cached) { - return cache['spotify'] - } - - try { - const response = await axios.get("https://api.spotify.com/v1/me/player/currently-playing", - { - headers: { - "Authorization": "Bearer " + token["access_token"] - } - } - ); - - if (!response.data) { - cache['spotify'] = null; - return null; - } - - const media = response.data.item; - cache['spotify'] = { - "track": media.name, - "album": media.album.name, - "artist": media.artists.map(a => a.name).join(', '), - "year": media.parentYear, - "duration": media.duration_ms, - "playtime": response.data.progress_ms, - "mediaKey": media.id, - "sessionKey": "spotify", - "state": response.data.is_playing ? "playing" : "paused", - "source": "spotify" - }; - return cache['spotify']; - } catch (ex) { - logger.error(ex, "Failed to get currently playing data from Spotify."); - return null; - } -} - -module.exports = { - refreshTokenIfNeeded, - loadCredentials, - getCurrentlyPlaying -} \ No newline at end of file