Add support for hide from continue listening on new home page shelves route

This commit is contained in:
advplyr 2023-09-07 17:49:35 -05:00
parent efae529fac
commit 066d853156
6 changed files with 38 additions and 13 deletions

View File

@ -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

View File

@ -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()

View File

@ -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())

View File

@ -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 => {

View File

@ -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') {

View File

@ -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']
})