package builtin import ( "context" "fmt" "sort" "gitea.maximumdirect.net/eric/seriatim/internal/config" "gitea.maximumdirect.net/eric/seriatim/internal/model" "gitea.maximumdirect.net/eric/seriatim/internal/report" ) type chronologicalMerger struct{} func (chronologicalMerger) Name() string { return "chronological-merge" } func (chronologicalMerger) Merge(ctx context.Context, in []model.CanonicalTranscript, cfg config.Config) (model.MergedTranscript, []report.Event, error) { if err := ctx.Err(); err != nil { return model.MergedTranscript{}, nil, err } segments := make([]model.Segment, 0) for _, transcript := range in { segments = append(segments, transcript.Segments...) } sort.SliceStable(segments, func(i, j int) bool { return model.SegmentLess(segments[i], segments[j]) }) return model.MergedTranscript{ Segments: segments, OverlapGroups: nil, }, []report.Event{ report.Info("merge", "chronological-merge", fmt.Sprintf("merged %d canonical transcript(s) into %d segment(s)", len(in), len(segments))), }, nil }