63 lines
1.4 KiB
Go
63 lines
1.4 KiB
Go
package nuapi
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"os"
|
|
"slices"
|
|
)
|
|
|
|
type ChapterEntryTraverser func(ctx context.Context, api *Api, novelID NovelID, pageCount int, out chan<- NovelChapterEntry)
|
|
|
|
// TraverseAscending returns a ChapterEntryTraverser which traverses entries from oldest to newest chapter
|
|
func TraverseAscending() ChapterEntryTraverser {
|
|
return func(ctx context.Context, api *Api, novelID NovelID, pageCount int, out chan<- NovelChapterEntry) {
|
|
defer close(out)
|
|
|
|
for pageIndex := pageCount; pageIndex > 0; pageIndex-- {
|
|
if ctx.Err() != nil {
|
|
break
|
|
}
|
|
|
|
entries, err := api.getChapterEntriesByPageIndex(novelID, pageIndex)
|
|
if err != nil {
|
|
if Verbose {
|
|
fmt.Fprintln(os.Stderr, err)
|
|
}
|
|
return
|
|
}
|
|
|
|
slices.Reverse(entries)
|
|
|
|
for _, entry := range entries {
|
|
out <- entry
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
// TraverseDescending returns a ChapterEntryTraverser which traverses entries from newest to oldest chapter
|
|
func TraverseDescending() ChapterEntryTraverser {
|
|
return func(ctx context.Context, api *Api, novelID NovelID, pageCount int, out chan<- NovelChapterEntry) {
|
|
defer close(out)
|
|
|
|
for pageIndex := 1; pageIndex <= pageCount; pageIndex++ {
|
|
if ctx.Err() != nil {
|
|
break
|
|
}
|
|
|
|
entries, err := api.getChapterEntriesByPageIndex(novelID, pageIndex)
|
|
if err != nil {
|
|
if Verbose {
|
|
fmt.Fprintln(os.Stderr, err)
|
|
}
|
|
return
|
|
}
|
|
|
|
for _, entry := range entries {
|
|
out <- entry
|
|
}
|
|
}
|
|
}
|
|
}
|