Browse Source

use better fields for filler preset duration (#2442)

pull/2443/head
Jason Dove 4 months ago committed by GitHub
parent
commit
004da8b7aa
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
  1. 3
      CHANGELOG.md
  2. 22
      ErsatzTV/Pages/FillerPresetEditor.razor
  3. 76
      ErsatzTV/ViewModels/FillerPresetEditViewModel.cs

3
CHANGELOG.md

@ -58,6 +58,9 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). @@ -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

22
ErsatzTV/Pages/FillerPresetEditor.razor

@ -56,7 +56,27 @@ @@ -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">

76
ErsatzTV/ViewModels/FillerPresetEditViewModel.cs

@ -13,6 +13,9 @@ public class FillerPresetEditViewModel @@ -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 @@ -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 @@ -106,7 +146,7 @@ public class FillerPresetEditViewModel
Name,
FillerKind,
FillerMode,
Duration.Map(FixDuration),
Duration,
Count,
PadToNearestMinute,
AllowWatermarks,
@ -124,7 +164,7 @@ public class FillerPresetEditViewModel @@ -124,7 +164,7 @@ public class FillerPresetEditViewModel
Name,
FillerKind,
FillerMode,
Duration.Map(FixDuration),
Duration,
Count,
PadToNearestMinute,
AllowWatermarks,
@ -137,6 +177,32 @@ public class FillerPresetEditViewModel @@ -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;
}
}
}

Loading…
Cancel
Save