53 lines
1.3 KiB
Go
53 lines
1.3 KiB
Go
package builtin
|
|
|
|
import (
|
|
"context"
|
|
"sort"
|
|
|
|
"gitea.maximumdirect.net/eric/seriatim/internal/config"
|
|
"gitea.maximumdirect.net/eric/seriatim/internal/model"
|
|
"gitea.maximumdirect.net/eric/seriatim/internal/report"
|
|
)
|
|
|
|
type placeholderMerger struct{}
|
|
|
|
func (placeholderMerger) Name() string {
|
|
return "placeholder-merger"
|
|
}
|
|
|
|
func (placeholderMerger) 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 {
|
|
left := segments[i]
|
|
right := segments[j]
|
|
if left.Start != right.Start {
|
|
return left.Start < right.Start
|
|
}
|
|
if left.End != right.End {
|
|
return left.End < right.End
|
|
}
|
|
if left.Source != right.Source {
|
|
return left.Source < right.Source
|
|
}
|
|
if left.SourceSegmentIndex != right.SourceSegmentIndex {
|
|
return left.SourceSegmentIndex < right.SourceSegmentIndex
|
|
}
|
|
return left.Speaker < right.Speaker
|
|
})
|
|
|
|
return model.MergedTranscript{
|
|
Segments: segments,
|
|
OverlapGroups: nil,
|
|
}, []report.Event{
|
|
report.Info("merge", "placeholder-merger", "merged placeholder canonical transcript(s)"),
|
|
}, nil
|
|
}
|