RSS Sync Timer Implemented using System.Timers.Timer

This commit is contained in:
markus101 2011-02-08 17:23:01 -08:00
parent 1086404152
commit 57f5b3ddc2
2 changed files with 53 additions and 10 deletions

View File

@ -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();
}
}

View File

@ -4,6 +4,7 @@ using System.Linq;
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();
}
}
}