mirror of
https://github.com/advplyr/audiobookshelf.git
synced 2025-01-02 12:09:11 +01:00
Fix:Update library item RSS feed if item was updated #939
This commit is contained in:
parent
40e999fcae
commit
575ec9d00b
@ -30,7 +30,7 @@ class RssFeedManager {
|
|||||||
return Object.values(this.feeds).find(feed => feed.entityId === libraryItemId)
|
return Object.values(this.feeds).find(feed => feed.entityId === libraryItemId)
|
||||||
}
|
}
|
||||||
|
|
||||||
getFeed(req, res) {
|
async getFeed(req, res) {
|
||||||
var feed = this.feeds[req.params.id]
|
var feed = this.feeds[req.params.id]
|
||||||
if (!feed) {
|
if (!feed) {
|
||||||
Logger.error(`[RssFeedManager] Feed not found ${req.params.id}`)
|
Logger.error(`[RssFeedManager] Feed not found ${req.params.id}`)
|
||||||
@ -38,6 +38,15 @@ class RssFeedManager {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (feed.entityType === 'item') {
|
||||||
|
const libraryItem = this.db.getLibraryItem(feed.entityId)
|
||||||
|
if (libraryItem && (!feed.entityUpdatedAt || libraryItem.updatedAt > feed.entityUpdatedAt)) {
|
||||||
|
Logger.debug(`[RssFeedManager] Updating RSS feed for item ${libraryItem.id} "${libraryItem.media.metadata.title}"`)
|
||||||
|
feed.updateFromItem(libraryItem)
|
||||||
|
await this.db.updateEntity('feed', feed)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
var xml = feed.buildXml()
|
var xml = feed.buildXml()
|
||||||
res.set('Content-Type', 'text/xml')
|
res.set('Content-Type', 'text/xml')
|
||||||
res.send(xml)
|
res.send(xml)
|
||||||
|
@ -9,6 +9,7 @@ class Feed {
|
|||||||
this.userId = null
|
this.userId = null
|
||||||
this.entityType = null
|
this.entityType = null
|
||||||
this.entityId = null
|
this.entityId = null
|
||||||
|
this.entityUpdatedAt = null
|
||||||
|
|
||||||
this.coverPath = null
|
this.coverPath = null
|
||||||
this.serverAddress = null
|
this.serverAddress = null
|
||||||
@ -79,6 +80,7 @@ class Feed {
|
|||||||
this.userId = userId
|
this.userId = userId
|
||||||
this.entityType = 'item'
|
this.entityType = 'item'
|
||||||
this.entityId = libraryItem.id
|
this.entityId = libraryItem.id
|
||||||
|
this.entityUpdatedAt = libraryItem.updatedAt
|
||||||
this.coverPath = media.coverPath || null
|
this.coverPath = media.coverPath || null
|
||||||
this.serverAddress = serverAddress
|
this.serverAddress = serverAddress
|
||||||
this.feedUrl = feedUrl
|
this.feedUrl = feedUrl
|
||||||
@ -111,6 +113,39 @@ class Feed {
|
|||||||
this.updatedAt = Date.now()
|
this.updatedAt = Date.now()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
updateFromItem(libraryItem) {
|
||||||
|
const media = libraryItem.media
|
||||||
|
const mediaMetadata = media.metadata
|
||||||
|
const isPodcast = libraryItem.mediaType === 'podcast'
|
||||||
|
const author = isPodcast ? mediaMetadata.author : mediaMetadata.authorName
|
||||||
|
|
||||||
|
this.entityUpdatedAt = libraryItem.updatedAt
|
||||||
|
|
||||||
|
this.meta.title = mediaMetadata.title
|
||||||
|
this.meta.description = mediaMetadata.description
|
||||||
|
this.meta.author = author
|
||||||
|
this.meta.imageUrl = media.coverPath ? `${this.serverAddress}/feed/${this.slug}/cover` : `${this.serverAddress}/Logo.png`
|
||||||
|
this.meta.explicit = !!mediaMetadata.explicit
|
||||||
|
|
||||||
|
this.episodes = []
|
||||||
|
if (isPodcast) { // PODCAST EPISODES
|
||||||
|
media.episodes.forEach((episode) => {
|
||||||
|
var feedEpisode = new FeedEpisode()
|
||||||
|
feedEpisode.setFromPodcastEpisode(libraryItem, this.serverAddress, this.slug, episode, this.meta)
|
||||||
|
this.episodes.push(feedEpisode)
|
||||||
|
})
|
||||||
|
} else { // AUDIOBOOK EPISODES
|
||||||
|
media.tracks.forEach((audioTrack) => {
|
||||||
|
var feedEpisode = new FeedEpisode()
|
||||||
|
feedEpisode.setFromAudiobookTrack(libraryItem, this.serverAddress, this.slug, audioTrack, this.meta)
|
||||||
|
this.episodes.push(feedEpisode)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
this.updatedAt = Date.now()
|
||||||
|
this.xml = null
|
||||||
|
}
|
||||||
|
|
||||||
buildXml() {
|
buildXml() {
|
||||||
if (this.xml) return this.xml
|
if (this.xml) return this.xml
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user