From fd0920c808d5014d66be501442c16085b2328466 Mon Sep 17 00:00:00 2001 From: advplyr Date: Sat, 23 Sep 2023 14:27:13 -0500 Subject: [PATCH] Fix:Updating RSS feeds with new episodes #2139 --- client/components/tables/podcast/EpisodesTable.vue | 1 + server/models/Feed.js | 10 ++++++++++ server/models/FeedEpisode.js | 13 +++++++++++++ 3 files changed, 24 insertions(+) diff --git a/client/components/tables/podcast/EpisodesTable.vue b/client/components/tables/podcast/EpisodesTable.vue index fcfe705e..8b29198c 100644 --- a/client/components/tables/podcast/EpisodesTable.vue +++ b/client/components/tables/podcast/EpisodesTable.vue @@ -191,6 +191,7 @@ export default { } }, methods: { + search() {}, inputUpdate() { clearTimeout(this.searchTimeout) this.searchTimeout = setTimeout(() => { diff --git a/server/models/Feed.js b/server/models/Feed.js index 5cf68f7c..72ea146c 100644 --- a/server/models/Feed.js +++ b/server/models/Feed.js @@ -176,6 +176,8 @@ class Feed extends Model { if (!existingFeed) return false let hasUpdates = false + + // Remove and update existing feed episodes for (const feedEpisode of existingFeed.feedEpisodes) { const oldFeedEpisode = oldFeedEpisodes.find(ep => ep.id === feedEpisode.id) // Episode removed @@ -196,6 +198,14 @@ class Feed extends Model { } } + // Add new feed episodes + for (const episode of oldFeedEpisodes) { + if (!existingFeed.feedEpisodes.some(fe => fe.id === episode.id)) { + await this.sequelize.models.feedEpisode.createFromOld(feedObj.id, episode) + hasUpdates = true + } + } + let feedHasUpdates = false for (const key in feedObj) { let existingValue = existingFeed[key] diff --git a/server/models/FeedEpisode.js b/server/models/FeedEpisode.js index b126f7a6..01659255 100644 --- a/server/models/FeedEpisode.js +++ b/server/models/FeedEpisode.js @@ -63,6 +63,19 @@ class FeedEpisode extends Model { } } + /** + * Create feed episode from old model + * + * @param {string} feedId + * @param {Object} oldFeedEpisode + * @returns {Promise} + */ + static createFromOld(feedId, oldFeedEpisode) { + const newEpisode = this.getFromOld(oldFeedEpisode) + newEpisode.feedId = feedId + return this.create(newEpisode) + } + static getFromOld(oldFeedEpisode) { return { id: oldFeedEpisode.id,