diff --git a/public/locales/en/common.json b/public/locales/en/common.json index 2da02110c..d3eb43cc8 100755 --- a/public/locales/en/common.json +++ b/public/locales/en/common.json @@ -132,6 +132,7 @@ }, "plex": { "streams": "Active Streams", + "albums": "Albums", "movies": "Movies", "tv": "TV Shows" }, diff --git a/src/widgets/plex/component.jsx b/src/widgets/plex/component.jsx index 6fe15bd57..bd01230f0 100644 --- a/src/widgets/plex/component.jsx +++ b/src/widgets/plex/component.jsx @@ -21,6 +21,7 @@ export default function Component({ service }) { return ( + @@ -30,6 +31,7 @@ export default function Component({ service }) { return ( + diff --git a/src/widgets/plex/proxy.js b/src/widgets/plex/proxy.js index 135b2b081..855a60f9e 100644 --- a/src/widgets/plex/proxy.js +++ b/src/widgets/plex/proxy.js @@ -10,6 +10,7 @@ import widgets from "widgets/widgets"; const proxyName = "plexProxyHandler"; const librariesCacheKey = `${proxyName}__libraries`; +const albumsCacheKey = `${proxyName}__albums`; const moviesCacheKey = `${proxyName}__movies`; const tvCacheKey = `${proxyName}__tv`; const logger = createLogger(proxyName); @@ -87,32 +88,41 @@ export default async function plexProxyHandler(req, res) { } } + let albums = cache.get(`${albumsCacheKey}.${service}`); let movies = cache.get(`${moviesCacheKey}.${service}`); let tv = cache.get(`${tvCacheKey}.${service}`); - if (movies === null || tv === null) { + if (albums === null || movies === null || tv === null) { + albums = 0; movies = 0; tv = 0; - logger.debug("Getting movie + tv counts from Plex API"); - const movieTVLibraries = libraries.filter(l => ["movie", "show"].includes(l._attributes.type)); + logger.debug("Getting counts from Plex API"); + const movieTVLibraries = libraries.filter(l => ["movie", "show", "artist"].includes(l._attributes.type)); await Promise.all(movieTVLibraries.map(async (library) => { - [status, apiData] = await fetchFromPlexAPI(`/library/sections/${library._attributes.key}/all`, widget); + const libraryURL = ["movie", "show"].includes(library._attributes.type) ? + `/library/sections/${library._attributes.key}/all` : // tv + movies + `/library/sections/${library._attributes.key}/albums`; // music + [status, apiData] = await fetchFromPlexAPI(libraryURL, widget); if (apiData && apiData.MediaContainer) { const size = parseInt(apiData.MediaContainer._attributes.size, 10); if (library._attributes.type === "movie") { movies += size; } else if (library._attributes.type === "show") { tv += size; + } else if (library._attributes.type === "artist") { + albums += size; } } })); + cache.put(`${albumsCacheKey}.${service}`, albums, 1000 * 60 * 10); cache.put(`${tvCacheKey}.${service}`, tv, 1000 * 60 * 10); cache.put(`${moviesCacheKey}.${service}`, movies, 1000 * 60 * 10); } const data = { streams, + albums, + movies, tv, - movies }; return res.status(status).send(data);