mirror of
https://github.com/advplyr/audiobookshelf.git
synced 2025-08-02 01:05:25 +02:00
Add:Experimental generate podcast RSS feed #553
This commit is contained in:
parent
8b38dda229
commit
678dceefed
7 changed files with 208 additions and 12 deletions
|
@ -5,11 +5,16 @@ const Logger = require('../Logger')
|
|||
|
||||
// Not functional at the moment
|
||||
class RssFeedManager {
|
||||
constructor(db) {
|
||||
constructor(db, emitter) {
|
||||
this.db = db
|
||||
this.emitter = emitter
|
||||
this.feeds = {}
|
||||
}
|
||||
|
||||
findFeedForItem(libraryItemId) {
|
||||
return Object.values(this.feeds).find(feed => feed.libraryItemId === libraryItemId)
|
||||
}
|
||||
|
||||
getFeed(req, res) {
|
||||
var feedData = this.feeds[req.params.id]
|
||||
if (!feedData) {
|
||||
|
@ -34,7 +39,26 @@ class RssFeedManager {
|
|||
res.sendFile(fullPath)
|
||||
}
|
||||
|
||||
openFeed(feedId, libraryItem, serverAddress) {
|
||||
getFeedCover(req, res) {
|
||||
var feedData = this.feeds[req.params.id]
|
||||
if (!feedData) {
|
||||
Logger.error(`[RssFeedManager] Feed not found ${req.params.id}`)
|
||||
res.sendStatus(404)
|
||||
return
|
||||
}
|
||||
|
||||
if (!feedData.mediaCoverPath) {
|
||||
res.sendStatus(404)
|
||||
return
|
||||
}
|
||||
|
||||
const extname = Path.extname(feedData.mediaCoverPath).toLowerCase().slice(1)
|
||||
res.type(`image/${extname}`)
|
||||
var readStream = fs.createReadStream(feedData.mediaCoverPath)
|
||||
readStream.pipe(res)
|
||||
}
|
||||
|
||||
openFeed(userId, feedId, libraryItem, serverAddress) {
|
||||
const podcast = libraryItem.media
|
||||
|
||||
const feedUrl = `${serverAddress}/feed/${feedId}`
|
||||
|
@ -43,7 +67,8 @@ class RssFeedManager {
|
|||
title: podcast.metadata.title,
|
||||
description: podcast.metadata.description,
|
||||
feedUrl,
|
||||
imageUrl: `${serverAddress}/Logo.png`,
|
||||
siteUrl: serverAddress,
|
||||
imageUrl: podcast.coverPath ? `${serverAddress}/feed/${feedId}/cover` : `${serverAddress}/Logo.png`,
|
||||
author: podcast.metadata.author || 'advplyr',
|
||||
language: 'en'
|
||||
})
|
||||
|
@ -59,6 +84,7 @@ class RssFeedManager {
|
|||
type: episode.audioTrack.mimeType,
|
||||
size: episode.size
|
||||
},
|
||||
date: episode.pubDate || '',
|
||||
url: `${serverAddress}${contentUrl}`,
|
||||
author: podcast.metadata.author || 'advplyr'
|
||||
})
|
||||
|
@ -66,8 +92,10 @@ class RssFeedManager {
|
|||
|
||||
const feedData = {
|
||||
id: feedId,
|
||||
userId,
|
||||
libraryItemId: libraryItem.id,
|
||||
libraryItemPath: libraryItem.path,
|
||||
mediaCoverPath: podcast.coverPath,
|
||||
serverAddress: serverAddress,
|
||||
feedUrl,
|
||||
feed
|
||||
|
@ -79,9 +107,24 @@ class RssFeedManager {
|
|||
openPodcastFeed(user, libraryItem, options) {
|
||||
const serverAddress = options.serverAddress
|
||||
const feedId = getId('feed')
|
||||
const feedData = this.openFeed(feedId, libraryItem, serverAddress)
|
||||
const feedData = this.openFeed(user.id, feedId, libraryItem, serverAddress)
|
||||
Logger.debug(`[RssFeedManager] Opened podcast feed ${feedData.feedUrl}`)
|
||||
this.emitter('rss_feed_open', { libraryItemId: libraryItem.id, feedUrl: feedData.feedUrl })
|
||||
return feedData
|
||||
}
|
||||
|
||||
closePodcastFeedForItem(libraryItemId) {
|
||||
var feed = this.findFeedForItem(libraryItemId)
|
||||
if (!feed) return
|
||||
this.closeRssFeed(feed.id)
|
||||
}
|
||||
|
||||
closeRssFeed(id) {
|
||||
if (!this.feeds[id]) return
|
||||
var feedData = this.feeds[id]
|
||||
this.emitter('rss_feed_closed', { libraryItemId: feedData.libraryItemId, feedUrl: feedData.feedUrl })
|
||||
delete this.feeds[id]
|
||||
Logger.info(`[RssFeedManager] Closed RSS feed "${feedData.feedUrl}"`)
|
||||
}
|
||||
}
|
||||
module.exports = RssFeedManager
|
Loading…
Add table
Add a link
Reference in a new issue