This commit is contained in:
voocel
2026-03-07 21:25:55 +08:00
commit 27bd85ef90
60 changed files with 5658 additions and 0 deletions

66
state/reviews.go Normal file
View File

@@ -0,0 +1,66 @@
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
}