Added RSS and JSON feeds
This commit is contained in:
parent
65e5ce2733
commit
21f181f83d
13 changed files with 192 additions and 31 deletions
37
services/publisher/iter.go
Normal file
37
services/publisher/iter.go
Normal file
|
|
@ -0,0 +1,37 @@
|
|||
package publisher
|
||||
|
||||
import (
|
||||
"context"
|
||||
"iter"
|
||||
|
||||
"lmika.dev/lmika/weiro/models"
|
||||
"lmika.dev/lmika/weiro/providers/db"
|
||||
)
|
||||
|
||||
// PostIter returns a post iterator which returns posts in reverse chronological order.
|
||||
func (s *Publisher) postIter(ctx context.Context, site int64) iter.Seq[models.Maybe[*models.Post]] {
|
||||
return func(yield func(models.Maybe[*models.Post]) bool) {
|
||||
paging := db.PagingParams{Offset: 0, Limit: 50}
|
||||
page, err := s.db.SelectPostsOfSite(ctx, site, false, paging)
|
||||
if err != nil {
|
||||
yield(models.Maybe[*models.Post]{Err: err})
|
||||
return
|
||||
}
|
||||
|
||||
for {
|
||||
for _, post := range page {
|
||||
if !yield(models.Maybe[*models.Post]{Value: post}) {
|
||||
return
|
||||
}
|
||||
}
|
||||
paging.Offset += paging.Limit
|
||||
page, err = s.db.SelectPostsOfSite(ctx, site, false, paging)
|
||||
if err != nil {
|
||||
yield(models.Maybe[*models.Post]{Err: err})
|
||||
return
|
||||
} else if len(page) == 0 {
|
||||
return
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -3,6 +3,7 @@ package publisher
|
|||
import (
|
||||
"context"
|
||||
"io"
|
||||
"iter"
|
||||
"log"
|
||||
"os"
|
||||
|
||||
|
|
@ -38,12 +39,6 @@ func (p *Publisher) Publish(ctx context.Context, site models.Site) error {
|
|||
return err
|
||||
}
|
||||
|
||||
// Fetch all content of site
|
||||
posts, err := p.db.SelectPostsOfSite(ctx, site.ID, false)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// Fetch all uploads of site
|
||||
uploads, err := p.db.SelectUploadsOfSite(ctx, site.ID)
|
||||
if err != nil {
|
||||
|
|
@ -56,8 +51,10 @@ func (p *Publisher) Publish(ctx context.Context, site models.Site) error {
|
|||
}
|
||||
|
||||
pubSite := pubmodel.Site{
|
||||
Site: site,
|
||||
Posts: posts,
|
||||
Site: site,
|
||||
PostIter: func(ctx context.Context) iter.Seq[models.Maybe[*models.Post]] {
|
||||
return p.postIter(ctx, site.ID)
|
||||
},
|
||||
BaseURL: target.BaseURL,
|
||||
Uploads: uploads,
|
||||
OpenUpload: func(u models.Upload) (io.ReadCloser, error) {
|
||||
|
|
@ -77,6 +74,7 @@ func (p *Publisher) publishSite(ctx context.Context, pubSite pubmodel.Site, targ
|
|||
sb, err := sitebuilder.New(pubSite, sitebuilder.Options{
|
||||
BasePosts: "/posts",
|
||||
TemplatesFS: simplecss.FS,
|
||||
FeedItems: 30,
|
||||
})
|
||||
if err != nil {
|
||||
return err
|
||||
|
|
@ -88,7 +86,11 @@ func (p *Publisher) publishSite(ctx context.Context, pubSite pubmodel.Site, targ
|
|||
if err := exporter.WriteSiteYAML(); err != nil {
|
||||
return err
|
||||
}
|
||||
for _, p := range pubSite.Posts {
|
||||
for mp := range pubSite.PostIter(ctx) {
|
||||
p, err := mp.Get()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if err := exporter.WritePost(p); err != nil {
|
||||
return err
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue