diff --git a/CHANGELOG.md b/CHANGELOG.md
index 7bce3eeb..5a820891 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -34,6 +34,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
- This may be needed with misbehaving NVIDIA drivers on Windows
- Add health check error when invalid VAAPI device and VAAPI driver combination is used in an active ffmpeg profile
- This makes it obvious when hardware acceleration will not work as configured
+- Add button in schedule editor to clone schedule item
### Changed
- Start to make UI minimally responsive (functional on smaller screens)
diff --git a/ErsatzTV/Pages/ScheduleItemsEditor.razor b/ErsatzTV/Pages/ScheduleItemsEditor.razor
index 15f0d52b..7142e66c 100644
--- a/ErsatzTV/Pages/ScheduleItemsEditor.razor
+++ b/ErsatzTV/Pages/ScheduleItemsEditor.razor
@@ -36,6 +36,7 @@
+
Start Time
@@ -44,6 +45,7 @@
+
@@ -65,6 +67,11 @@
}
+
+
+
+
@if (!_schedule.ShuffleScheduleItems)
{
@@ -609,6 +616,55 @@
_schedule.Items.Remove(item);
}
+ private void CopyItem(ProgramScheduleItemEditViewModel item)
+ {
+ var newItem = new ProgramScheduleItemEditViewModel
+ {
+ Index = item.Index + 1,
+ StartType = item.StartType,
+ StartTime = item.StartTime,
+ FixedStartTimeBehavior = item.FixedStartTimeBehavior,
+ PlayoutMode = item.PlayoutMode,
+ CollectionType = item.CollectionType,
+ Collection = item.Collection,
+ MultiCollection = item.MultiCollection,
+ SmartCollection = item.SmartCollection,
+ Playlist = item.Playlist,
+ MediaItem = item.MediaItem,
+ PlaybackOrder = item.PlaybackOrder,
+ FillWithGroupMode = item.FillWithGroupMode,
+ CustomTitle = item.CustomTitle,
+ GuideMode = item.GuideMode,
+ PreRollFiller = item.PreRollFiller,
+ MidRollFiller = item.MidRollFiller,
+ PostRollFiller = item.PostRollFiller,
+ TailFiller = item.TailFiller,
+ FallbackFiller = item.FallbackFiller,
+ Watermark = item.Watermark,
+ PreferredAudioLanguageCode = item.PreferredAudioLanguageCode,
+ PreferredAudioTitle = item.PreferredAudioTitle,
+ PreferredSubtitleLanguageCode = item.PreferredSubtitleLanguageCode,
+ SubtitleMode = item.SubtitleMode,
+
+ MultipleCount = item.MultipleCount,
+ PlayoutDuration = item.PlayoutDuration,
+ TailMode = item.TailMode,
+ DiscardToFillAttempts = item.DiscardToFillAttempts,
+ };
+
+ foreach (ProgramScheduleItemEditViewModel i in _schedule.Items.Filter(si => si.Index >= newItem.Index))
+ {
+ i.Index += 1;
+ }
+
+ _schedule.Items.Add(newItem);
+
+ if (_selectedItem is not null)
+ {
+ _selectedItem = newItem;
+ }
+ }
+
private void MoveItemUp(ProgramScheduleItemEditViewModel item)
{
// swap with lower index