From 57f5b3ddc2358b755848177266e140e5691051c1 Mon Sep 17 00:00:00 2001 From: markus101 Date: Tue, 8 Feb 2011 17:23:01 -0800 Subject: [PATCH] RSS Sync Timer Implemented using System.Timers.Timer --- NzbDrone.Core/Providers/ITimerProvider.cs | 9 ++-- NzbDrone.Core/Providers/TimerProvider.cs | 54 ++++++++++++++++++++--- 2 files changed, 53 insertions(+), 10 deletions(-) diff --git a/NzbDrone.Core/Providers/ITimerProvider.cs b/NzbDrone.Core/Providers/ITimerProvider.cs index f376660ad..c126cd27e 100644 --- a/NzbDrone.Core/Providers/ITimerProvider.cs +++ b/NzbDrone.Core/Providers/ITimerProvider.cs @@ -7,8 +7,11 @@ namespace NzbDrone.Core.Providers { public interface ITimerProvider { - void ResetTimer(); - void StartTimer(); - void StopTimer(); + void ResetRssSyncTimer(); + void StartRssSyncTimer(); + void StopRssSyncTimer(); + void SetRssSyncTimer(int minutes); + TimeSpan RssSyncTimeLeft(); + DateTime NextRssSyncTime(); } } diff --git a/NzbDrone.Core/Providers/TimerProvider.cs b/NzbDrone.Core/Providers/TimerProvider.cs index 7f3b08e4b..c665a6884 100644 --- a/NzbDrone.Core/Providers/TimerProvider.cs +++ b/NzbDrone.Core/Providers/TimerProvider.cs @@ -4,6 +4,7 @@ using System.Text; using System.Threading; using System.Timers; +using NLog; using NzbDrone.Core.Model.Notification; using Timer = System.Threading.Timer; @@ -12,26 +13,65 @@ namespace NzbDrone.Core.Providers public class TimerProvider : ITimerProvider { private ProgressNotification _seriesSyncNotification; - private Thread _seriesSyncThread; + private IRssSyncProvider _rssSyncProvider; + private Thread _rssSyncThread; private System.Timers.Timer _rssSyncTimer; + private static readonly Logger Logger = LogManager.GetCurrentClassLogger(); + + private DateTime _rssSyncNextInterval; + + public TimerProvider(IRssSyncProvider rssSyncProvider) + { + _rssSyncProvider = rssSyncProvider; + } #region ITimerProvider Members - public void ResetTimer() + public void ResetRssSyncTimer() { - throw new NotImplementedException(); + double interval = _rssSyncTimer.Interval; + _rssSyncTimer .Interval= interval; } - public void StartTimer() + public void StartRssSyncTimer() { - throw new NotImplementedException(); + if (_rssSyncTimer.Interval < 900000) //If Timer is less than 15 minutes, throw an error! + { + Logger.Error("RSS Sync Frequency is invalid, please set the interval first"); + throw new InvalidOperationException("RSS Sync Frequency Invalid"); + } + + _rssSyncTimer.Elapsed +=new ElapsedEventHandler(RunSync); + _rssSyncTimer.Start(); + _rssSyncNextInterval = DateTime.Now.AddMilliseconds(_rssSyncTimer.Interval); } - public void StopTimer() + public void StopRssSyncTimer() { - throw new NotImplementedException(); + _rssSyncTimer.Stop(); + } + + public void SetRssSyncTimer(int minutes) + { + long ms = minutes*60*1000; + _rssSyncTimer.Interval = ms; + } + + public TimeSpan RssSyncTimeLeft() + { + return _rssSyncNextInterval.Subtract(DateTime.Now); + } + + public DateTime NextRssSyncTime() + { + return _rssSyncNextInterval; } #endregion + private void RunSync(object obj, ElapsedEventArgs args) + { + DateTime.Now.AddMilliseconds(_rssSyncTimer.Interval); + _rssSyncProvider.Begin(); + } } }