From 36f46072fdbbc84d13c0519fa0ad4bb3cd6fe43d Mon Sep 17 00:00:00 2001 From: "Brian C. Arnold" Date: Sun, 26 May 2024 11:57:57 -0400 Subject: [PATCH] Limit playlists to return only 4 items when getting list of ALL playlists (otherwise, return the entire playlist) --- server/controllers/LibraryController.js | 2 +- server/models/Playlist.js | 44 +++++++++++++++++++++++++ 2 files changed, 45 insertions(+), 1 deletion(-) diff --git a/server/controllers/LibraryController.js b/server/controllers/LibraryController.js index 8451de155..6b8b80e73 100644 --- a/server/controllers/LibraryController.js +++ b/server/controllers/LibraryController.js @@ -513,7 +513,7 @@ class LibraryController { */ async getUserPlaylistsForLibrary(req, res) { let playlistsForUser = await Database.playlistModel.getPlaylistsForUserAndLibrary(req.user.id, req.library.id) - playlistsForUser = await Promise.all(playlistsForUser.map(async (p) => p.getOldJsonExpanded())) + playlistsForUser = await Promise.all(playlistsForUser.map(async (p) => p.getLimitedOldJsonExpanded())) const payload = { results: [], diff --git a/server/models/Playlist.js b/server/models/Playlist.js index d6a86d689..d27e3a520 100644 --- a/server/models/Playlist.js +++ b/server/models/Playlist.js @@ -113,6 +113,50 @@ class Playlist extends Model { return playlistExpanded } + /** + * Get old playlist toJSONExpanded, limiting each playlist to the first 4 items. + * @param {[string[]]} include + * @returns {Promise} oldPlaylist.toJSONExpanded + */ + async getLimitedOldJsonExpanded(include) { + this.playlistMediaItems = + (await this.getPlaylistMediaItems({ + include: [ + { + model: this.sequelize.models.book, + include: this.sequelize.models.libraryItem + }, + { + model: this.sequelize.models.podcastEpisode, + include: { + model: this.sequelize.models.podcast, + include: this.sequelize.models.libraryItem + } + } + ], + limit: 4, + order: [['order', 'ASC']] + })) || [] + + const oldPlaylist = this.sequelize.models.playlist.getOldPlaylist(this) + const libraryItemIds = oldPlaylist.items.map((i) => i.libraryItemId) + + let libraryItems = await this.sequelize.models.libraryItem.getAllOldLibraryItems({ + id: libraryItemIds + }) + + const playlistExpanded = oldPlaylist.toJSONExpanded(libraryItems) + + if (include?.includes('rssfeed')) { + const feeds = await this.getFeeds() + if (feeds?.length) { + playlistExpanded.rssFeed = this.sequelize.models.feed.getOldFeed(feeds[0]) + } + } + + return playlistExpanded + } + static createFromOld(oldPlaylist) { const playlist = this.getFromOld(oldPlaylist) return this.create(playlist)