291 lines
7.8 KiB
C#
291 lines
7.8 KiB
C#
using System.Diagnostics.CodeAnalysis;
|
|
using ErsatzTV.Core.Domain.Filler;
|
|
using ErsatzTV.Core.Scheduling.Engine;
|
|
using IronPython.Runtime;
|
|
|
|
namespace ErsatzTV.Core.Scheduling.ScriptedScheduling.Modules;
|
|
|
|
[SuppressMessage("Naming", "CA1707:Identifiers should not contain underscores")]
|
|
[SuppressMessage("Usage", "VSTHRD002:Avoid problematic synchronous waits")]
|
|
[SuppressMessage("ReSharper", "InconsistentNaming")]
|
|
[SuppressMessage("ReSharper", "UnusedMember.Global")]
|
|
public class PlayoutModule(ISchedulingEngine schedulingEngine)
|
|
{
|
|
public int FailureCount { get; private set; }
|
|
|
|
// content instructions
|
|
|
|
public void add_all(
|
|
string content,
|
|
string filler_kind = null,
|
|
string custom_title = null,
|
|
bool disable_watermarks = false)
|
|
{
|
|
Option<FillerKind> maybeFillerKind = Option<FillerKind>.None;
|
|
if (Enum.TryParse(filler_kind, ignoreCase: true, out FillerKind fillerKind))
|
|
{
|
|
maybeFillerKind = fillerKind;
|
|
}
|
|
|
|
bool success = schedulingEngine.AddAll(content, maybeFillerKind, custom_title, disable_watermarks);
|
|
if (success)
|
|
{
|
|
FailureCount = 0;
|
|
}
|
|
else
|
|
{
|
|
FailureCount++;
|
|
}
|
|
}
|
|
|
|
public void add_count(
|
|
string content,
|
|
int count,
|
|
string filler_kind = null,
|
|
string custom_title = null,
|
|
bool disable_watermarks = false)
|
|
{
|
|
Option<FillerKind> maybeFillerKind = Option<FillerKind>.None;
|
|
if (Enum.TryParse(filler_kind, ignoreCase: true, out FillerKind fillerKind))
|
|
{
|
|
maybeFillerKind = fillerKind;
|
|
}
|
|
|
|
bool success = schedulingEngine.AddCount(content, count, maybeFillerKind, custom_title, disable_watermarks);
|
|
if (success)
|
|
{
|
|
FailureCount = 0;
|
|
}
|
|
else
|
|
{
|
|
FailureCount++;
|
|
}
|
|
}
|
|
|
|
public void add_duration(
|
|
string content,
|
|
string duration,
|
|
string fallback = null,
|
|
bool trim = false,
|
|
int discard_attempts = 0,
|
|
bool stop_before_end = true,
|
|
bool offline_tail = false,
|
|
string filler_kind = null,
|
|
string custom_title = null,
|
|
bool disable_watermarks = false)
|
|
{
|
|
Option<FillerKind> maybeFillerKind = Option<FillerKind>.None;
|
|
if (Enum.TryParse(filler_kind, ignoreCase: true, out FillerKind fillerKind))
|
|
{
|
|
maybeFillerKind = fillerKind;
|
|
}
|
|
|
|
bool success = schedulingEngine.AddDuration(
|
|
content,
|
|
duration,
|
|
fallback,
|
|
trim,
|
|
discard_attempts,
|
|
stop_before_end,
|
|
offline_tail,
|
|
maybeFillerKind,
|
|
custom_title,
|
|
disable_watermarks);
|
|
|
|
if (success)
|
|
{
|
|
FailureCount = 0;
|
|
}
|
|
else
|
|
{
|
|
FailureCount++;
|
|
}
|
|
}
|
|
|
|
public void pad_to_next(
|
|
string content,
|
|
int minutes,
|
|
string fallback = null,
|
|
bool trim = false,
|
|
int discard_attempts = 0,
|
|
string filler_kind = null,
|
|
string custom_title = null,
|
|
bool disable_watermarks = false)
|
|
{
|
|
Option<FillerKind> maybeFillerKind = Option<FillerKind>.None;
|
|
if (Enum.TryParse(filler_kind, ignoreCase: true, out FillerKind fillerKind))
|
|
{
|
|
maybeFillerKind = fillerKind;
|
|
}
|
|
|
|
bool success = schedulingEngine.PadToNext(
|
|
content,
|
|
minutes,
|
|
fallback,
|
|
trim,
|
|
discard_attempts,
|
|
maybeFillerKind,
|
|
custom_title,
|
|
disable_watermarks);
|
|
|
|
if (success)
|
|
{
|
|
FailureCount = 0;
|
|
}
|
|
else
|
|
{
|
|
FailureCount++;
|
|
}
|
|
}
|
|
|
|
public void pad_until(
|
|
string content,
|
|
string when,
|
|
bool tomorrow = false,
|
|
string fallback = null,
|
|
bool trim = false,
|
|
int discard_attempts = 0,
|
|
bool stop_before_end = true,
|
|
bool offline_tail = false,
|
|
string filler_kind = null,
|
|
string custom_title = null,
|
|
bool disable_watermarks = false)
|
|
{
|
|
Option<FillerKind> maybeFillerKind = Option<FillerKind>.None;
|
|
if (Enum.TryParse(filler_kind, ignoreCase: true, out FillerKind fillerKind))
|
|
{
|
|
maybeFillerKind = fillerKind;
|
|
}
|
|
|
|
bool success = schedulingEngine.PadUntil(
|
|
content,
|
|
when,
|
|
tomorrow,
|
|
fallback,
|
|
trim,
|
|
discard_attempts,
|
|
stop_before_end,
|
|
offline_tail,
|
|
maybeFillerKind,
|
|
custom_title,
|
|
disable_watermarks);
|
|
|
|
if (success)
|
|
{
|
|
FailureCount = 0;
|
|
}
|
|
else
|
|
{
|
|
FailureCount++;
|
|
}
|
|
}
|
|
|
|
|
|
// control instructions
|
|
|
|
public void start_epg_group(bool advance = true)
|
|
{
|
|
schedulingEngine.LockGuideGroup(advance);
|
|
}
|
|
|
|
public void stop_epg_group()
|
|
{
|
|
schedulingEngine.UnlockGuideGroup();
|
|
}
|
|
|
|
public void graphics_on(string graphics, PythonDictionary variables = null)
|
|
{
|
|
var maybeVariables = new Dictionary<string, string>();
|
|
if (variables != null)
|
|
{
|
|
maybeVariables = variables.ToDictionary(v => v.Key.ToString(), v => v.Value.ToString());
|
|
}
|
|
|
|
schedulingEngine
|
|
.GraphicsOn([graphics], maybeVariables)
|
|
.GetAwaiter()
|
|
.GetResult();
|
|
}
|
|
|
|
public void graphics_on(PythonList graphics, PythonDictionary variables = null)
|
|
{
|
|
var maybeVariables = new Dictionary<string, string>();
|
|
if (variables != null)
|
|
{
|
|
maybeVariables = variables.ToDictionary(v => v.Key.ToString(), v => v.Value.ToString());
|
|
}
|
|
|
|
schedulingEngine
|
|
.GraphicsOn(
|
|
graphics.Select(g => g.ToString()).ToList(),
|
|
maybeVariables)
|
|
.GetAwaiter()
|
|
.GetResult();
|
|
}
|
|
|
|
public void graphics_off(string graphics = null)
|
|
{
|
|
if (string.IsNullOrWhiteSpace(graphics))
|
|
{
|
|
schedulingEngine.GraphicsOff([]).GetAwaiter().GetResult();
|
|
}
|
|
else
|
|
{
|
|
schedulingEngine.GraphicsOff([graphics]).GetAwaiter().GetResult();
|
|
}
|
|
}
|
|
|
|
public void graphics_off(PythonList graphics)
|
|
{
|
|
schedulingEngine.GraphicsOff(graphics.Select(g => g.ToString()).ToList()).GetAwaiter().GetResult();
|
|
}
|
|
|
|
public void watermark_on(string watermark)
|
|
{
|
|
schedulingEngine.WatermarkOn([watermark]).GetAwaiter().GetResult();
|
|
}
|
|
|
|
public void watermark_on(PythonList watermark)
|
|
{
|
|
schedulingEngine
|
|
.WatermarkOn(watermark.Select(g => g.ToString()).ToList())
|
|
.GetAwaiter()
|
|
.GetResult();
|
|
}
|
|
|
|
public void watermark_off(string watermark = null)
|
|
{
|
|
if (string.IsNullOrWhiteSpace(watermark))
|
|
{
|
|
schedulingEngine.WatermarkOff([]).GetAwaiter().GetResult();
|
|
}
|
|
else
|
|
{
|
|
schedulingEngine.WatermarkOff([watermark]).GetAwaiter().GetResult();
|
|
}
|
|
}
|
|
|
|
public void watermark_off(PythonList watermark)
|
|
{
|
|
schedulingEngine.WatermarkOff(watermark.Select(g => g.ToString()).ToList()).GetAwaiter().GetResult();
|
|
}
|
|
|
|
public void skip_items(string content, int count)
|
|
{
|
|
schedulingEngine.SkipItems(content, count);
|
|
}
|
|
|
|
public void skip_to_item(string content, int season, int episode)
|
|
{
|
|
schedulingEngine.SkipToItem(content, season, episode);
|
|
}
|
|
|
|
public void wait_until(string when, bool tomorrow = false, bool rewind_on_reset = false)
|
|
{
|
|
if (TimeOnly.TryParse(when, out TimeOnly waitUntil))
|
|
{
|
|
schedulingEngine.WaitUntil(waitUntil, tomorrow, rewind_on_reset);
|
|
}
|
|
}
|
|
}
|