Files
seriatim/internal/builtin/merge.go

40 lines
1.0 KiB
Go

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
}