feat: reverse the order of the rss feed

This commit is contained in:
Kevin Shenk 2025-01-22 18:54:57 +00:00
parent c3c846f82d
commit 106489be75
5 changed files with 37 additions and 5 deletions

View File

@ -66,6 +66,7 @@ export default {
currentFeed: null, currentFeed: null,
metadataDetails: { metadataDetails: {
preventIndexing: true, preventIndexing: true,
reverseOrder: false,
ownerName: '', ownerName: '',
ownerEmail: '' ownerEmail: ''
}, },

View File

@ -16,6 +16,12 @@
</div> </div>
<div>{{ feed.meta.preventIndexing ? 'Yes' : 'No' }}</div> <div>{{ feed.meta.preventIndexing ? 'Yes' : 'No' }}</div>
</div> </div>
<div class="flex py-0.5">
<div class="w-48">
<span class="text-white text-opacity-60 uppercase text-sm">{{ $strings.LabelRSSFeedReverseOrder }}</span>
</div>
<div>{{ feed.meta.reverseOrder ? 'Yes' : 'No' }}</div>
</div>
<div v-if="feed.meta.ownerName" class="flex py-0.5"> <div v-if="feed.meta.ownerName" class="flex py-0.5">
<div class="w-48"> <div class="w-48">
<span class="text-white text-opacity-60 uppercase text-sm">{{ $strings.LabelRSSFeedCustomOwnerName }}</span> <span class="text-white text-opacity-60 uppercase text-sm">{{ $strings.LabelRSSFeedCustomOwnerName }}</span>

View File

@ -24,6 +24,9 @@
<div class="w-full relative mb-1"> <div class="w-full relative mb-1">
<ui-text-input-with-label v-model="ownerEmail" :label="$strings.LabelRSSFeedCustomOwnerEmail" /> <ui-text-input-with-label v-model="ownerEmail" :label="$strings.LabelRSSFeedCustomOwnerEmail" />
</div> </div>
<div class="w-full relative mb-1">
<ui-checkbox v-model="reverseOrder" :label="$strings.LabelRSSFeedReverseOrder" checkbox-bg="primary" border-color="gray-600" label-class="pl-2" />
</div>
</template> </template>
</div> </div>
</div> </div>
@ -38,7 +41,8 @@ export default {
return { return {
preventIndexing: true, preventIndexing: true,
ownerName: '', ownerName: '',
ownerEmail: '' ownerEmail: '',
reverseOrder: false
} }
} }
} }
@ -82,6 +86,17 @@ export default {
ownerEmail: value ownerEmail: value
}) })
} }
},
reverseOrder: {
get() {
return this.value.reverseOrder
},
set(value) {
this.$emit('input', {
...this.value,
reverseOrder: value
})
}
} }
}, },
methods: {}, methods: {},

View File

@ -508,6 +508,7 @@
"LabelRSSFeedCustomOwnerName": "Custom owner Name", "LabelRSSFeedCustomOwnerName": "Custom owner Name",
"LabelRSSFeedOpen": "RSS Feed Open", "LabelRSSFeedOpen": "RSS Feed Open",
"LabelRSSFeedPreventIndexing": "Prevent Indexing", "LabelRSSFeedPreventIndexing": "Prevent Indexing",
"LabelRSSFeedReverseOrder": "Reverse Episode Order",
"LabelRSSFeedSlug": "RSS Feed Slug", "LabelRSSFeedSlug": "RSS Feed Slug",
"LabelRSSFeedURL": "RSS Feed URL", "LabelRSSFeedURL": "RSS Feed URL",
"LabelRandomly": "Randomly", "LabelRandomly": "Randomly",
@ -1081,4 +1082,4 @@
"ToastUserPasswordMismatch": "Passwords do not match", "ToastUserPasswordMismatch": "Passwords do not match",
"ToastUserPasswordMustChange": "New password cannot match old password", "ToastUserPasswordMustChange": "New password cannot match old password",
"ToastUserRootRequireName": "Must enter a root username" "ToastUserRootRequireName": "Must enter a root username"
} }

View File

@ -388,7 +388,11 @@ class Feed extends Model {
ownerEmail: DataTypes.STRING, ownerEmail: DataTypes.STRING,
explicit: DataTypes.BOOLEAN, explicit: DataTypes.BOOLEAN,
preventIndexing: DataTypes.BOOLEAN, preventIndexing: DataTypes.BOOLEAN,
coverPath: DataTypes.STRING coverPath: DataTypes.STRING,
reverseOrder: {
type: DataTypes.BOOLEAN,
defaultValue: false
}
}, },
{ {
sequelize, sequelize,
@ -613,8 +617,13 @@ class Feed extends Model {
} }
const rssfeed = new RSS(rssData) const rssfeed = new RSS(rssData)
this.feedEpisodes.forEach((ep) => { let episodes = this.feedEpisodes || []
rssfeed.item(ep.getRSSData(hostPrefix)) if (this.reverseOrder) {
episodes = [...episodes].reverse()
}
episodes.forEach(episode => {
rssfeed.item(episode.getRSSData(hostPrefix))
}) })
return rssfeed.xml() return rssfeed.xml()
} }