diff options
Diffstat (limited to 'MediaBrowser.Common/ScheduledTasks/IntervalTrigger.cs')
| -rw-r--r-- | MediaBrowser.Common/ScheduledTasks/IntervalTrigger.cs | 37 |
1 files changed, 33 insertions, 4 deletions
diff --git a/MediaBrowser.Common/ScheduledTasks/IntervalTrigger.cs b/MediaBrowser.Common/ScheduledTasks/IntervalTrigger.cs index 455a70d7e..b615adf81 100644 --- a/MediaBrowser.Common/ScheduledTasks/IntervalTrigger.cs +++ b/MediaBrowser.Common/ScheduledTasks/IntervalTrigger.cs @@ -1,6 +1,7 @@ -using System; +using MediaBrowser.Model.Events; +using MediaBrowser.Model.Tasks; +using System; using System.Threading; -using MediaBrowser.Model.Events; namespace MediaBrowser.Common.ScheduledTasks { @@ -30,14 +31,42 @@ namespace MediaBrowser.Common.ScheduledTasks public TaskExecutionOptions TaskOptions { get; set; } /// <summary> + /// Gets or sets the first run delay. + /// </summary> + /// <value>The first run delay.</value> + public TimeSpan FirstRunDelay { get; set; } + + public IntervalTrigger() + { + FirstRunDelay = TimeSpan.FromHours(1); + } + + /// <summary> /// Stars waiting for the trigger action /// </summary> + /// <param name="lastResult">The last result.</param> /// <param name="isApplicationStartup">if set to <c>true</c> [is application startup].</param> - public void Start(bool isApplicationStartup) + public void Start(TaskResult lastResult, bool isApplicationStartup) { DisposeTimer(); - Timer = new Timer(state => OnTriggered(), null, Interval, TimeSpan.FromMilliseconds(-1)); + var triggerDate = lastResult != null ? + lastResult.EndTimeUtc.Add(Interval) : + DateTime.UtcNow.Add(FirstRunDelay); + + if (DateTime.UtcNow > triggerDate) + { + if (isApplicationStartup) + { + triggerDate = DateTime.UtcNow.AddMinutes(5); + } + else + { + triggerDate = DateTime.UtcNow.Add(Interval); + } + } + + Timer = new Timer(state => OnTriggered(), null, triggerDate - DateTime.UtcNow, TimeSpan.FromMilliseconds(-1)); } /// <summary> |
