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 }