aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Common/ScheduledTasks/IntervalTrigger.cs
diff options
context:
space:
mode:
Diffstat (limited to 'MediaBrowser.Common/ScheduledTasks/IntervalTrigger.cs')
-rw-r--r--MediaBrowser.Common/ScheduledTasks/IntervalTrigger.cs24
1 files changed, 20 insertions, 4 deletions
diff --git a/MediaBrowser.Common/ScheduledTasks/IntervalTrigger.cs b/MediaBrowser.Common/ScheduledTasks/IntervalTrigger.cs
index 455a70d7e..41073516a 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
{
@@ -32,12 +33,27 @@ namespace MediaBrowser.Common.ScheduledTasks
/// <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(Interval);
+
+ if (DateTime.UtcNow > triggerDate)
+ {
+ triggerDate = DateTime.UtcNow;
+
+ if (isApplicationStartup)
+ {
+ triggerDate = triggerDate.AddMinutes(1);
+ }
+ }
+
+ Timer = new Timer(state => OnTriggered(), null, triggerDate - DateTime.UtcNow, TimeSpan.FromMilliseconds(-1));
}
/// <summary>