use better fields for filler preset duration (#2442)

This commit is contained in:
Jason Dove
2025-09-18 15:56:51 +00:00
committed by GitHub
parent c8679144c5
commit 004da8b7aa
3 changed files with 95 additions and 6 deletions
+3
View File
@@ -58,6 +58,9 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
- Fix deco dead air fallback selection and duration on mirror channels
- Fix fallback filler duration on mirror channels
### Changed
- Filler presets: use separate text fields for `hours`, `minutes` and `seconds` duration
## [25.6.0] - 2025-09-14
### Added
- Classic schedules: allow selecting multiple graphics elements on schedule items
+21 -1
View File
@@ -56,7 +56,27 @@
<div class="d-flex">
<MudText>Duration</MudText>
</div>
<MudTimePicker @bind-Time="@_model.Duration" For="@(() => _model.Duration)" Disabled="@(_model.FillerMode != FillerMode.Duration)"/>
<MudTextField T="int"
@bind-Value="_model.DurationHours"
Adornment="Adornment.End"
AdornmentText="hours"
Disabled="@(_model.FillerMode != FillerMode.Duration)"/>
</MudStack>
<MudStack Row="true" Breakpoint="Breakpoint.SmAndDown" Class="form-field-stack gap-md-8 mb-5">
<div class="d-flex"></div>
<MudTextField T="int"
@bind-Value="_model.DurationMinutes"
Adornment="Adornment.End"
AdornmentText="minutes"
Disabled="@(_model.FillerMode != FillerMode.Duration)"/>
</MudStack>
<MudStack Row="true" Breakpoint="Breakpoint.SmAndDown" Class="form-field-stack gap-md-8 mb-5">
<div class="d-flex"></div>
<MudTextField T="int"
@bind-Value="_model.DurationSeconds"
Adornment="Adornment.End"
AdornmentText="seconds"
Disabled="@(_model.FillerMode != FillerMode.Duration)"/>
</MudStack>
<MudStack Row="true" Breakpoint="Breakpoint.SmAndDown" Class="form-field-stack gap-md-8 mb-5">
<div class="d-flex">
@@ -13,6 +13,9 @@ public class FillerPresetEditViewModel
private CollectionType _collectionType;
private int? _count;
private TimeSpan? _duration;
private int _durationHours;
private int _durationMinutes;
private int _durationSeconds;
private FillerKind _fillerKind;
private FillerMode _fillerMode;
private int? _padToNearestMinute;
@@ -52,7 +55,44 @@ public class FillerPresetEditViewModel
public TimeSpan? Duration
{
get => FillerMode == FillerMode.Duration ? _duration : null;
set => _duration = value;
set
{
_duration = value;
CheckDuration();
}
}
public int DurationHours
{
get => _durationHours;
set
{
_duration = TimeSpan.FromHours(value) + TimeSpan.FromMinutes(_duration?.Minutes ?? 0) +
TimeSpan.FromSeconds(_duration?.Seconds ?? 0);
CheckDuration();
}
}
public int DurationMinutes
{
get => _durationMinutes;
set
{
_duration = TimeSpan.FromHours(_duration?.Hours ?? 0) + TimeSpan.FromMinutes(value) +
TimeSpan.FromSeconds(_duration?.Seconds ?? 0);
CheckDuration();
}
}
public int DurationSeconds
{
get => _durationSeconds;
set
{
_duration = TimeSpan.FromHours(_duration?.Hours ?? 0) + TimeSpan.FromMinutes(_duration?.Minutes ?? 0) +
TimeSpan.FromSeconds(value);
CheckDuration();
}
}
public int? Count
@@ -106,7 +146,7 @@ public class FillerPresetEditViewModel
Name,
FillerKind,
FillerMode,
Duration.Map(FixDuration),
Duration,
Count,
PadToNearestMinute,
AllowWatermarks,
@@ -124,7 +164,7 @@ public class FillerPresetEditViewModel
Name,
FillerKind,
FillerMode,
Duration.Map(FixDuration),
Duration,
Count,
PadToNearestMinute,
AllowWatermarks,
@@ -137,6 +177,32 @@ public class FillerPresetEditViewModel
Expression,
UseChaptersAsMediaItems);
private static TimeSpan FixDuration(TimeSpan duration) =>
duration > TimeSpan.FromDays(1) ? duration.Subtract(TimeSpan.FromDays(1)) : duration;
private void CheckDuration()
{
if (_fillerMode is FillerMode.Duration)
{
_duration ??= TimeSpan.Zero;
if (_duration > TimeSpan.FromHours(24))
{
_duration = TimeSpan.FromHours(24);
}
if (_duration < TimeSpan.FromSeconds(1))
{
_duration = TimeSpan.FromSeconds(1);
}
_durationHours = (int)_duration.Value.TotalHours;
_durationMinutes = _duration.Value.Minutes;
_durationSeconds = _duration.Value.Seconds;
}
else
{
_duration = null;
_durationHours = 0;
_durationMinutes = 0;
_durationSeconds = 0;
}
}
}