Add rss details configuration

This commit is contained in:
mfcar 2023-02-25 13:20:26 +00:00
parent d7b287bfed
commit 0d3e6b1d0a
No known key found for this signature in database
15 changed files with 211 additions and 19 deletions

View file

@ -18,7 +18,7 @@ class RSSFeedController {
}
// Check request body options exist
if (!options.serverAddress || !options.slug) {
if (!options.serverAddress || !options.slug || options.metadataDetails == null) {
Logger.error(`[RSSFeedController] Invalid request body to open RSS feed`)
return res.status(400).send('Invalid request body')
}
@ -49,7 +49,7 @@ class RSSFeedController {
if (!collection) return res.sendStatus(404)
// Check request body options exist
if (!options.serverAddress || !options.slug) {
if (!options.serverAddress || !options.slug || options.metadataDetails == null) {
Logger.error(`[RSSFeedController] Invalid request body to open RSS feed`)
return res.status(400).send('Invalid request body')
}
@ -83,7 +83,7 @@ class RSSFeedController {
if (!series) return res.sendStatus(404)
// Check request body options exist
if (!options.serverAddress || !options.slug) {
if (!options.serverAddress || !options.slug || options.metadataDetails == null) {
Logger.error(`[RSSFeedController] Invalid request body to open RSS feed`)
return res.status(400).send('Invalid request body')
}
@ -134,4 +134,4 @@ class RSSFeedController {
next()
}
}
module.exports = new RSSFeedController()
module.exports = new RSSFeedController()

View file

@ -188,9 +188,12 @@ class RssFeedManager {
async openFeedForItem(user, libraryItem, options) {
const serverAddress = options.serverAddress
const slug = options.slug
const preventIndexing = options.metadataDetails.preventIndexing
const ownerName = options.metadataDetails.ownerName
const ownerEmail = options.metadataDetails.ownerEmail
const feed = new Feed()
feed.setFromItem(user.id, slug, libraryItem, serverAddress)
feed.setFromItem(user.id, slug, libraryItem, serverAddress, preventIndexing, ownerName, ownerEmail)
this.feeds[feed.id] = feed
Logger.debug(`[RssFeedManager] Opened RSS feed "${feed.feedUrl}"`)
@ -202,9 +205,12 @@ class RssFeedManager {
async openFeedForCollection(user, collectionExpanded, options) {
const serverAddress = options.serverAddress
const slug = options.slug
const preventIndexing = options.metadataDetails.preventIndexing
const ownerName = options.metadataDetails.ownerName
const ownerEmail = options.metadataDetails.ownerEmail
const feed = new Feed()
feed.setFromCollection(user.id, slug, collectionExpanded, serverAddress)
feed.setFromCollection(user.id, slug, collectionExpanded, serverAddress, preventIndexing, ownerName, ownerEmail)
this.feeds[feed.id] = feed
Logger.debug(`[RssFeedManager] Opened RSS feed "${feed.feedUrl}"`)
@ -216,9 +222,12 @@ class RssFeedManager {
async openFeedForSeries(user, seriesExpanded, options) {
const serverAddress = options.serverAddress
const slug = options.slug
const preventIndexing = options.metadataDetails.preventIndexing
const ownerName = options.metadataDetails.ownerName
const ownerEmail = options.metadataDetails.ownerEmail
const feed = new Feed()
feed.setFromSeries(user.id, slug, seriesExpanded, serverAddress)
feed.setFromSeries(user.id, slug, seriesExpanded, serverAddress, preventIndexing, ownerName, ownerEmail)
this.feeds[feed.id] = feed
Logger.debug(`[RssFeedManager] Opened RSS feed "${feed.feedUrl}"`)
@ -246,4 +255,4 @@ class RssFeedManager {
return this.handleCloseFeed(feed)
}
}
module.exports = RssFeedManager
module.exports = RssFeedManager

View file

@ -70,7 +70,8 @@ class Feed {
id: this.id,
entityType: this.entityType,
entityId: this.entityId,
feedUrl: this.feedUrl
feedUrl: this.feedUrl,
meta: this.meta.toJSONMinified(),
}
}
@ -80,7 +81,7 @@ class Feed {
return episode.fullPath
}
setFromItem(userId, slug, libraryItem, serverAddress) {
setFromItem(userId, slug, libraryItem, serverAddress, preventIndexing = true, ownerName = null, ownerEmail = null) {
const media = libraryItem.media
const mediaMetadata = media.metadata
const isPodcast = libraryItem.mediaType === 'podcast'
@ -108,6 +109,9 @@ class Feed {
this.meta.explicit = !!mediaMetadata.explicit
this.meta.type = mediaMetadata.type
this.meta.language = mediaMetadata.language
this.meta.preventIndexing = preventIndexing
this.meta.ownerName = ownerName
this.meta.ownerEmail = ownerEmail
this.episodes = []
if (isPodcast) { // PODCAST EPISODES

View file

@ -9,6 +9,9 @@ class FeedMeta {
this.explicit = null
this.type = null
this.language = null
this.preventIndexing = null
this.ownerName = null
this.ownerEmail = null
if (meta) {
this.construct(meta)
@ -25,6 +28,9 @@ class FeedMeta {
this.explicit = meta.explicit
this.type = meta.type
this.language = meta.language
this.preventIndexing = meta.preventIndexing
this.ownerName = meta.ownerName
this.ownerEmail = meta.ownerEmail
}
toJSON() {
@ -37,7 +43,20 @@ class FeedMeta {
link: this.link,
explicit: this.explicit,
type: this.type,
language: this.language
language: this.language,
preventIndexing: this.preventIndexing,
ownerName: this.ownerName,
ownerEmail: this.ownerEmail
}
}
toJSONMinified() {
return {
title: this.title,
description: this.description,
preventIndexing: this.preventIndexing,
ownerName: this.ownerName,
ownerEmail: this.ownerEmail
}
}
@ -52,7 +71,8 @@ class FeedMeta {
custom_namespaces: {
'itunes': 'http://www.itunes.com/dtds/podcast-1.0.dtd',
'psc': 'http://podlove.org/simple-chapters',
'podcast': 'https://podcastindex.org/namespace/1.0'
'podcast': 'https://podcastindex.org/namespace/1.0',
'googleplay': 'http://www.google.com/schemas/play-podcasts/1.0'
},
custom_elements: [
{ 'language': this.language || 'en' },
@ -69,13 +89,13 @@ class FeedMeta {
},
{
'itunes:owner': [
{ 'itunes:name': this.author || '' },
{ 'itunes:email': '' }
{ 'itunes:name': this.ownerName || this.author || '' },
{ 'itunes:email': this.ownerEmail || '' }
]
},
{
"itunes:explicit": !!this.explicit
}
{ 'itunes:explicit': !!this.explicit },
{ 'itunes:block': !!this.preventIndexing },
{ 'googleplay:block': !!this.preventIndexing }
]
}
}