Skip to content

Commit

Permalink
Remove old Feed/FeedEpisode/FeedMeta objects
Browse files Browse the repository at this point in the history
  • Loading branch information
advplyr committed Dec 15, 2024
1 parent de8a930 commit b39268c
Show file tree
Hide file tree
Showing 17 changed files with 84 additions and 326 deletions.
2 changes: 1 addition & 1 deletion server/controllers/LibraryController.js
Original file line number Diff line number Diff line change
Expand Up @@ -762,7 +762,7 @@ class LibraryController {

if (include.includes('rssfeed')) {
const feedObj = await RssFeedManager.findFeedForEntityId(seriesJson.id)
seriesJson.rssFeed = feedObj?.toJSONMinified() || null
seriesJson.rssFeed = feedObj?.toOldJSONMinified() || null
}

res.json(seriesJson)
Expand Down
2 changes: 1 addition & 1 deletion server/controllers/LibraryItemController.js
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ class LibraryItemController {

if (includeEntities.includes('rssfeed')) {
const feedData = await RssFeedManager.findFeedForEntityId(item.id)
item.rssFeed = feedData?.toJSONMinified() || null
item.rssFeed = feedData?.toOldJSONMinified() || null
}

if (item.mediaType === 'book' && req.user.isAdminOrUp && includeEntities.includes('share')) {
Expand Down
10 changes: 5 additions & 5 deletions server/controllers/RSSFeedController.js
Original file line number Diff line number Diff line change
Expand Up @@ -25,8 +25,8 @@ class RSSFeedController {
async getAll(req, res) {
const feeds = await RssFeedManager.getFeeds()
res.json({
feeds: feeds.map((f) => f.toJSON()),
minified: feeds.map((f) => f.toJSONMinified())
feeds: feeds.map((f) => f.toOldJSON()),
minified: feeds.map((f) => f.toOldJSONMinified())
})
}

Expand Down Expand Up @@ -63,7 +63,7 @@ class RSSFeedController {
}

// Check that this slug is not being used for another feed (slug will also be the Feed id)
if (await RssFeedManager.findFeedBySlug(reqBody.slug)) {
if (await RssFeedManager.checkExistsBySlug(reqBody.slug)) {
Logger.error(`[RSSFeedController] Cannot open RSS feed because slug "${reqBody.slug}" is already in use`)
return res.status(400).send('Slug already in use')
}
Expand Down Expand Up @@ -97,7 +97,7 @@ class RSSFeedController {
}

// Check that this slug is not being used for another feed (slug will also be the Feed id)
if (await RssFeedManager.findFeedBySlug(reqBody.slug)) {
if (await RssFeedManager.checkExistsBySlug(reqBody.slug)) {
Logger.error(`[RSSFeedController] Cannot open RSS feed because slug "${reqBody.slug}" is already in use`)
return res.status(400).send('Slug already in use')
}
Expand Down Expand Up @@ -140,7 +140,7 @@ class RSSFeedController {
}

// Check that this slug is not being used for another feed (slug will also be the Feed id)
if (await RssFeedManager.findFeedBySlug(reqBody.slug)) {
if (await RssFeedManager.checkExistsBySlug(reqBody.slug)) {
Logger.error(`[RSSFeedController] Cannot open RSS feed because slug "${reqBody.slug}" is already in use`)
return res.status(400).send('Slug already in use')
}
Expand Down
2 changes: 1 addition & 1 deletion server/controllers/SeriesController.js
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ class SeriesController {

if (include.includes('rssfeed')) {
const feedObj = await RssFeedManager.findFeedForEntityId(seriesJson.id)
seriesJson.rssFeed = feedObj?.toJSONMinified() || null
seriesJson.rssFeed = feedObj?.toOldJSONMinified() || null
}

res.json(seriesJson)
Expand Down
55 changes: 43 additions & 12 deletions server/managers/RssFeedManager.js
Original file line number Diff line number Diff line change
Expand Up @@ -53,19 +53,29 @@ class RssFeedManager {
/**
* Find open feed for an entity (e.g. collection id, playlist id, library item id)
* @param {string} entityId
* @returns {Promise<objects.Feed>} oldFeed
* @returns {Promise<import('../models/Feed')>}
*/
findFeedForEntityId(entityId) {
return Database.feedModel.findOneOld({ entityId })
return Database.feedModel.findOne({
where: {
entityId
}
})
}

/**
* Find open feed for a slug
*
* @param {string} slug
* @returns {Promise<objects.Feed>} oldFeed
* @returns {Promise<boolean>}
*/
findFeedBySlug(slug) {
return Database.feedModel.findOneOld({ slug })
checkExistsBySlug(slug) {
return Database.feedModel
.count({
where: {
slug
}
})
.then((count) => count > 0)
}

/**
Expand Down Expand Up @@ -169,7 +179,17 @@ class RssFeedManager {
* @param {Response} res
*/
async getFeedItem(req, res) {
const feed = await this.findFeedBySlug(req.params.slug)
const feed = await Database.feedModel.findOne({
where: {
slug: req.params.slug
},
attributes: ['id', 'slug'],
include: {
model: Database.feedEpisodeModel,
attributes: ['id', 'filePath']
}
})

if (!feed) {
Logger.debug(`[RssFeedManager] Feed not found ${req.params.slug}`)
res.sendStatus(404)
Expand All @@ -191,7 +211,12 @@ class RssFeedManager {
* @param {Response} res
*/
async getFeedCover(req, res) {
const feed = await this.findFeedBySlug(req.params.slug)
const feed = await Database.feedModel.findOne({
where: {
slug: req.params.slug
},
attributes: ['coverPath']
})
if (!feed) {
Logger.debug(`[RssFeedManager] Feed not found ${req.params.slug}`)
res.sendStatus(404)
Expand Down Expand Up @@ -338,10 +363,16 @@ class RssFeedManager {
}
}

async getFeeds() {
const feeds = await Database.models.feed.getOldFeeds()
Logger.info(`[RssFeedManager] Fetched all feeds`)
return feeds
/**
*
* @returns {Promise<import('../models/Feed').FeedExpanded[]>}
*/
getFeeds() {
return Database.feedModel.findAll({
include: {
model: Database.feedEpisodeModel
}
})
}
}
module.exports = new RssFeedManager()
4 changes: 2 additions & 2 deletions server/models/Collection.js
Original file line number Diff line number Diff line change
Expand Up @@ -112,7 +112,7 @@ class Collection extends Model {

// Map feed if found
if (c.feeds?.length) {
collectionExpanded.rssFeed = this.sequelize.models.feed.getOldFeed(c.feeds[0])
collectionExpanded.rssFeed = c.feeds[0].toOldJSON()
}

return collectionExpanded
Expand Down Expand Up @@ -348,7 +348,7 @@ class Collection extends Model {
if (include?.includes('rssfeed')) {
const feeds = await this.getFeeds()
if (feeds?.length) {
collectionExpanded.rssFeed = this.sequelize.models.feed.getOldFeed(feeds[0])
collectionExpanded.rssFeed = feeds[0].toOldJSON()
}
}

Expand Down
83 changes: 11 additions & 72 deletions server/models/Feed.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
const Path = require('path')
const { DataTypes, Model } = require('sequelize')
const oldFeed = require('../objects/Feed')
const Logger = require('../Logger')

const RSS = require('../libs/rss')
Expand Down Expand Up @@ -74,60 +73,6 @@ class Feed extends Model {
this.feedEpisodes
}

static async getOldFeeds() {
const feeds = await this.findAll({
include: {
model: this.sequelize.models.feedEpisode
}
})
return feeds.map((f) => this.getOldFeed(f))
}

/**
* Get old feed from Feed and optionally Feed with FeedEpisodes
* @param {Feed} feedExpanded
* @returns {oldFeed}
*/
static getOldFeed(feedExpanded) {
const episodes = feedExpanded.feedEpisodes?.map((feedEpisode) => feedEpisode.getOldEpisode()) || []

// Sort episodes by pubDate. Newest to oldest for episodic, oldest to newest for serial
if (feedExpanded.podcastType === 'episodic') {
episodes.sort((a, b) => new Date(b.pubDate) - new Date(a.pubDate))
} else {
episodes.sort((a, b) => new Date(a.pubDate) - new Date(b.pubDate))
}

return new oldFeed({
id: feedExpanded.id,
slug: feedExpanded.slug,
userId: feedExpanded.userId,
entityType: feedExpanded.entityType,
entityId: feedExpanded.entityId,
entityUpdatedAt: feedExpanded.entityUpdatedAt?.valueOf() || null,
coverPath: feedExpanded.coverPath || null,
meta: {
title: feedExpanded.title,
description: feedExpanded.description,
author: feedExpanded.author,
imageUrl: feedExpanded.imageURL,
feedUrl: feedExpanded.feedURL,
link: feedExpanded.siteURL,
explicit: feedExpanded.explicit,
type: feedExpanded.podcastType,
language: feedExpanded.language,
preventIndexing: feedExpanded.preventIndexing,
ownerName: feedExpanded.ownerName,
ownerEmail: feedExpanded.ownerEmail
},
serverAddress: feedExpanded.serverAddress,
feedUrl: feedExpanded.feedURL,
episodes,
createdAt: feedExpanded.createdAt.valueOf(),
updatedAt: feedExpanded.updatedAt.valueOf()
})
}

/**
* @param {string} feedId
* @returns {Promise<boolean>} - true if feed was removed
Expand All @@ -142,23 +87,6 @@ class Feed extends Model {
)
}

/**
* Find feed where and return oldFeed
* @param {Object} where sequelize where object
* @returns {Promise<oldFeed>} oldFeed
*/
static async findOneOld(where) {
if (!where) return null
const feedExpanded = await this.findOne({
where,
include: {
model: this.sequelize.models.feedEpisode
}
})
if (!feedExpanded) return null
return this.getOldFeed(feedExpanded)
}

/**
*
* @param {string} userId
Expand Down Expand Up @@ -663,6 +591,17 @@ class Feed extends Model {
return rssfeed.xml()
}

/**
*
* @param {string} id
* @returns {string}
*/
getEpisodePath(id) {
const episode = this.feedEpisodes.find((ep) => ep.id === id)
if (!episode) return null
return episode.filePath
}

toOldJSON() {
const episodes = this.feedEpisodes?.map((feedEpisode) => feedEpisode.getOldEpisode())
return {
Expand Down
4 changes: 3 additions & 1 deletion server/models/FeedEpisode.js
Original file line number Diff line number Diff line change
Expand Up @@ -55,12 +55,14 @@ class FeedEpisode extends Model {
* @param {import('./PodcastEpisode')} episode
*/
static getFeedEpisodeObjFromPodcastEpisode(libraryItemExpanded, feed, slug, episode) {
const episodeId = uuidv4()
return {
id: episodeId,
title: episode.title,
author: feed.author,
description: episode.description,
siteURL: feed.siteURL,
enclosureURL: `/feed/${slug}/item/${episode.id}/media${Path.extname(episode.audioFile.metadata.filename)}`,
enclosureURL: `/feed/${slug}/item/${episodeId}/media${Path.extname(episode.audioFile.metadata.filename)}`,
enclosureType: episode.audioFile.mimeType,
enclosureSize: episode.audioFile.metadata.size,
pubDate: episode.pubDate,
Expand Down
2 changes: 1 addition & 1 deletion server/models/LibraryItem.js
Original file line number Diff line number Diff line change
Expand Up @@ -568,7 +568,7 @@ class LibraryItem extends Model {
oldLibraryItem.media.metadata.series = li.series
}
if (li.rssFeed) {
oldLibraryItem.rssFeed = this.sequelize.models.feed.getOldFeed(li.rssFeed).toJSONMinified()
oldLibraryItem.rssFeed = li.rssFeed.toOldJSONMinified()
}
if (li.media.numEpisodes) {
oldLibraryItem.media.numEpisodes = li.media.numEpisodes
Expand Down
7 changes: 0 additions & 7 deletions server/models/Playlist.js
Original file line number Diff line number Diff line change
Expand Up @@ -84,13 +84,6 @@ class Playlist extends Model {

const playlistExpanded = oldPlaylist.toJSONExpanded(libraryItems)

if (include?.includes('rssfeed')) {
const feeds = await this.getFeeds()
if (feeds?.length) {
playlistExpanded.rssFeed = this.sequelize.models.feed.getOldFeed(feeds[0])
}
}

return playlistExpanded
}

Expand Down
77 changes: 0 additions & 77 deletions server/objects/Feed.js

This file was deleted.

Loading

0 comments on commit b39268c

Please sign in to comment.