Added feeds for crossposting and a rebuild site button

This commit is contained in:
Leon Mika 2026-03-08 09:37:49 +11:00
parent 76ed54f119
commit fa9be69045
6 changed files with 62 additions and 11 deletions

View file

@ -72,7 +72,17 @@ func (b *Builder) BuildSite(outDir string) error {
})
eg.Go(func() error {
if err := b.renderFeeds(buildCtx, b.site.PostIter(ctx)); err != nil {
if err := b.renderFeeds(buildCtx, b.site.PostIter(ctx), feedOptions{
targetNamePrefix: "/feed",
titlePrefix: "",
}); err != nil {
return err
}
if err := b.renderFeeds(buildCtx, b.site.PostIter(ctx), feedOptions{
targetNamePrefix: "/feeds/microblog-crosspost",
titlePrefix: "Devlog: ",
}); err != nil {
return err
}
return nil
@ -119,7 +129,7 @@ func (b *Builder) renderPostList(ctx buildContext, postIter iter.Seq[models.Mayb
})
}
func (b *Builder) renderFeeds(ctx buildContext, postIter iter.Seq[models.Maybe[*models.Post]]) error {
func (b *Builder) renderFeeds(ctx buildContext, postIter iter.Seq[models.Maybe[*models.Post]], opts feedOptions) error {
now := time.Now()
feed := &feedhub.Feed{
Title: b.site.Title,
@ -141,9 +151,14 @@ func (b *Builder) renderFeeds(ctx buildContext, postIter iter.Seq[models.Maybe[*
return err
}
postTitle := post.Title
if postTitle != "" {
postTitle = opts.titlePrefix + postTitle
}
feed.Items = append(feed.Items, &feedhub.Item{
Id: filepath.Join(b.site.BaseURL, post.GUID),
Title: post.Title,
Title: postTitle,
Link: &feedhub.Link{Href: renderedPost.PostURL},
Content: string(renderedPost.HTML),
// TO FIX: Created should be first published
@ -157,7 +172,7 @@ func (b *Builder) renderFeeds(ctx buildContext, postIter iter.Seq[models.Maybe[*
}
}
if err := b.createAtPath(ctx, "/feed.xml", func(f io.Writer) error {
if err := b.createAtPath(ctx, opts.targetNamePrefix+".xml", func(f io.Writer) error {
rss, err := feed.ToRss()
if err != nil {
return fmt.Errorf("failed to convert feed to RSS: %w", err)
@ -168,7 +183,7 @@ func (b *Builder) renderFeeds(ctx buildContext, postIter iter.Seq[models.Maybe[*
return err
}
if err := b.createAtPath(ctx, "/feed.json", func(f io.Writer) error {
if err := b.createAtPath(ctx, opts.targetNamePrefix+".json", func(f io.Writer) error {
rss, err := feed.ToJSON()
if err != nil {
return fmt.Errorf("failed to convert feed to JSON feed: %w", err)
@ -276,7 +291,3 @@ func (b *Builder) writeUploads(ctx buildContext, uploads []models.Upload) error
}
return nil
}
type buildContext struct {
outDir string
}

View file

@ -0,0 +1,10 @@
package sitebuilder
type buildContext struct {
outDir string
}
type feedOptions struct {
targetNamePrefix string
titlePrefix string
}