diff --git a/server/controllers/MeController.js b/server/controllers/MeController.js index cae844e2..8e48dc11 100644 --- a/server/controllers/MeController.js +++ b/server/controllers/MeController.js @@ -1,4 +1,5 @@ const Logger = require('../Logger') +const { sort } = require('../libs/fastSort') const { isObject, toNumber } = require('../utils/index') class MeController { @@ -240,5 +241,40 @@ class MeController { localProgressUpdates: updatedLocalMediaProgress }) } + + // GET: api/me/items-in-progress + async getAllLibraryItemsInProgress(req, res) { + const limit = !isNaN(req.query.limit) ? Number(req.query.limit) || 25 : 25 + + var itemsInProgress = [] + for (const mediaProgress of req.user.mediaProgress) { + if (!mediaProgress.isFinished && mediaProgress.progress > 0) { + const libraryItem = await this.db.getLibraryItem(mediaProgress.libraryItemId) + if (libraryItem) { + if (mediaProgress.episodeId && libraryItem.mediaType === 'podcast') { + const episode = libraryItem.media.episodes.find(ep => ep.id === mediaProgress.episodeId) + if (episode) { + const libraryItemWithEpisode = { + ...libraryItem.toJSONMinified(), + recentEpisode: episode.toJSON(), + progressLastUpdate: mediaProgress.lastUpdate + } + itemsInProgress.push(libraryItemWithEpisode) + } + } else if (!mediaProgress.episodeId) { + itemsInProgress.push({ + ...libraryItem.toJSONMinified(), + progressLastUpdate: mediaProgress.lastUpdate + }) + } + } + } + } + + itemsInProgress = sort(itemsInProgress).desc(li => li.progressLastUpdate).slice(0, limit) + res.json({ + libraryItems: itemsInProgress + }) + } } module.exports = new MeController() \ No newline at end of file diff --git a/server/routers/ApiRouter.js b/server/routers/ApiRouter.js index 36bbc57d..e4139fb8 100644 --- a/server/routers/ApiRouter.js +++ b/server/routers/ApiRouter.js @@ -142,6 +142,7 @@ class ApiRouter { this.router.patch('/me/password', MeController.updatePassword.bind(this)) this.router.patch('/me/settings', MeController.updateSettings.bind(this)) this.router.post('/me/sync-local-progress', MeController.syncLocalMediaProgress.bind(this)) + this.router.get('/me/items-in-progress', MeController.getAllLibraryItemsInProgress.bind(this)) // // Backup Routes diff --git a/server/utils/libraryHelpers.js b/server/utils/libraryHelpers.js index 0bd5607c..23993344 100644 --- a/server/utils/libraryHelpers.js +++ b/server/utils/libraryHelpers.js @@ -1,6 +1,5 @@ const { sort, createNewSortInstance } = require('../libs/fastSort') const { getTitleIgnorePrefix } = require('../utils/index') -const Logger = require('../Logger') const naturalSort = createNewSortInstance({ comparer: new Intl.Collator(undefined, { numeric: true, sensitivity: 'base' }).compare })