class FeedMeta { constructor(meta) { this.title = null this.description = null this.author = null this.imageUrl = null this.feedUrl = null this.link = null this.explicit = null this.type = null this.language = null this.preventIndexing = null this.ownerName = null this.ownerEmail = null if (meta) { this.construct(meta) } } construct(meta) { this.title = meta.title this.description = meta.description this.author = meta.author this.imageUrl = meta.imageUrl this.feedUrl = meta.feedUrl this.link = meta.link 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() { return { title: this.title, description: this.description, author: this.author, imageUrl: this.imageUrl, feedUrl: this.feedUrl, link: this.link, explicit: this.explicit, type: this.type, 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 } } getRSSData() { const blockTags = [ { 'itunes:block': 'yes' }, { 'googleplay:block': 'yes' } ] return { title: this.title, description: this.description || '', generator: 'Audiobookshelf', feed_url: this.feedUrl, site_url: this.link, image_url: this.imageUrl, 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', 'googleplay': 'http://www.google.com/schemas/play-podcasts/1.0' }, custom_elements: [ { 'language': this.language || 'en' }, { 'author': this.author || 'advplyr' }, { 'itunes:author': this.author || 'advplyr' }, { 'itunes:summary': this.description || '' }, { 'itunes:type': this.type }, { 'itunes:image': { _attr: { href: this.imageUrl } } }, { 'itunes:owner': [ { 'itunes:name': this.ownerName || this.author || '' }, { 'itunes:email': this.ownerEmail || '' } ] }, { 'itunes:explicit': !!this.explicit }, ...(this.preventIndexing ? blockTags : []) ] } } } module.exports = FeedMeta