From cb9fc3e0d141efec4e7b3823fffd0247e62a349f Mon Sep 17 00:00:00 2001 From: mikiher Date: Sun, 16 Feb 2025 09:22:06 +0200 Subject: [PATCH] Replace numEpisodesIncomplete subquery with cached user progress calculation --- server/utils/queries/libraryItemsPodcastFilters.js | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/server/utils/queries/libraryItemsPodcastFilters.js b/server/utils/queries/libraryItemsPodcastFilters.js index 92002d79..6b6d9cd7 100644 --- a/server/utils/queries/libraryItemsPodcastFilters.js +++ b/server/utils/queries/libraryItemsPodcastFilters.js @@ -140,9 +140,6 @@ module.exports = { } const podcastIncludes = [] - if (includeNumEpisodesIncomplete) { - podcastIncludes.push([Sequelize.literal(`(SELECT count(*) FROM podcastEpisodes pe LEFT OUTER JOIN mediaProgresses mp ON mp.mediaItemId = pe.id AND mp.userId = :userId WHERE pe.podcastId = podcast.id AND (mp.isFinished = 0 OR mp.isFinished IS NULL))`), 'numEpisodesIncomplete']) - } let { mediaWhere, replacements } = this.getMediaGroupQuery(filterGroup, filterValue) replacements.userId = user.id @@ -184,8 +181,15 @@ module.exports = { if (libraryItem.feeds?.length) { libraryItem.rssFeed = libraryItem.feeds[0] } - if (podcast.dataValues.numEpisodesIncomplete) { - libraryItem.numEpisodesIncomplete = podcast.dataValues.numEpisodesIncomplete + + if (includeNumEpisodesIncomplete) { + const numEpisodesComplete = user.mediaProgresses.reduce((acc, mp) => { + if (mp.podcastId === podcast.id && mp.isFinished) { + acc += 1 + } + return acc + }, 0) + libraryItem.numEpisodesIncomplete = podcast.numEpisodes - numEpisodesComplete } libraryItem.media = podcast