Add RSS feeds config page

This commit is contained in:
Shawn Hoffman 2023-08-22 09:42:55 -07:00
parent 7222171c5b
commit 13427b9f70
8 changed files with 338 additions and 7 deletions

View file

@ -5,6 +5,14 @@ const libraryItemsBookFilters = require('../utils/queries/libraryItemsBookFilter
class RSSFeedController {
constructor() { }
async getAll(req, res) {
const feeds = await this.rssFeedManager.getFeeds()
res.json({
feeds: feeds.map(f => f.toJSON()),
minified: feeds.map(f => f.toJSONMinified())
})
}
// POST: api/feeds/item/:itemId/open
async openRSSFeedForItem(req, res) {
const options = req.body || {}

View file

@ -52,7 +52,7 @@ class RssFeedManager {
/**
* Find open feed for an entity (e.g. collection id, playlist id, library item id)
* @param {string} entityId
* @param {string} entityId
* @returns {Promise<objects.Feed>} oldFeed
*/
findFeedForEntityId(entityId) {
@ -61,7 +61,7 @@ class RssFeedManager {
/**
* Find open feed for a slug
* @param {string} slug
* @param {string} slug
* @returns {Promise<objects.Feed>} oldFeed
*/
findFeedBySlug(slug) {
@ -70,7 +70,7 @@ class RssFeedManager {
/**
* Find open feed for a slug
* @param {string} slug
* @param {string} slug
* @returns {Promise<objects.Feed>} oldFeed
*/
findFeed(id) {
@ -262,5 +262,11 @@ class RssFeedManager {
if (!feed) return
return this.handleCloseFeed(feed)
}
async getFeeds() {
const feeds = await Database.models.feed.getOldFeeds()
Logger.info(`[RssFeedManager] Fetched all feeds`)
return feeds
}
}
module.exports = RssFeedManager

View file

@ -296,9 +296,10 @@ class ApiRouter {
this.router.post('/tools/item/:id/embed-metadata', ToolsController.middleware.bind(this), ToolsController.embedAudioFileMetadata.bind(this))
this.router.post('/tools/batch/embed-metadata', ToolsController.middleware.bind(this), ToolsController.batchEmbedMetadata.bind(this))
//
//
// RSS Feed Routes (Admin and up)
//
this.router.get('/feeds', RSSFeedController.getAll.bind(this))
this.router.post('/feeds/item/:itemId/open', RSSFeedController.middleware.bind(this), RSSFeedController.openRSSFeedForItem.bind(this))
this.router.post('/feeds/collection/:collectionId/open', RSSFeedController.middleware.bind(this), RSSFeedController.openRSSFeedForCollection.bind(this))
this.router.post('/feeds/series/:seriesId/open', RSSFeedController.middleware.bind(this), RSSFeedController.openRSSFeedForSeries.bind(this))
@ -354,8 +355,8 @@ class ApiRouter {
//
/**
* Remove library item and associated entities
* @param {string} mediaType
* @param {string} libraryItemId
* @param {string} mediaType
* @param {string} libraryItemId
* @param {string[]} mediaItemIds array of bookId or podcastEpisodeId
*/
async handleDeleteLibraryItem(mediaType, libraryItemId, mediaItemIds) {
@ -446,7 +447,7 @@ class ApiRouter {
* Series is removed if it only has 1 book
* TODO: Update filter data
* @param {UUIDV4} bookId
* @param {UUIDV4[]} seriesIds
* @param {UUIDV4[]} seriesIds
*/
async checkRemoveEmptySeries(bookId, seriesIds) {
if (!seriesIds?.length) return