removed cursor in favor of context and channels

This commit is contained in:
2025-08-18 16:45:28 +02:00
parent 9425aaae0f
commit 8683b5967e
7 changed files with 150 additions and 85 deletions

59
api.go
View File

@ -3,14 +3,12 @@ package nuapi
import (
"context"
"fmt"
"os"
"path"
"strconv"
"strings"
"time"
"git.tordarus.net/tordarus/adverr/v2"
"git.tordarus.net/tordarus/slices"
"github.com/PuerkitoBio/goquery"
)
@ -128,48 +126,21 @@ func (api *Api) GetNovelByID(novelID NovelID) (*Novel, error) {
}, nil
}
func (api *Api) GetChapterEntriesByNovelID(novelID NovelID) *Cursor[NovelChapterEntry] {
ctx, cancelFunc := context.WithCancel(context.Background())
out := make(chan *NovelChapterEntry, 15)
go func() {
defer close(out)
doc, err := api.Get(fmt.Sprintf("https://www.novelupdates.com/series/%s/?pg=%d", novelID, 1))
if err != nil {
fmt.Fprintln(os.Stderr, err)
return
}
pageCount, err := api.getPageCount(doc)
if err != nil {
fmt.Fprintln(os.Stderr, err)
return
}
for pageIndex := pageCount; pageIndex > 0; pageIndex-- {
if ctx.Err() != nil {
break
}
entries, err := api.getChapterEntriesByPageIndex(novelID, pageIndex)
if err != nil {
fmt.Fprintln(os.Stderr, err)
return
}
for _, entry := range entries {
entry := entry
out <- &entry
}
}
}()
return &Cursor[NovelChapterEntry]{
ctx: ctx,
cancelFunc: cancelFunc,
Chan: out,
func (api *Api) GetChapterEntriesByNovelID(ctx context.Context, novelID NovelID, traverser ChapterEntryTraverser) (<-chan NovelChapterEntry, error) {
doc, err := api.Get(fmt.Sprintf("https://www.novelupdates.com/series/%s/?pg=%d", novelID, 1))
if err != nil {
return nil, err
}
pageCount, err := api.getPageCount(doc)
if err != nil {
return nil, err
}
out := make(chan NovelChapterEntry, 15)
go traverser(ctx, api, novelID, pageCount, out)
return out, nil
}
func (api *Api) getPageCount(doc *goquery.Document) (int, error) {
@ -219,5 +190,5 @@ func (api *Api) getChapterEntriesByPageIndex(novelID NovelID, pageIndex int) ([]
})
})
return slices.Reverse(entries), nil
return entries, nil
}