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 } } } }