add button to copy block item (#1562)

This commit is contained in:
Jason Dove
2024-01-16 10:30:50 -06:00
committed by GitHub
parent ef3b941a39
commit 4805d0d40f
3 changed files with 64 additions and 10 deletions
@@ -17,7 +17,7 @@ public class BlockPlayoutBuilder(
ILogger<BlockPlayoutBuilder> logger) ILogger<BlockPlayoutBuilder> logger)
: IBlockPlayoutBuilder : IBlockPlayoutBuilder
{ {
public async Task<Playout> Build(Playout playout, PlayoutBuildMode mode, CancellationToken cancellationToken) public virtual async Task<Playout> Build(Playout playout, PlayoutBuildMode mode, CancellationToken cancellationToken)
{ {
Logger.LogDebug( Logger.LogDebug(
"Building block playout {PlayoutId} for channel {ChannelNumber} - {ChannelName}", "Building block playout {PlayoutId} for channel {ChannelNumber} - {ChannelName}",
@@ -19,8 +19,24 @@ public class BlockPlayoutPreviewBuilder(
artistRepository, artistRepository,
logger), IBlockPlayoutPreviewBuilder logger), IBlockPlayoutPreviewBuilder
{ {
private readonly Dictionary<Guid, System.Collections.Generic.HashSet<CollectionKey>> _randomizedCollections = [];
protected override ILogger Logger => NullLogger.Instance; protected override ILogger Logger => NullLogger.Instance;
public override async Task<Playout> Build(
Playout playout,
PlayoutBuildMode mode,
CancellationToken cancellationToken)
{
_randomizedCollections.Add(playout.Channel.UniqueId, []);
Playout result = await base.Build(playout, mode, cancellationToken);
_randomizedCollections.Remove(playout.Channel.UniqueId);
return result;
}
protected override Task<int> GetDaysToBuild() => Task.FromResult(1); protected override Task<int> GetDaysToBuild() => Task.FromResult(1);
protected override IMediaCollectionEnumerator GetEnumerator( protected override IMediaCollectionEnumerator GetEnumerator(
@@ -30,16 +46,25 @@ public class BlockPlayoutPreviewBuilder(
string historyKey, string historyKey,
Map<CollectionKey, List<MediaItem>> collectionMediaItems) Map<CollectionKey, List<MediaItem>> collectionMediaItems)
{ {
IMediaCollectionEnumerator enumerator = base.GetEnumerator(playout, blockItem, currentTime, historyKey, collectionMediaItems); IMediaCollectionEnumerator enumerator = base.GetEnumerator(
playout,
blockItem,
currentTime,
historyKey,
collectionMediaItems);
var collectionKey = CollectionKey.ForBlockItem(blockItem); var collectionKey = CollectionKey.ForBlockItem(blockItem);
if (!_randomizedCollections[playout.Channel.UniqueId].Contains(collectionKey))
enumerator.ResetState( {
new CollectionEnumeratorState enumerator.ResetState(
{ new CollectionEnumeratorState
Seed = new Random().Next(), {
Index = new Random().Next(collectionMediaItems[collectionKey].Count) Seed = new Random().Next(),
}); Index = new Random().Next(collectionMediaItems[collectionKey].Count)
});
_randomizedCollections[playout.Channel.UniqueId].Add(collectionKey);
}
return enumerator; return enumerator;
} }
+29
View File
@@ -53,6 +53,7 @@
<col style="width: 60px;"/> <col style="width: 60px;"/>
<col style="width: 60px;"/> <col style="width: 60px;"/>
<col style="width: 60px;"/> <col style="width: 60px;"/>
<col style="width: 60px;"/>
</ColGroup> </ColGroup>
<HeaderContent> <HeaderContent>
<MudTh>Collection</MudTh> <MudTh>Collection</MudTh>
@@ -60,6 +61,7 @@
<MudTh/> <MudTh/>
<MudTh/> <MudTh/>
<MudTh/> <MudTh/>
<MudTh/>
</HeaderContent> </HeaderContent>
<RowTemplate> <RowTemplate>
<MudTd DataLabel="Collection"> <MudTd DataLabel="Collection">
@@ -72,6 +74,11 @@
@context.PlaybackOrder @context.PlaybackOrder
</MudText> </MudText>
</MudTd> </MudTd>
<MudTd>
<MudIconButton Icon="@Icons.Material.Filled.ContentCopy"
OnClick="@(_ => CopyItem(context))">
</MudIconButton>
</MudTd>
<MudTd> <MudTd>
<MudIconButton Icon="@Icons.Material.Filled.ArrowUpward" <MudIconButton Icon="@Icons.Material.Filled.ArrowUpward"
OnClick="@(_ => MoveItemUp(context))" OnClick="@(_ => MoveItemUp(context))"
@@ -390,6 +397,28 @@
_selectedItem = item; _selectedItem = item;
} }
private void CopyItem(BlockItemEditViewModel item)
{
var newItem = new BlockItemEditViewModel
{
Index = item.Index + 1,
PlaybackOrder = item.PlaybackOrder,
CollectionType = item.CollectionType,
Collection = item.Collection,
MultiCollection = item.MultiCollection,
SmartCollection = item.SmartCollection,
MediaItem = item.MediaItem
};
foreach (BlockItemEditViewModel i in _block.Items.Filter(bi => bi.Index >= newItem.Index))
{
i.Index += 1;
}
_block.Items.Add(newItem);
_selectedItem = newItem;
}
private void RemoveBlockItem(BlockItemEditViewModel item) private void RemoveBlockItem(BlockItemEditViewModel item)
{ {
_selectedItem = null; _selectedItem = null;