add button to copy block item (#1562)
This commit is contained in:
@@ -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;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
Reference in New Issue
Block a user