removed cursor in favor of context and channels
This commit is contained in:
59
api.go
59
api.go
@ -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
|
||||
}
|
||||
|
Reference in New Issue
Block a user