From 0d3e6b1d0aa72c2815a7f6e599a4041765424e25 Mon Sep 17 00:00:00 2001 From: mfcar Date: Sat, 25 Feb 2023 13:20:26 +0000 Subject: [PATCH] Add rss details configuration --- .../modals/rssfeed/OpenCloseModal.vue | 26 +++++- .../widgets/RssFeedMetadataBuilder.vue | 92 +++++++++++++++++++ client/strings/de.json | 5 + client/strings/en-us.json | 5 + client/strings/es.json | 5 + client/strings/fr.json | 5 + client/strings/hr.json | 5 + client/strings/it.json | 5 + client/strings/pl.json | 5 + client/strings/ru.json | 5 + client/strings/zh-cn.json | 5 + server/controllers/RSSFeedController.js | 8 +- server/managers/RssFeedManager.js | 17 +++- server/objects/Feed.js | 8 +- server/objects/FeedMeta.js | 34 +++++-- 15 files changed, 211 insertions(+), 19 deletions(-) create mode 100644 client/components/widgets/RssFeedMetadataBuilder.vue diff --git a/client/components/modals/rssfeed/OpenCloseModal.vue b/client/components/modals/rssfeed/OpenCloseModal.vue index 576bb4d7..e50e2bca 100644 --- a/client/components/modals/rssfeed/OpenCloseModal.vue +++ b/client/components/modals/rssfeed/OpenCloseModal.vue @@ -14,6 +14,21 @@ content_copy + +
+
+
{{ $strings.LabelRssFeedPreventIndexing }}
+
{{ currentFeed.meta.preventIndexing ? 'Yes' : 'No' }}
+
+
+
{{ $strings.LabelRssFeedCustomOwnerName }}
+
{{ currentFeed.meta.ownerName }}
+
+
+
{{ $strings.LabelRssFeedCustomOwnerEmail }}
+
{{ currentFeed.meta.ownerEmail }}
+
+

{{ $strings.HeaderOpenRSSFeed }}

@@ -22,6 +37,7 @@

{{ $getString('MessageFeedURLWillBe', [demoFeedUrl]) }}

+

{{ $strings.NoteRSSFeedPodcastAppsHttps }}

{{ $strings.NoteRSSFeedPodcastAppsPubDate }}

@@ -41,7 +57,12 @@ export default { return { processing: false, newFeedSlug: null, - currentFeed: null + currentFeed: null, + metadataDetails: { + preventIndexing: true, + ownerName: '', + ownerEmail: '' + }, } }, watch: { @@ -107,7 +128,8 @@ export default { const payload = { serverAddress: window.origin, - slug: this.newFeedSlug + slug: this.newFeedSlug, + metadataDetails: this.metadataDetails } if (this.$isDev) payload.serverAddress = `http://localhost:3333${this.$config.routerBasePath}` diff --git a/client/components/widgets/RssFeedMetadataBuilder.vue b/client/components/widgets/RssFeedMetadataBuilder.vue new file mode 100644 index 00000000..93a114ab --- /dev/null +++ b/client/components/widgets/RssFeedMetadataBuilder.vue @@ -0,0 +1,92 @@ + + + diff --git a/client/strings/de.json b/client/strings/de.json index 62c22aa3..0dfdac31 100644 --- a/client/strings/de.json +++ b/client/strings/de.json @@ -127,6 +127,7 @@ "HeaderRemoveEpisode": "Episode löschen", "HeaderRemoveEpisodes": "Lösche {0} Episoden", "HeaderRSSFeedIsOpen": "RSS-Feed ist geöffnet", + "HeaderRSSFeedGeneral": "RSS Detailss", "HeaderSavedMediaProgress": "Gespeicherte Hörfortschritte", "HeaderSchedule": "Zeitplan", "HeaderScheduleLibraryScans": "Automatische Bibliotheksscans", @@ -304,6 +305,7 @@ "LabelPodcasts": "Podcasts", "LabelPodcastType": "Podcast Type", "LabelPrefixesToIgnore": "Zu ignorierende(s) Vorwort(e) (Groß- und Kleinschreibung wird nicht berücksichtigt)", + "LabelPreventIndexing": "Prevent your feed from being indexed by iTunes and Google podcast directories", "LabelProgress": "Fortschritt", "LabelProvider": "Anbieter", "LabelPubDate": "Veröffentlichungsdatum", @@ -318,6 +320,9 @@ "LabelRSSFeedOpen": "RSS Feed Offen", "LabelRSSFeedSlug": "RSS Feed Schlagwort", "LabelRSSFeedURL": "RSS Feed URL", + "LabelRssFeedCustomOwnerName": "Custom owner Name", + "LabelRssFeedCustomOwnerEmail": "Custom owner Email", + "LabelRssFeedPreventIndexing": "Prevent Indexing", "LabelSearchTerm": "Begriff suchen", "LabelSearchTitle": "Titel", "LabelSearchTitleOrASIN": "Titel oder ASIN", diff --git a/client/strings/en-us.json b/client/strings/en-us.json index d8ab94c2..29efde63 100644 --- a/client/strings/en-us.json +++ b/client/strings/en-us.json @@ -127,6 +127,7 @@ "HeaderRemoveEpisode": "Remove Episode", "HeaderRemoveEpisodes": "Remove {0} Episodes", "HeaderRSSFeedIsOpen": "RSS Feed is Open", + "HeaderRSSFeedGeneral": "RSS Detailss", "HeaderSavedMediaProgress": "Saved Media Progress", "HeaderSchedule": "Schedule", "HeaderScheduleLibraryScans": "Schedule Automatic Library Scans", @@ -304,6 +305,7 @@ "LabelPodcasts": "Podcasts", "LabelPodcastType": "Podcast Type", "LabelPrefixesToIgnore": "Prefixes to Ignore (case insensitive)", + "LabelPreventIndexing": "Prevent your feed from being indexed by iTunes and Google podcast directories", "LabelProgress": "Progress", "LabelProvider": "Provider", "LabelPubDate": "Pub Date", @@ -318,6 +320,9 @@ "LabelRSSFeedOpen": "RSS Feed Open", "LabelRSSFeedSlug": "RSS Feed Slug", "LabelRSSFeedURL": "RSS Feed URL", + "LabelRssFeedCustomOwnerName": "Custom owner Name", + "LabelRssFeedCustomOwnerEmail": "Custom owner Email", + "LabelRssFeedPreventIndexing": "Prevent Indexing", "LabelSearchTerm": "Search Term", "LabelSearchTitle": "Search Title", "LabelSearchTitleOrASIN": "Search Title or ASIN", diff --git a/client/strings/es.json b/client/strings/es.json index d8ab94c2..710d5ef8 100644 --- a/client/strings/es.json +++ b/client/strings/es.json @@ -127,6 +127,7 @@ "HeaderRemoveEpisode": "Remove Episode", "HeaderRemoveEpisodes": "Remove {0} Episodes", "HeaderRSSFeedIsOpen": "RSS Feed is Open", + "HeaderRSSFeedGeneral": "RSS Details", "HeaderSavedMediaProgress": "Saved Media Progress", "HeaderSchedule": "Schedule", "HeaderScheduleLibraryScans": "Schedule Automatic Library Scans", @@ -304,6 +305,7 @@ "LabelPodcasts": "Podcasts", "LabelPodcastType": "Podcast Type", "LabelPrefixesToIgnore": "Prefixes to Ignore (case insensitive)", + "LabelPreventIndexing": "Prevent your feed from being indexed by iTunes and Google podcast directories", "LabelProgress": "Progress", "LabelProvider": "Provider", "LabelPubDate": "Pub Date", @@ -318,6 +320,9 @@ "LabelRSSFeedOpen": "RSS Feed Open", "LabelRSSFeedSlug": "RSS Feed Slug", "LabelRSSFeedURL": "RSS Feed URL", + "LabelRssFeedCustomOwnerName": "Custom owner Name", + "LabelRssFeedCustomOwnerEmail": "Custom owner Email", + "LabelRssFeedPreventIndexing": "Prevent Indexing", "LabelSearchTerm": "Search Term", "LabelSearchTitle": "Search Title", "LabelSearchTitleOrASIN": "Search Title or ASIN", diff --git a/client/strings/fr.json b/client/strings/fr.json index 5f0b1f3c..447330eb 100644 --- a/client/strings/fr.json +++ b/client/strings/fr.json @@ -127,6 +127,7 @@ "HeaderRemoveEpisode": "Supprimer l'épisode", "HeaderRemoveEpisodes": "Suppression de {0} épisodes", "HeaderRSSFeedIsOpen": "Le Flux RSS est actif", + "HeaderRSSFeedGeneral": "RSS Detailss", "HeaderSavedMediaProgress": "Progression de la sauvegarde des médias", "HeaderSchedule": "Programmation", "HeaderScheduleLibraryScans": "Analyse automatique de la bibliothèque", @@ -304,6 +305,7 @@ "LabelPodcasts": "Podcasts", "LabelPodcastType": "Podcast Type", "LabelPrefixesToIgnore": "Préfixes à Ignorer (Insensible à la Casse)", + "LabelPreventIndexing": "Prevent your feed from being indexed by iTunes and Google podcast directories", "LabelProgress": "Progression", "LabelProvider": "Fournisseur", "LabelPubDate": "Date de publication", @@ -318,6 +320,9 @@ "LabelRSSFeedOpen": "Flux RSS ouvert", "LabelRSSFeedSlug": "Identificateur d'adresse du Flux RSS ", "LabelRSSFeedURL": "Adresse du flux RSS", + "LabelRssFeedCustomOwnerName": "Custom owner Name", + "LabelRssFeedCustomOwnerEmail": "Custom owner Email", + "LabelRssFeedPreventIndexing": "Prevent Indexing", "LabelSearchTerm": "Terme de recherche", "LabelSearchTitle": "Titre de recherche", "LabelSearchTitleOrASIN": "Recherche du titre ou ASIN", diff --git a/client/strings/hr.json b/client/strings/hr.json index 9b7b4edb..c41645b9 100644 --- a/client/strings/hr.json +++ b/client/strings/hr.json @@ -127,6 +127,7 @@ "HeaderRemoveEpisode": "Ukloni epizodu", "HeaderRemoveEpisodes": "Ukloni {0} epizoda/-e", "HeaderRSSFeedIsOpen": "RSS Feed je otvoren", + "HeaderRSSFeedGeneral": "RSS Detailss", "HeaderSavedMediaProgress": "Spremljen Media Progress", "HeaderSchedule": "Schedule", "HeaderScheduleLibraryScans": "Zakaži automatsko skeniranje biblioteke", @@ -304,6 +305,7 @@ "LabelPodcasts": "Podcasts", "LabelPodcastType": "Podcast Type", "LabelPrefixesToIgnore": "Prefiksi za ignorirati (mala i velika slova nisu bitna)", + "LabelPreventIndexing": "Prevent your feed from being indexed by iTunes and Google podcast directories", "LabelProgress": "Napredak", "LabelProvider": "Dobavljač", "LabelPubDate": "Datam izdavanja", @@ -318,6 +320,9 @@ "LabelRSSFeedOpen": "RSS Feed Open", "LabelRSSFeedSlug": "RSS Feed Slug", "LabelRSSFeedURL": "RSS Feed URL", + "LabelRssFeedCustomOwnerName": "Custom owner Name", + "LabelRssFeedCustomOwnerEmail": "Custom owner Email", + "LabelRssFeedPreventIndexing": "Prevent Indexing", "LabelSearchTerm": "Traži pojam", "LabelSearchTitle": "Traži naslov", "LabelSearchTitleOrASIN": "Traži naslov ili ASIN", diff --git a/client/strings/it.json b/client/strings/it.json index 9aa3a7b0..9d3c7145 100644 --- a/client/strings/it.json +++ b/client/strings/it.json @@ -127,6 +127,7 @@ "HeaderRemoveEpisode": "Rimuovi Episodi", "HeaderRemoveEpisodes": "Rimuovi {0} Episodi", "HeaderRSSFeedIsOpen": "RSS Feed è aperto", + "HeaderRSSFeedGeneral": "RSS Detailss", "HeaderSavedMediaProgress": "Progressi salvati", "HeaderSchedule": "Schedula", "HeaderScheduleLibraryScans": "Schedula la scansione della libreria", @@ -304,6 +305,7 @@ "LabelPodcasts": "Podcasts", "LabelPodcastType": "Podcast Type", "LabelPrefixesToIgnore": "Suffissi da ignorare (specificando maiuscole e minuscole)", + "LabelPreventIndexing": "Prevent your feed from being indexed by iTunes and Google podcast directories", "LabelProgress": "Cominciati", "LabelProvider": "Provider", "LabelPubDate": "Data Pubblicazione", @@ -318,6 +320,9 @@ "LabelRSSFeedOpen": "RSS Feed Aperto", "LabelRSSFeedSlug": "RSS Feed Slug", "LabelRSSFeedURL": "RSS Feed URL", + "LabelRssFeedCustomOwnerName": "Custom owner Name", + "LabelRssFeedCustomOwnerEmail": "Custom owner Email", + "LabelRssFeedPreventIndexing": "Prevent Indexing", "LabelSearchTerm": "Ricerca", "LabelSearchTitle": "Cerca Titolo", "LabelSearchTitleOrASIN": "Cerca titolo o ASIN", diff --git a/client/strings/pl.json b/client/strings/pl.json index 50576dd0..ab152a4f 100644 --- a/client/strings/pl.json +++ b/client/strings/pl.json @@ -127,6 +127,7 @@ "HeaderRemoveEpisode": "Usuń odcinek", "HeaderRemoveEpisodes": "Usuń {0} odcinków", "HeaderRSSFeedIsOpen": "Kanał RSS jest otwarty", + "HeaderRSSFeedGeneral": "RSS Detailss", "HeaderSavedMediaProgress": "Zapisany postęp", "HeaderSchedule": "Harmonogram", "HeaderScheduleLibraryScans": "Zaplanuj automatyczne skanowanie biblioteki", @@ -304,6 +305,7 @@ "LabelPodcasts": "Podcasty", "LabelPodcastType": "Podcast Type", "LabelPrefixesToIgnore": "Ignorowane prefiksy (wielkość liter nie ma znaczenia)", + "LabelPreventIndexing": "Prevent your feed from being indexed by iTunes and Google podcast directories", "LabelProgress": "Postęp", "LabelProvider": "Dostawca", "LabelPubDate": "Data publikacji", @@ -318,6 +320,9 @@ "LabelRSSFeedOpen": "RSS Feed otwarty", "LabelRSSFeedSlug": "RSS Feed Slug", "LabelRSSFeedURL": "URL kanały RSS", + "LabelRssFeedCustomOwnerName": "Custom owner Name", + "LabelRssFeedCustomOwnerEmail": "Custom owner Email", + "LabelRssFeedPreventIndexing": "Prevent Indexing", "LabelSearchTerm": "Wyszukiwanie frazy", "LabelSearchTitle": "Wyszukaj tytuł", "LabelSearchTitleOrASIN": "Szukaj tytuł lub ASIN", diff --git a/client/strings/ru.json b/client/strings/ru.json index ca398672..fa45363b 100644 --- a/client/strings/ru.json +++ b/client/strings/ru.json @@ -127,6 +127,7 @@ "HeaderRemoveEpisode": "Удалить Эпизод", "HeaderRemoveEpisodes": "Удалить {0} Эпизодов", "HeaderRSSFeedIsOpen": "RSS-канал Открыт", + "HeaderRSSFeedGeneral": "RSS Detailss", "HeaderSavedMediaProgress": "Прогресс Медиа Сохранен", "HeaderSchedule": "Планировщик", "HeaderScheduleLibraryScans": "Планировщик Автоматического Сканирования Библиотеки", @@ -304,6 +305,7 @@ "LabelPodcasts": "Подкасты", "LabelPodcastType": "Podcast Type", "LabelPrefixesToIgnore": "Игнорируемые Префиксы (без учета регистра)", + "LabelPreventIndexing": "Prevent your feed from being indexed by iTunes and Google podcast directories", "LabelProgress": "Прогресс", "LabelProvider": "Провайдер", "LabelPubDate": "Дата Публикации", @@ -318,6 +320,9 @@ "LabelRSSFeedOpen": "Открыть RSS-канал", "LabelRSSFeedSlug": "Встроить RSS-канал", "LabelRSSFeedURL": "URL RSS-канала", + "LabelRssFeedCustomOwnerName": "Custom owner Name", + "LabelRssFeedCustomOwnerEmail": "Custom owner Email", + "LabelRssFeedPreventIndexing": "Prevent Indexing", "LabelSearchTerm": "Поисковый Запрос", "LabelSearchTitle": "Поиск по Названию", "LabelSearchTitleOrASIN": "Поиск по Названию или ASIN", diff --git a/client/strings/zh-cn.json b/client/strings/zh-cn.json index 32927a79..54d17dca 100644 --- a/client/strings/zh-cn.json +++ b/client/strings/zh-cn.json @@ -127,6 +127,7 @@ "HeaderRemoveEpisode": "移除剧集", "HeaderRemoveEpisodes": "移除 {0} 剧集", "HeaderRSSFeedIsOpen": "RSS 源已打开", + "HeaderRSSFeedGeneral": "RSS Detailss", "HeaderSavedMediaProgress": "保存媒体进度", "HeaderSchedule": "计划任务", "HeaderScheduleLibraryScans": "自动扫描媒体库", @@ -304,6 +305,7 @@ "LabelPodcasts": "播客", "LabelPodcastType": "Podcast Type", "LabelPrefixesToIgnore": "忽略的前缀 (不区分大小写)", + "LabelPreventIndexing": "Prevent your feed from being indexed by iTunes and Google podcast directories", "LabelProgress": "进度", "LabelProvider": "供应商", "LabelPubDate": "出版日期", @@ -318,6 +320,9 @@ "LabelRSSFeedOpen": "打开 RSS 源", "LabelRSSFeedSlug": "RSS 源段", "LabelRSSFeedURL": "RSS 源 URL", + "LabelRssFeedCustomOwnerName": "Custom owner Name", + "LabelRssFeedCustomOwnerEmail": "Custom owner Email", + "LabelRssFeedPreventIndexing": "Prevent Indexing", "LabelSearchTerm": "搜索项", "LabelSearchTitle": "搜索标题", "LabelSearchTitleOrASIN": "搜索标题或 ASIN", diff --git a/server/controllers/RSSFeedController.js b/server/controllers/RSSFeedController.js index 86c37d72..9732368d 100644 --- a/server/controllers/RSSFeedController.js +++ b/server/controllers/RSSFeedController.js @@ -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() \ No newline at end of file +module.exports = new RSSFeedController() diff --git a/server/managers/RssFeedManager.js b/server/managers/RssFeedManager.js index 1d842559..f5f74313 100644 --- a/server/managers/RssFeedManager.js +++ b/server/managers/RssFeedManager.js @@ -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 \ No newline at end of file +module.exports = RssFeedManager diff --git a/server/objects/Feed.js b/server/objects/Feed.js index e557c30a..0e67df8d 100644 --- a/server/objects/Feed.js +++ b/server/objects/Feed.js @@ -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 diff --git a/server/objects/FeedMeta.js b/server/objects/FeedMeta.js index db414159..ed027972 100644 --- a/server/objects/FeedMeta.js +++ b/server/objects/FeedMeta.js @@ -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 } ] } }