Add dinosaurwet daily and weekly

This commit is contained in:
2023-10-02 22:22:40 -05:00
parent 2d7cb927c8
commit 1a6a4cf1de

View File

@@ -1,6 +1,6 @@
import { Controller, Get, Res } from '@nestjs/common'; import { Controller, Get, Res } from '@nestjs/common';
import { Response } from 'express'; import { Response } from 'express';
import { identity } from 'ramda'; import { identity, prop } from 'ramda';
import * as xml from 'xml'; import * as xml from 'xml';
const episodeFiles: [number, string][] = [ const episodeFiles: [number, string][] = [
@@ -54,7 +54,7 @@ const episodes: Episode[] = episodeFiles.map((file, i) => {
const buildFeeds = ( const buildFeeds = (
episodes: Episode[], episodes: Episode[],
dateFn: (date: Date) => Date = identity, pubDateFn: (index: number) => Date = () => startDate,
) => { ) => {
const feedObject = { const feedObject = {
rss: [ rss: [
@@ -86,24 +86,29 @@ const buildFeeds = (
'A recreation of Dinosaur Wet as an RSS feed for listeners-with-licenses enjoyment.', 'A recreation of Dinosaur Wet as an RSS feed for listeners-with-licenses enjoyment.',
}, },
{ language: 'en-US' }, { language: 'en-US' },
...episodes.map(({ title, url, length }) => ({ ...episodes
item: [ .filter(
{ title }, (episode: Episode, index: number) =>
{ guid: url }, pubDateFn(index) <= new Date(),
{ pubDate: startDate.toUTCString() }, )
{ .map(({ title, url, length, fakeReleaseDate }, index) => ({
enclosure: [ item: [
{ { title },
_attr: { { guid: url },
url, { pubDate: pubDateFn(index).toUTCString() },
type: 'audio/mpeg', {
length, enclosure: [
{
_attr: {
url,
type: 'audio/mpeg',
length,
},
}, },
}, ],
], },
}, ],
], })),
})),
], ],
}, },
], ],
@@ -121,4 +126,26 @@ export class DinosaurwetController {
const feed = buildFeeds(episodes); const feed = buildFeeds(episodes);
return response.send(feed); return response.send(feed);
} }
@Get('daily')
getDaily(@Res() response: Response) {
response.header('Content-Type', 'application/xml');
const feed = buildFeeds(
episodes,
(index: number) =>
new Date(new Date(startDate).setDate(startDate.getDate() + index)),
);
return response.send(feed);
}
@Get('weekly')
getWeekly(@Res() response: Response) {
response.header('Content-Type', 'application/xml');
const feed = buildFeeds(
episodes,
(index: number) =>
new Date(new Date(startDate).setDate(startDate.getDate() + index * 7)),
);
return response.send(feed);
}
} }