Browse Source

add button to copy block item (#1562)

pull/1563/head
Jason Dove 2 years ago committed by GitHub
parent
commit
4805d0d40f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 2
      ErsatzTV.Core/Scheduling/BlockScheduling/BlockPlayoutBuilder.cs
  2. 43
      ErsatzTV.Core/Scheduling/BlockScheduling/BlockPlayoutPreviewBuilder.cs
  3. 29
      ErsatzTV/Pages/BlockEditor.razor

2
ErsatzTV.Core/Scheduling/BlockScheduling/BlockPlayoutBuilder.cs

@ -17,7 +17,7 @@ public class BlockPlayoutBuilder( @@ -17,7 +17,7 @@ public class BlockPlayoutBuilder(
ILogger<BlockPlayoutBuilder> logger)
: 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(
"Building block playout {PlayoutId} for channel {ChannelNumber} - {ChannelName}",

43
ErsatzTV.Core/Scheduling/BlockScheduling/BlockPlayoutPreviewBuilder.cs

@ -19,8 +19,24 @@ public class BlockPlayoutPreviewBuilder( @@ -19,8 +19,24 @@ public class BlockPlayoutPreviewBuilder(
artistRepository,
logger), IBlockPlayoutPreviewBuilder
{
private readonly Dictionary<Guid, System.Collections.Generic.HashSet<CollectionKey>> _randomizedCollections = [];
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 IMediaCollectionEnumerator GetEnumerator(
@ -30,16 +46,25 @@ public class BlockPlayoutPreviewBuilder( @@ -30,16 +46,25 @@ public class BlockPlayoutPreviewBuilder(
string historyKey,
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);
enumerator.ResetState(
new CollectionEnumeratorState
{
Seed = new Random().Next(),
Index = new Random().Next(collectionMediaItems[collectionKey].Count)
});
if (!_randomizedCollections[playout.Channel.UniqueId].Contains(collectionKey))
{
enumerator.ResetState(
new CollectionEnumeratorState
{
Seed = new Random().Next(),
Index = new Random().Next(collectionMediaItems[collectionKey].Count)
});
_randomizedCollections[playout.Channel.UniqueId].Add(collectionKey);
}
return enumerator;
}

29
ErsatzTV/Pages/BlockEditor.razor

@ -53,6 +53,7 @@ @@ -53,6 +53,7 @@
<col style="width: 60px;"/>
<col style="width: 60px;"/>
<col style="width: 60px;"/>
<col style="width: 60px;"/>
</ColGroup>
<HeaderContent>
<MudTh>Collection</MudTh>
@ -60,6 +61,7 @@ @@ -60,6 +61,7 @@
<MudTh/>
<MudTh/>
<MudTh/>
<MudTh/>
</HeaderContent>
<RowTemplate>
<MudTd DataLabel="Collection">
@ -72,6 +74,11 @@ @@ -72,6 +74,11 @@
@context.PlaybackOrder
</MudText>
</MudTd>
<MudTd>
<MudIconButton Icon="@Icons.Material.Filled.ContentCopy"
OnClick="@(_ => CopyItem(context))">
</MudIconButton>
</MudTd>
<MudTd>
<MudIconButton Icon="@Icons.Material.Filled.ArrowUpward"
OnClick="@(_ => MoveItemUp(context))"
@ -390,6 +397,28 @@ @@ -390,6 +397,28 @@
_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)
{
_selectedItem = null;

Loading…
Cancel
Save