50 lines
1.5 KiB
Go
50 lines
1.5 KiB
Go
package tasks
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
|
|
"github.com/Silo-Server/silo-server/internal/taskmanager"
|
|
)
|
|
|
|
// BatchMatcher processes a batch of unmatched media files.
|
|
type BatchMatcher interface {
|
|
ProcessBatch(ctx context.Context) (processed int, err error)
|
|
}
|
|
|
|
// MatchMediaTask processes unmatched media files against metadata providers.
|
|
type MatchMediaTask struct {
|
|
matcher BatchMatcher
|
|
}
|
|
|
|
// NewMatchMediaTask creates a new MatchMediaTask.
|
|
func NewMatchMediaTask(matcher BatchMatcher) *MatchMediaTask {
|
|
return &MatchMediaTask{matcher: matcher}
|
|
}
|
|
|
|
func (t *MatchMediaTask) Key() string { return "match_media" }
|
|
func (t *MatchMediaTask) Name() string { return "Match Media Files" }
|
|
func (t *MatchMediaTask) Description() string {
|
|
return "Matches unmatched media files to metadata from providers"
|
|
}
|
|
func (t *MatchMediaTask) Category() taskmanager.TaskCategory { return taskmanager.TaskCategoryMetadata }
|
|
func (t *MatchMediaTask) IsHidden() bool { return true }
|
|
|
|
func (t *MatchMediaTask) DefaultTriggers() []taskmanager.TriggerConfig {
|
|
return []taskmanager.TriggerConfig{
|
|
{Type: taskmanager.TriggerTypeInterval, IntervalMs: 30_000},
|
|
}
|
|
}
|
|
|
|
func (t *MatchMediaTask) Execute(ctx context.Context, progress taskmanager.ProgressReporter) error {
|
|
progress.Report(0, "Processing unmatched files")
|
|
|
|
processed, err := t.matcher.ProcessBatch(ctx)
|
|
if err != nil {
|
|
return fmt.Errorf("processing unmatched files: %w", err)
|
|
}
|
|
|
|
progress.Report(100, fmt.Sprintf("Processed %d files", processed))
|
|
return nil
|
|
}
|