Files
ainovel-clients/state/reviews.go
voocel 27bd85ef90 init
2026-03-07 21:25:55 +08:00

67 lines
1.8 KiB
Go
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package state
import (
"fmt"
"os"
"github.com/voocel/ainovel-cli/domain"
)
// SaveReview 保存审阅结果。scope=chapter 写 reviews/{ch}.jsonscope=global 写 reviews/{ch}-global.json。
func (s *Store) SaveReview(r domain.ReviewEntry) error {
rel := fmt.Sprintf("reviews/%02d.json", r.Chapter)
if r.Scope == "global" {
rel = fmt.Sprintf("reviews/%02d-global.json", r.Chapter)
}
return s.writeJSON(rel, r)
}
// LoadReview 读取章节审阅结果。
func (s *Store) LoadReview(chapter int) (*domain.ReviewEntry, error) {
var r domain.ReviewEntry
if err := s.readJSON(fmt.Sprintf("reviews/%02d.json", chapter), &r); err != nil {
if os.IsNotExist(err) {
return nil, nil
}
return nil, err
}
return &r, nil
}
// SaveLastReview 保存最近一次审阅结果到 meta/last_review.json供宿主读取。
func (s *Store) SaveLastReview(r domain.ReviewEntry) error {
return s.writeJSON("meta/last_review.json", r)
}
// LoadLastReviewSignal 读取审阅信号文件。
func (s *Store) LoadLastReviewSignal() (*domain.ReviewEntry, error) {
var r domain.ReviewEntry
if err := s.readJSON("meta/last_review.json", &r); err != nil {
if os.IsNotExist(err) {
return nil, nil
}
return nil, err
}
return &r, nil
}
// ClearLastReview 清除审阅信号文件,防止重复消费。
func (s *Store) ClearLastReview() error {
return s.removeFile("meta/last_review.json")
}
// LoadLastReview 读取最近一次全局审阅。从 chapter 往前搜索。
func (s *Store) LoadLastReview(fromChapter int) (*domain.ReviewEntry, error) {
for ch := fromChapter; ch >= 1; ch-- {
var r domain.ReviewEntry
if err := s.readJSON(fmt.Sprintf("reviews/%02d-global.json", ch), &r); err != nil {
if os.IsNotExist(err) {
continue
}
return nil, err
}
return &r, nil
}
return nil, nil
}