Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 18 additions & 0 deletions src/ui/Features/Main/SubtitleLineViewModel.cs
Original file line number Diff line number Diff line change
Expand Up @@ -595,6 +595,24 @@ internal void SetStartTimeOnly(TimeSpan timeSpan)
UpdateDuration();
}

/// <summary>
/// Sets start and end time together without ever publishing an invalid
/// intermediate state (e.g. start &gt; end / negative duration). Updating
/// the two times separately can briefly expose such a state to the live
/// editor controls bound to the selected line; the duration up/down clamps
/// the negative value and writes it back, corrupting the end time. Suppress
/// notifications while both values are assigned, then recompute duration once.
/// </summary>
internal void SetTimes(TimeSpan startTime, TimeSpan endTime)
{
_skipUpdate = true;
StartTime = startTime;
EndTime = endTime;
_skipUpdate = false;

UpdateDuration();
}

internal void Adjust(double factor, double adjustmentInSeconds)
{
if (StartTime.IsMaxTime())
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -157,8 +157,9 @@ internal static void ChangeFrameRate(ObservableCollection<SubtitleLineViewModel>
double ratio = fromFrameRate / toFrameRate;
foreach (var line in subtitles)
{
line.SetStartTimeOnly(TimeSpan.FromMilliseconds(line.StartTime.TotalMilliseconds * ratio));
line.EndTime = TimeSpan.FromMilliseconds(line.EndTime.TotalMilliseconds * ratio);
line.SetTimes(
TimeSpan.FromMilliseconds(line.StartTime.TotalMilliseconds * ratio),
TimeSpan.FromMilliseconds(line.EndTime.TotalMilliseconds * ratio));
}
}
}
6 changes: 4 additions & 2 deletions src/ui/Features/Sync/ChangeSpeed/ChangeSpeedViewModel.cs
Original file line number Diff line number Diff line change
Expand Up @@ -86,8 +86,10 @@ internal static void ChangeSpeed(ObservableCollection<SubtitleLineViewModel> sub
{
foreach (var subtitle in subtitles)
{
subtitle.SetStartTimeOnly(TimeSpan.FromMilliseconds(subtitle.StartTime.TotalMilliseconds * (100.0 / speedPercent)));
subtitle.EndTime = TimeSpan.FromMilliseconds(subtitle.EndTime.TotalMilliseconds * (100.0 / speedPercent));
var factor = 100.0 / speedPercent;
subtitle.SetTimes(
TimeSpan.FromMilliseconds(subtitle.StartTime.TotalMilliseconds * factor),
TimeSpan.FromMilliseconds(subtitle.EndTime.TotalMilliseconds * factor));
}
}
}