Files
MeBox/internal/service/scheduler_segment_jobs.go
truewhile e273b5e87d 优化
2026-09-24 11:43:17 +08:00

53 lines
1.3 KiB
Go

package service
import (
"context"
"time"
"go.uber.org/zap"
)
const (
segmentPrewarmJobInterval = 6 * time.Hour
// SegmentPrewarmEnabledKey 控制是否后台预热 TheIntroDB 片段;默认关闭。
SegmentPrewarmEnabledKey = "segment.prewarm_enabled"
)
// SetSegments wires the IntroDB prewarm job. Without it the job is not registered.
func (s *SchedulerService) SetSegments(segments *MediaSegmentService) {
if s != nil {
s.segments = segments
}
}
func (s *SchedulerService) jobSegmentPrewarm(ctx context.Context) error {
if s == nil || s.segments == nil {
return nil
}
manual, _ := ctx.Value(schedulerManualRunKey{}).(bool)
if !manual && !s.segmentPrewarmEnabled(ctx) {
return nil
}
n, err := s.segments.Prewarm(ctx, segmentPrewarmDefaultLimit)
if s.log != nil {
s.log.Info("segment prewarm finished",
zap.Int("attempted", n),
zap.Error(err),
)
}
return err
}
// segmentPrewarmEnabled reports whether the operator opted into background
// IntroDB prewarm. Defaults to false so playback-on-demand remains the only path.
func (s *SchedulerService) segmentPrewarmEnabled(ctx context.Context) bool {
if s.repo == nil || s.repo.Setting == nil {
return false
}
v, err := s.repo.Setting.Get(ctx, SegmentPrewarmEnabledKey)
if err != nil {
return false
}
return parseBoolSetting(v, false)
}