mirror of
https://git.sr.ht/~cadence/bibliogram
synced 2024-11-23 00:27:30 +00:00
RSS feed includes all gallery images
This commit is contained in:
parent
5303ae1d4b
commit
1f253981b2
@ -52,7 +52,7 @@ class Timeline {
|
|||||||
this.page_info = page.page_info
|
this.page_info = page.page_info
|
||||||
}
|
}
|
||||||
|
|
||||||
getFeed() {
|
async fetchFeed() {
|
||||||
const feed = new RSS({
|
const feed = new RSS({
|
||||||
title: `@${this.user.data.username}`,
|
title: `@${this.user.data.username}`,
|
||||||
feed_url: `${config.website_origin}/u/${this.user.data.username}/rss.xml`,
|
feed_url: `${config.website_origin}/u/${this.user.data.username}/rss.xml`,
|
||||||
@ -63,9 +63,9 @@ class Timeline {
|
|||||||
ttl: this.user.getTtl(1000*60) // scale to minute
|
ttl: this.user.getTtl(1000*60) // scale to minute
|
||||||
})
|
})
|
||||||
const page = this.pages[0] // only get posts from first page
|
const page = this.pages[0] // only get posts from first page
|
||||||
for (const item of page) {
|
await Promise.all(page.map(item =>
|
||||||
feed.item(item.getFeedData())
|
item.fetchFeedData().then(feedData => feed.item(feedData))
|
||||||
}
|
))
|
||||||
return feed
|
return feed
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -9,7 +9,8 @@ require("../testimports")(collectors, TimelineChild, TimelineBaseMethods)
|
|||||||
|
|
||||||
const rssDescriptionTemplate = compile(`
|
const rssDescriptionTemplate = compile(`
|
||||||
p(style='white-space: pre-line')= caption
|
p(style='white-space: pre-line')= caption
|
||||||
img(alt=alt src=src)
|
each child in children
|
||||||
|
img(alt=child.alt src=child.src width=child.width height=child.height)
|
||||||
`)
|
`)
|
||||||
|
|
||||||
class TimelineEntry extends TimelineBaseMethods {
|
class TimelineEntry extends TimelineBaseMethods {
|
||||||
@ -198,13 +199,22 @@ class TimelineEntry extends TimelineBaseMethods {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
getFeedData() {
|
async fetchFeedData() {
|
||||||
|
const children = await this.fetchChildren()
|
||||||
return {
|
return {
|
||||||
title: this.getCaptionIntroduction() || `New post from @${this.getBasicOwner().username}`,
|
title: this.getCaptionIntroduction() || `New post from @${this.getBasicOwner().username}`,
|
||||||
description: rssDescriptionTemplate({src: `${config.website_origin}${this.getDisplayUrlP()}`, alt: this.getAlt(), caption: this.getCaption()}),
|
description: rssDescriptionTemplate({
|
||||||
|
caption: this.getCaption(),
|
||||||
|
children: children.map(child => ({
|
||||||
|
src: `${config.website_origin}${child.getDisplayUrlP()}`,
|
||||||
|
alt: child.getAlt(),
|
||||||
|
width: child.data.dimensions.width,
|
||||||
|
height: child.data.dimensions.height
|
||||||
|
}))
|
||||||
|
}),
|
||||||
author: this.data.owner.username,
|
author: this.data.owner.username,
|
||||||
url: `${config.website_origin}/p/${this.data.shortcode}`,
|
url: `${config.website_origin}/p/${this.data.shortcode}`,
|
||||||
guid: `${config.website_origin}/p/${this.data.shortcode}`,
|
guid: `${config.website_origin}/p/${this.data.shortcode}`, // Is it wise to keep the origin in here? The same post would have a different ID from different servers.
|
||||||
date: new Date(this.data.taken_at_timestamp*1000)
|
date: new Date(this.data.taken_at_timestamp*1000)
|
||||||
/*
|
/*
|
||||||
Readers should display the description as HTML rather than using the media enclosure.
|
Readers should display the description as HTML rather than using the media enclosure.
|
||||||
|
@ -5,11 +5,12 @@ const {render} = require("pinski/plugins")
|
|||||||
module.exports = [
|
module.exports = [
|
||||||
{route: `/u/(${constants.external.username_regex})/rss.xml`, methods: ["GET"], code: async ({url, fill}) => {
|
{route: `/u/(${constants.external.username_regex})/rss.xml`, methods: ["GET"], code: async ({url, fill}) => {
|
||||||
const user = await fetchUser(fill[0])
|
const user = await fetchUser(fill[0])
|
||||||
const content = user.timeline.getFeed().xml()
|
const content = await user.timeline.fetchFeed()
|
||||||
|
const xml = content.xml()
|
||||||
return {
|
return {
|
||||||
statusCode: 200,
|
statusCode: 200,
|
||||||
contentType: "application/rss+xml", // see https://stackoverflow.com/questions/595616/what-is-the-correct-mime-type-to-use-for-an-rss-feed
|
contentType: "application/rss+xml", // see https://stackoverflow.com/questions/595616/what-is-the-correct-mime-type-to-use-for-an-rss-feed
|
||||||
content
|
content: xml
|
||||||
}
|
}
|
||||||
}}
|
}}
|
||||||
]
|
]
|
||||||
|
Loading…
Reference in New Issue
Block a user