From 066d853156907c83caa4d53e66b3492e00bdbf38 Mon Sep 17 00:00:00 2001 From: advplyr Date: Thu, 7 Sep 2023 17:49:35 -0500 Subject: [PATCH] Add support for hide from continue listening on new home page shelves route --- server/Server.js | 4 ++++ server/SocketAuthority.js | 3 +-- server/controllers/MeController.js | 12 +++++++++++- server/utils/queries/libraryFilters.js | 4 ++-- server/utils/queries/libraryItemsBookFilters.js | 14 ++++++++++---- server/utils/queries/libraryItemsPodcastFilters.js | 14 ++++++++++---- 6 files changed, 38 insertions(+), 13 deletions(-) diff --git a/server/Server.js b/server/Server.js index def6ed4b..6b867464 100644 --- a/server/Server.js +++ b/server/Server.js @@ -88,6 +88,10 @@ class Server { LibraryScanner.setCancelLibraryScan(libraryId) } + getLibrariesScanning() { + return LibraryScanner.librariesScanning + } + /** * Initialize database, backups, logs, rss feeds, cron jobs & watcher * Cleanup stale/invalid data diff --git a/server/SocketAuthority.js b/server/SocketAuthority.js index 1c1454f8..86f94d3d 100644 --- a/server/SocketAuthority.js +++ b/server/SocketAuthority.js @@ -1,7 +1,6 @@ const SocketIO = require('socket.io') const Logger = require('./Logger') const Database = require('./Database') -const LibraryScanner = require('./scanner/LibraryScanner') class SocketAuthority { constructor() { @@ -181,7 +180,7 @@ class SocketAuthority { const initialPayload = { userId: client.user.id, username: client.user.username, - librariesScanning: LibraryScanner.librariesScanning + librariesScanning: this.Server.getLibrariesScanning() } if (user.isAdminOrUp) { initialPayload.usersOnline = this.getUsersOnline() diff --git a/server/controllers/MeController.js b/server/controllers/MeController.js index 529877a2..b03868a0 100644 --- a/server/controllers/MeController.js +++ b/server/controllers/MeController.js @@ -316,9 +316,19 @@ class MeController { // GET: api/me/progress/:id/remove-from-continue-listening async removeItemFromContinueListening(req, res) { + const mediaProgress = req.user.mediaProgress.find(mp => mp.id === req.params.id) + if (!mediaProgress) { + return res.sendStatus(404) + } const hasUpdated = req.user.removeProgressFromContinueListening(req.params.id) if (hasUpdated) { - await Database.updateUser(req.user) + await Database.mediaProgressModel.update({ + hideFromContinueListening: true + }, { + where: { + id: mediaProgress.id + } + }) SocketAuthority.clientEmitter(req.user.id, 'user_updated', req.user.toJSONForBrowser()) } res.json(req.user.toJSONForBrowser()) diff --git a/server/utils/queries/libraryFilters.js b/server/utils/queries/libraryFilters.js index febb79ca..2a1a2bc0 100644 --- a/server/utils/queries/libraryFilters.js +++ b/server/utils/queries/libraryFilters.js @@ -49,7 +49,7 @@ module.exports = { */ async getMediaItemsInProgress(library, user, include, limit) { if (library.mediaType === 'book') { - const { libraryItems, count } = await libraryItemsBookFilters.getFilteredLibraryItems(library.id, user, 'progress', 'in-progress', 'progress', true, false, include, limit, 0) + const { libraryItems, count } = await libraryItemsBookFilters.getFilteredLibraryItems(library.id, user, 'progress', 'in-progress', 'progress', true, false, include, limit, 0, true) return { items: libraryItems.map(li => { const oldLibraryItem = Database.libraryItemModel.getOldLibraryItem(li).toJSONMinified() @@ -61,7 +61,7 @@ module.exports = { count } } else { - const { libraryItems, count } = await libraryItemsPodcastFilters.getFilteredPodcastEpisodes(library.id, user, 'progress', 'in-progress', 'progress', true, limit, 0) + const { libraryItems, count } = await libraryItemsPodcastFilters.getFilteredPodcastEpisodes(library.id, user, 'progress', 'in-progress', 'progress', true, limit, 0, true) return { count, items: libraryItems.map(li => { diff --git a/server/utils/queries/libraryItemsBookFilters.js b/server/utils/queries/libraryItemsBookFilters.js index a9eb057d..7ee1f0fb 100644 --- a/server/utils/queries/libraryItemsBookFilters.js +++ b/server/utils/queries/libraryItemsBookFilters.js @@ -337,9 +337,10 @@ module.exports = { * @param {string[]} include * @param {number} limit * @param {number} offset + * @param {boolean} isHomePage for home page shelves * @returns {object} { libraryItems:LibraryItem[], count:number } */ - async getFilteredLibraryItems(libraryId, user, filterGroup, filterValue, sortBy, sortDesc, collapseseries, include, limit, offset) { + async getFilteredLibraryItems(libraryId, user, filterGroup, filterValue, sortBy, sortDesc, collapseseries, include, limit, offset, isHomePage = false) { // TODO: Handle collapse sub-series if (filterGroup === 'series' && collapseseries) { collapseseries = false @@ -471,12 +472,17 @@ module.exports = { } ] } else if (filterGroup === 'progress' && user) { + const mediaProgressWhere = { + userId: user.id + } + // Respect hide from continue listening for home page shelf + if (isHomePage) { + mediaProgressWhere.hideFromContinueListening = false + } bookIncludes.push({ model: Database.mediaProgressModel, attributes: ['id', 'isFinished', 'currentTime', 'ebookProgress', 'updatedAt'], - where: { - userId: user.id - }, + where: mediaProgressWhere, required: false }) } else if (filterGroup === 'recent') { diff --git a/server/utils/queries/libraryItemsPodcastFilters.js b/server/utils/queries/libraryItemsPodcastFilters.js index 35d9ecf9..86f138d6 100644 --- a/server/utils/queries/libraryItemsPodcastFilters.js +++ b/server/utils/queries/libraryItemsPodcastFilters.js @@ -204,9 +204,10 @@ module.exports = { * @param {string} sortDesc * @param {number} limit * @param {number} offset + * @param {boolean} isHomePage for home page shelves * @returns {object} {libraryItems:LibraryItem[], count:number} */ - async getFilteredPodcastEpisodes(libraryId, user, filterGroup, filterValue, sortBy, sortDesc, limit, offset) { + async getFilteredPodcastEpisodes(libraryId, user, filterGroup, filterValue, sortBy, sortDesc, limit, offset, isHomePage = false) { if (sortBy === 'progress' && filterGroup !== 'progress') { Logger.warn('Cannot sort podcast episodes by progress without filtering by progress') sortBy = 'createdAt' @@ -218,11 +219,16 @@ module.exports = { libraryId } if (filterGroup === 'progress') { + const mediaProgressWhere = { + userId: user.id + } + // Respect hide from continue listening for home page shelf + if (isHomePage) { + mediaProgressWhere.hideFromContinueListening = false + } podcastEpisodeIncludes.push({ model: Database.mediaProgressModel, - where: { - userId: user.id - }, + where: mediaProgressWhere, attributes: ['id', 'isFinished', 'currentTime', 'updatedAt'] })