32 lines
917 B
C#
32 lines
917 B
C#
using System;
|
|
|
|
namespace Server.Engines.Events;
|
|
|
|
public abstract class ScheduledEvent : BaseScheduledEvent
|
|
{
|
|
public IRecurrencePattern Recurrence { get; }
|
|
public TimeOnly Time { get; }
|
|
public DateTime EndDate { get; }
|
|
|
|
public ScheduledEvent(TimeOnly time, IRecurrencePattern recurrence = null)
|
|
: this(time, DateTime.MaxValue, recurrence)
|
|
{
|
|
}
|
|
|
|
public ScheduledEvent(
|
|
TimeOnly time,
|
|
DateTime endOn,
|
|
IRecurrencePattern recurrence = null
|
|
)
|
|
{
|
|
Time = time;
|
|
Recurrence = recurrence;
|
|
EndDate = endOn == DateTime.MaxValue || endOn.Kind == DateTimeKind.Utc ? endOn : endOn.LocalToUtc(TimeZone);
|
|
}
|
|
|
|
protected override DateTime GetNextOccurrence(DateTime after)
|
|
{
|
|
var next = Recurrence?.GetNextOccurrence(after, Time, TimeZone) ?? DateTime.MaxValue;
|
|
return next >= EndDate ? DateTime.MaxValue : next;
|
|
}
|
|
}
|