aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Common/ScheduledTasks/IntervalTrigger.cs
diff options
context:
space:
mode:
authorLuke <luke.pulverenti@gmail.com>2015-09-02 11:50:00 -0400
committerLuke <luke.pulverenti@gmail.com>2015-09-02 11:50:00 -0400
commitf868dd81e856488280978006cbb67afc2677049d (patch)
tree616ba8ae846efe9ec889abeb12f6b2702c6b8592 /MediaBrowser.Common/ScheduledTasks/IntervalTrigger.cs
parentaf89446c20fb302087b82c18c28da92076dbc5ac (diff)
parente6d5901408ba7d8e344a27ea1f3b0046c40e56c1 (diff)
Merge pull request #1164 from MediaBrowser/dev
3.0.5724.1
Diffstat (limited to 'MediaBrowser.Common/ScheduledTasks/IntervalTrigger.cs')
-rw-r--r--MediaBrowser.Common/ScheduledTasks/IntervalTrigger.cs37
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>