add multiple mode to schedule items (#2163)

This commit is contained in:
Jason Dove
2025-07-18 14:03:56 +00:00
committed by GitHub
parent cf6b9cf29a
commit 54be3761dd
24 changed files with 11875 additions and 33 deletions
+1 -1
View File
@@ -286,7 +286,7 @@
DialogResult result = await dialog.Result;
if (result is { Canceled: false, Data: ProgramScheduleViewModel schedule })
{
await Mediator.Send(new AddProgramScheduleItem(schedule.Id, StartType.Dynamic, null, null, PlayoutMode.One, ProgramScheduleItemCollectionType.Artist, null, null, null, ArtistId, null, PlaybackOrder.Shuffle, FillWithGroupMode.None, null, null, TailMode.None, null, null, GuideMode.Normal, null, null, null, null, null, null, null, null, null, null), _cts.Token);
await Mediator.Send(new AddProgramScheduleItem(schedule.Id, StartType.Dynamic, null, null, PlayoutMode.One, ProgramScheduleItemCollectionType.Artist, null, null, null, ArtistId, null, PlaybackOrder.Shuffle, FillWithGroupMode.None, MultipleMode.Count, null, null, TailMode.None, null, null, GuideMode.Normal, null, null, null, null, null, null, null, null, null, null), _cts.Token);
NavigationManager.NavigateTo($"schedules/{schedule.Id}/items");
}
}
+52 -6
View File
@@ -21,9 +21,21 @@
{
string start = _selectedItem.StartType == StartType.Fixed ? _selectedItem.StartTime == null ? string.Empty : DateTime.Today.Add(_selectedItem.StartTime.Value).ToShortTimeString() : "Dynamic";
var mode = _selectedItem.PlayoutMode.ToString();
@if (_selectedItem.PlayoutMode == PlayoutMode.Multiple && _selectedItem.MultipleCount.HasValue)
@if (_selectedItem.PlayoutMode is PlayoutMode.Multiple)
{
mode += $" ({_selectedItem.MultipleCount})";
switch (_selectedItem.MultipleMode)
{
case MultipleMode.CollectionSize:
mode = "Collection Size";
break;
case MultipleMode.PlaylistItemSize:
mode = "Playlist Item Size";
break;
case MultipleMode.Count:
default:
mode += $" ({_selectedItem.MultipleCount})";
break;
}
}
var result = $"{_schedule.Name} ({start} - {_selectedItem.CollectionName} - {mode})";
@@ -88,10 +100,25 @@
</MudTd>
<MudTd DataLabel="Playout Mode">
<MudText Typo="@Typo.body2">
@context.PlayoutMode
@if (context.PlayoutMode == PlayoutMode.Multiple && context.MultipleCount.HasValue)
@if (context.PlayoutMode is PlayoutMode.Multiple)
{
@($" ({context.MultipleCount})")
switch (context.MultipleMode)
{
case MultipleMode.CollectionSize:
@:Collection Size
break;
case MultipleMode.PlaylistItemSize:
@:Playlist Item Size
break;
case MultipleMode.Count:
default:
@($"Multiple ({context.MultipleCount})")
break;
}
}
else
{
@context.PlayoutMode
}
</MudText>
</MudTd>
@@ -346,13 +373,29 @@
<MudSelectItem Value="PlayoutMode.Duration">Duration</MudSelectItem>
</MudSelect>
</MudStack>
<MudStack Row="true" Breakpoint="Breakpoint.SmAndDown" Class="form-field-stack gap-md-8 mb-5">
<div class="d-flex">
<MudText>Multiple Mode</MudText>
</div>
<MudSelect @bind-Value="@_selectedItem.MultipleMode" For="@(() => _selectedItem.MultipleMode)">
<MudSelectItem Value="MultipleMode.Count">Count</MudSelectItem>
@if (_selectedItem.CollectionType is not ProgramScheduleItemCollectionType.Playlist)
{
<MudSelectItem Value="MultipleMode.CollectionSize">Collection Size</MudSelectItem>
}
else
{
<MudSelectItem Value="MultipleMode.PlaylistItemSize">Playlist Item Size</MudSelectItem>
}
</MudSelect>
</MudStack>
<MudStack Row="true" Breakpoint="Breakpoint.SmAndDown" Class="form-field-stack gap-md-8 mb-5">
<div class="d-flex">
<MudText>Multiple Count</MudText>
</div>
<MudTextField @bind-Value="@_selectedItem.MultipleCount"
For="@(() => _selectedItem.MultipleCount)"
Disabled="@(_selectedItem.PlayoutMode != PlayoutMode.Multiple)"/>
Disabled="@(_selectedItem.PlayoutMode is not PlayoutMode.Multiple || _selectedItem.MultipleMode is not MultipleMode.Count)"/>
</MudStack>
<MudStack Row="true" Breakpoint="Breakpoint.SmAndDown" Class="form-field-stack gap-md-8 mb-5">
<div class="d-flex">
@@ -723,6 +766,7 @@
switch (item)
{
case ProgramScheduleItemMultipleViewModel multiple:
result.MultipleMode = multiple.MultipleMode;
result.MultipleCount = multiple.Count;
break;
case ProgramScheduleItemDurationViewModel duration:
@@ -786,6 +830,7 @@
PreferredSubtitleLanguageCode = item.PreferredSubtitleLanguageCode,
SubtitleMode = item.SubtitleMode,
MultipleMode = item.MultipleMode,
MultipleCount = item.MultipleCount,
PlayoutDuration = item.PlayoutDuration,
TailMode = item.TailMode,
@@ -841,6 +886,7 @@
item.Playlist?.Id,
item.PlaybackOrder,
item.FillWithGroupMode,
item.MultipleMode,
item.MultipleCount,
item.PlayoutDuration,
item.TailMode,
+1 -1
View File
@@ -259,7 +259,7 @@
DialogResult result = await dialog.Result;
if (result is { Canceled: false, Data: ProgramScheduleViewModel schedule })
{
await Mediator.Send(new AddProgramScheduleItem(schedule.Id, StartType.Dynamic, null, null, PlayoutMode.One, ProgramScheduleItemCollectionType.TelevisionSeason, null, null, null, SeasonId, null, PlaybackOrder.Shuffle, FillWithGroupMode.None, null, null, TailMode.None, null, null, GuideMode.Normal, null, null, null, null, null, null, null, null, null, null), _cts.Token);
await Mediator.Send(new AddProgramScheduleItem(schedule.Id, StartType.Dynamic, null, null, PlayoutMode.One, ProgramScheduleItemCollectionType.TelevisionSeason, null, null, null, SeasonId, null, PlaybackOrder.Shuffle, FillWithGroupMode.None, MultipleMode.Count, null, null, TailMode.None, null, null, GuideMode.Normal, null, null, null, null, null, null, null, null, null, null), _cts.Token);
NavigationManager.NavigateTo($"schedules/{schedule.Id}/items");
}
}
+1 -1
View File
@@ -251,7 +251,7 @@
DialogResult result = await dialog.Result;
if (result is { Canceled: false, Data: ProgramScheduleViewModel schedule })
{
await Mediator.Send(new AddProgramScheduleItem(schedule.Id, StartType.Dynamic, null, null, PlayoutMode.One, ProgramScheduleItemCollectionType.TelevisionShow, null, null, null, ShowId, null, PlaybackOrder.Shuffle, FillWithGroupMode.None, null, null, TailMode.None, null, null, GuideMode.Normal, null, null, null, null, null, null, null, null, null, null), _cts.Token);
await Mediator.Send(new AddProgramScheduleItem(schedule.Id, StartType.Dynamic, null, null, PlayoutMode.One, ProgramScheduleItemCollectionType.TelevisionShow, null, null, null, ShowId, null, PlaybackOrder.Shuffle, FillWithGroupMode.None, MultipleMode.Count, null, null, TailMode.None, null, null, GuideMode.Normal, null, null, null, null, null, null, null, null, null, null), _cts.Token);
NavigationManager.NavigateTo($"schedules/{schedule.Id}/items");
}
}
@@ -13,7 +13,10 @@ public class ProgramScheduleItemEditViewModelValidator : AbstractValidator<Progr
() => RuleFor(i => i.StartTime).NotNull());
When(
i => i.PlayoutMode == PlayoutMode.Multiple,
() => RuleFor(i => i.MultipleCount).NotNull().GreaterThanOrEqualTo(0));
() =>
{
When(i => i.MultipleMode is MultipleMode.Count, () => RuleFor(i => i.MultipleCount).NotNull().GreaterThan(0));
});
When(
i => i.PlayoutMode == PlayoutMode.Duration,
() =>
@@ -104,6 +104,8 @@ public class ProgramScheduleItemEditViewModel : INotifyPropertyChanged
public PlaybackOrder PlaybackOrder { get; set; }
public MultipleMode MultipleMode { get; set; }
public int? MultipleCount
{
get => PlayoutMode == PlayoutMode.Multiple ? _multipleCount : null;