Public/Validation/Test-SubtitleOverlap.ps1
|
function Test-SubtitleOverlap { <# .SYNOPSIS Detects entries where one entry's start time is before the previous entry's end time. .DESCRIPTION Returns a ValidationResult with each overlapping pair described in the warnings. .PARAMETER InputObject A SubtitleFile object. .EXAMPLE Import-SubtitleFile 'movie.srt' | Test-SubtitleOverlap #> [CmdletBinding()] [OutputType('ValidationResult')] param( [Parameter(Mandatory, ValueFromPipeline)] [SubtitleFile] $InputObject ) process { $result = [ValidationResult]::new() $result.FilePath = $InputObject.Path $result.Format = $InputObject.Format $sorted = $InputObject.Entries | Sort-Object Start for ($i = 1; $i -lt $sorted.Count; $i++) { $prev = $sorted[$i - 1] $curr = $sorted[$i] if ($curr.Start -lt $prev.End) { $overlap = $prev.End - $curr.Start $result.AddWarning( $curr.Index, 'Overlap', "Entry $($curr.Index) starts $overlap before entry $($prev.Index) ends. ($($curr.Start) < $($prev.End))" ) } } return $result } } |