mirror of
https://github.com/advplyr/audiobookshelf.git
synced 2025-05-31 04:05:40 -04:00
Fix RSS feeds to use slug instead of id
This commit is contained in:
parent
a0bc959850
commit
b5d4c11f6f
@ -157,15 +157,15 @@ class Server {
|
|||||||
router.use('/hls', this.authMiddleware.bind(this), this.hlsRouter.router)
|
router.use('/hls', this.authMiddleware.bind(this), this.hlsRouter.router)
|
||||||
|
|
||||||
// RSS Feed temp route
|
// RSS Feed temp route
|
||||||
router.get('/feed/:id', (req, res) => {
|
router.get('/feed/:slug', (req, res) => {
|
||||||
Logger.info(`[Server] Requesting rss feed ${req.params.id}`)
|
Logger.info(`[Server] Requesting rss feed ${req.params.slug}`)
|
||||||
this.rssFeedManager.getFeed(req, res)
|
this.rssFeedManager.getFeed(req, res)
|
||||||
})
|
})
|
||||||
router.get('/feed/:id/cover', (req, res) => {
|
router.get('/feed/:slug/cover', (req, res) => {
|
||||||
this.rssFeedManager.getFeedCover(req, res)
|
this.rssFeedManager.getFeedCover(req, res)
|
||||||
})
|
})
|
||||||
router.get('/feed/:id/item/:episodeId/*', (req, res) => {
|
router.get('/feed/:slug/item/:episodeId/*', (req, res) => {
|
||||||
Logger.debug(`[Server] Requesting rss feed episode ${req.params.id}/${req.params.episodeId}`)
|
Logger.debug(`[Server] Requesting rss feed episode ${req.params.slug}/${req.params.episodeId}`)
|
||||||
this.rssFeedManager.getFeedItem(req, res)
|
this.rssFeedManager.getFeedItem(req, res)
|
||||||
})
|
})
|
||||||
|
|
||||||
|
@ -201,7 +201,7 @@ class LibraryController {
|
|||||||
// Step 1 - Filter the retrieved library items
|
// Step 1 - Filter the retrieved library items
|
||||||
let filterSeries = null
|
let filterSeries = null
|
||||||
if (payload.filterBy) {
|
if (payload.filterBy) {
|
||||||
libraryItems = libraryHelpers.getFilteredLibraryItems(libraryItems, payload.filterBy, req.user, this.rssFeedManager.feedsArray)
|
libraryItems = libraryHelpers.getFilteredLibraryItems(libraryItems, payload.filterBy, req.user, Database.feeds)
|
||||||
payload.total = libraryItems.length
|
payload.total = libraryItems.length
|
||||||
|
|
||||||
// Determining if we are filtering titles by a series, and if so, which series
|
// Determining if we are filtering titles by a series, and if so, which series
|
||||||
|
@ -30,7 +30,7 @@ class RSSFeedController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Check that this slug is not being used for another feed (slug will also be the Feed id)
|
// Check that this slug is not being used for another feed (slug will also be the Feed id)
|
||||||
if (this.rssFeedManager.feeds[options.slug]) {
|
if (this.rssFeedManager.findFeedBySlug(options.slug)) {
|
||||||
Logger.error(`[RSSFeedController] Cannot open RSS feed because slug "${options.slug}" is already in use`)
|
Logger.error(`[RSSFeedController] Cannot open RSS feed because slug "${options.slug}" is already in use`)
|
||||||
return res.status(400).send('Slug already in use')
|
return res.status(400).send('Slug already in use')
|
||||||
}
|
}
|
||||||
@ -55,7 +55,7 @@ class RSSFeedController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Check that this slug is not being used for another feed (slug will also be the Feed id)
|
// Check that this slug is not being used for another feed (slug will also be the Feed id)
|
||||||
if (this.rssFeedManager.feeds[options.slug]) {
|
if (this.rssFeedManager.findFeedBySlug(options.slug)) {
|
||||||
Logger.error(`[RSSFeedController] Cannot open RSS feed because slug "${options.slug}" is already in use`)
|
Logger.error(`[RSSFeedController] Cannot open RSS feed because slug "${options.slug}" is already in use`)
|
||||||
return res.status(400).send('Slug already in use')
|
return res.status(400).send('Slug already in use')
|
||||||
}
|
}
|
||||||
@ -89,7 +89,7 @@ class RSSFeedController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Check that this slug is not being used for another feed (slug will also be the Feed id)
|
// Check that this slug is not being used for another feed (slug will also be the Feed id)
|
||||||
if (this.rssFeedManager.feeds[options.slug]) {
|
if (this.rssFeedManager.findFeedBySlug(options.slug)) {
|
||||||
Logger.error(`[RSSFeedController] Cannot open RSS feed because slug "${options.slug}" is already in use`)
|
Logger.error(`[RSSFeedController] Cannot open RSS feed because slug "${options.slug}" is already in use`)
|
||||||
return res.status(400).send('Slug already in use')
|
return res.status(400).send('Slug already in use')
|
||||||
}
|
}
|
||||||
@ -111,10 +111,8 @@ class RSSFeedController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// POST: api/feeds/:id/close
|
// POST: api/feeds/:id/close
|
||||||
async closeRSSFeed(req, res) {
|
closeRSSFeed(req, res) {
|
||||||
await this.rssFeedManager.closeRssFeed(req.params.id)
|
this.rssFeedManager.closeRssFeed(req, res)
|
||||||
|
|
||||||
res.sendStatus(200)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
middleware(req, res, next) {
|
middleware(req, res, next) {
|
||||||
@ -123,14 +121,6 @@ class RSSFeedController {
|
|||||||
return res.sendStatus(403)
|
return res.sendStatus(403)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (req.params.id) {
|
|
||||||
const feed = this.rssFeedManager.findFeed(req.params.id)
|
|
||||||
if (!feed) {
|
|
||||||
Logger.error(`[RSSFeedController] RSS feed not found with id "${req.params.id}"`)
|
|
||||||
return res.sendStatus(404)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
next()
|
next()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -8,13 +8,7 @@ const fs = require('../libs/fsExtra')
|
|||||||
const Feed = require('../objects/Feed')
|
const Feed = require('../objects/Feed')
|
||||||
|
|
||||||
class RssFeedManager {
|
class RssFeedManager {
|
||||||
constructor() {
|
constructor() { }
|
||||||
this.feeds = {}
|
|
||||||
}
|
|
||||||
|
|
||||||
get feedsArray() {
|
|
||||||
return Object.values(this.feeds)
|
|
||||||
}
|
|
||||||
|
|
||||||
validateFeedEntity(feedObj) {
|
validateFeedEntity(feedObj) {
|
||||||
if (feedObj.entityType === 'collection') {
|
if (feedObj.entityType === 'collection') {
|
||||||
@ -42,32 +36,30 @@ class RssFeedManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
async init() {
|
async init() {
|
||||||
const feeds = Database.feeds
|
for (const feed of Database.feeds) {
|
||||||
if (!feeds?.length) return
|
|
||||||
|
|
||||||
for (const feed of feeds) {
|
|
||||||
// Remove invalid feeds
|
// Remove invalid feeds
|
||||||
if (!this.validateFeedEntity(feed)) {
|
if (!this.validateFeedEntity(feed)) {
|
||||||
await Database.removeFeed(feed.id)
|
await Database.removeFeed(feed.id)
|
||||||
}
|
}
|
||||||
|
|
||||||
this.feeds[feed.id] = feed
|
|
||||||
Logger.info(`[RssFeedManager] Opened rss feed ${feed.feedUrl}`)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
findFeedForEntityId(entityId) {
|
findFeedForEntityId(entityId) {
|
||||||
return Object.values(this.feeds).find(feed => feed.entityId === entityId)
|
return Database.feeds.find(feed => feed.entityId === entityId)
|
||||||
}
|
}
|
||||||
|
|
||||||
findFeed(feedId) {
|
findFeedBySlug(slug) {
|
||||||
return this.feeds[feedId] || null
|
return Database.feeds.find(feed => feed.slug === slug)
|
||||||
|
}
|
||||||
|
|
||||||
|
findFeed(id) {
|
||||||
|
return Database.feeds.find(feed => feed.id === id)
|
||||||
}
|
}
|
||||||
|
|
||||||
async getFeed(req, res) {
|
async getFeed(req, res) {
|
||||||
const feed = this.feeds[req.params.id]
|
const feed = this.findFeedBySlug(req.params.slug)
|
||||||
if (!feed) {
|
if (!feed) {
|
||||||
Logger.debug(`[RssFeedManager] Feed not found ${req.params.id}`)
|
Logger.warn(`[RssFeedManager] Feed not found ${req.params.slug}`)
|
||||||
res.sendStatus(404)
|
res.sendStatus(404)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@ -143,9 +135,9 @@ class RssFeedManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
getFeedItem(req, res) {
|
getFeedItem(req, res) {
|
||||||
const feed = this.feeds[req.params.id]
|
const feed = this.findFeedBySlug(req.params.slug)
|
||||||
if (!feed) {
|
if (!feed) {
|
||||||
Logger.debug(`[RssFeedManager] Feed not found ${req.params.id}`)
|
Logger.debug(`[RssFeedManager] Feed not found ${req.params.slug}`)
|
||||||
res.sendStatus(404)
|
res.sendStatus(404)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@ -159,9 +151,9 @@ class RssFeedManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
getFeedCover(req, res) {
|
getFeedCover(req, res) {
|
||||||
const feed = this.feeds[req.params.id]
|
const feed = this.findFeedBySlug(req.params.slug)
|
||||||
if (!feed) {
|
if (!feed) {
|
||||||
Logger.debug(`[RssFeedManager] Feed not found ${req.params.id}`)
|
Logger.debug(`[RssFeedManager] Feed not found ${req.params.slug}`)
|
||||||
res.sendStatus(404)
|
res.sendStatus(404)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@ -186,9 +178,8 @@ class RssFeedManager {
|
|||||||
|
|
||||||
const feed = new Feed()
|
const feed = new Feed()
|
||||||
feed.setFromItem(user.id, slug, libraryItem, serverAddress, preventIndexing, ownerName, ownerEmail)
|
feed.setFromItem(user.id, slug, libraryItem, serverAddress, preventIndexing, ownerName, ownerEmail)
|
||||||
this.feeds[feed.id] = feed
|
|
||||||
|
|
||||||
Logger.debug(`[RssFeedManager] Opened RSS feed "${feed.feedUrl}"`)
|
Logger.info(`[RssFeedManager] Opened RSS feed "${feed.feedUrl}"`)
|
||||||
await Database.createFeed(feed)
|
await Database.createFeed(feed)
|
||||||
SocketAuthority.emitter('rss_feed_open', feed.toJSONMinified())
|
SocketAuthority.emitter('rss_feed_open', feed.toJSONMinified())
|
||||||
return feed
|
return feed
|
||||||
@ -203,9 +194,8 @@ class RssFeedManager {
|
|||||||
|
|
||||||
const feed = new Feed()
|
const feed = new Feed()
|
||||||
feed.setFromCollection(user.id, slug, collectionExpanded, serverAddress, preventIndexing, ownerName, ownerEmail)
|
feed.setFromCollection(user.id, slug, collectionExpanded, serverAddress, preventIndexing, ownerName, ownerEmail)
|
||||||
this.feeds[feed.id] = feed
|
|
||||||
|
|
||||||
Logger.debug(`[RssFeedManager] Opened RSS feed "${feed.feedUrl}"`)
|
Logger.info(`[RssFeedManager] Opened RSS feed "${feed.feedUrl}"`)
|
||||||
await Database.createFeed(feed)
|
await Database.createFeed(feed)
|
||||||
SocketAuthority.emitter('rss_feed_open', feed.toJSONMinified())
|
SocketAuthority.emitter('rss_feed_open', feed.toJSONMinified())
|
||||||
return feed
|
return feed
|
||||||
@ -220,9 +210,8 @@ class RssFeedManager {
|
|||||||
|
|
||||||
const feed = new Feed()
|
const feed = new Feed()
|
||||||
feed.setFromSeries(user.id, slug, seriesExpanded, serverAddress, preventIndexing, ownerName, ownerEmail)
|
feed.setFromSeries(user.id, slug, seriesExpanded, serverAddress, preventIndexing, ownerName, ownerEmail)
|
||||||
this.feeds[feed.id] = feed
|
|
||||||
|
|
||||||
Logger.debug(`[RssFeedManager] Opened RSS feed "${feed.feedUrl}"`)
|
Logger.info(`[RssFeedManager] Opened RSS feed "${feed.feedUrl}"`)
|
||||||
await Database.createFeed(feed)
|
await Database.createFeed(feed)
|
||||||
SocketAuthority.emitter('rss_feed_open', feed.toJSONMinified())
|
SocketAuthority.emitter('rss_feed_open', feed.toJSONMinified())
|
||||||
return feed
|
return feed
|
||||||
@ -232,13 +221,17 @@ class RssFeedManager {
|
|||||||
if (!feed) return
|
if (!feed) return
|
||||||
await Database.removeFeed(feed.id)
|
await Database.removeFeed(feed.id)
|
||||||
SocketAuthority.emitter('rss_feed_closed', feed.toJSONMinified())
|
SocketAuthority.emitter('rss_feed_closed', feed.toJSONMinified())
|
||||||
delete this.feeds[feed.id]
|
|
||||||
Logger.info(`[RssFeedManager] Closed RSS feed "${feed.feedUrl}"`)
|
Logger.info(`[RssFeedManager] Closed RSS feed "${feed.feedUrl}"`)
|
||||||
}
|
}
|
||||||
|
|
||||||
closeRssFeed(id) {
|
async closeRssFeed(req, res) {
|
||||||
if (!this.feeds[id]) return
|
const feed = this.findFeed(req.params.id)
|
||||||
return this.handleCloseFeed(this.feeds[id])
|
if (!feed) {
|
||||||
|
Logger.error(`[RssFeedManager] RSS feed not found with id "${req.params.id}"`)
|
||||||
|
return res.sendStatus(404)
|
||||||
|
}
|
||||||
|
await this.handleCloseFeed(feed)
|
||||||
|
res.sendStatus(200)
|
||||||
}
|
}
|
||||||
|
|
||||||
closeFeedForEntityId(entityId) {
|
closeFeedForEntityId(entityId) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user