|
|
|
|
using System;
|
|
|
|
|
using System.Collections.Generic;
|
|
|
|
|
using System.Linq;
|
|
|
|
|
using System.Text;
|
|
|
|
|
using System.Threading;
|
|
|
|
|
using System.Timers;
|
|
|
|
|
using NLog;
|
|
|
|
|
using NzbDrone.Core.Model.Notification;
|
|
|
|
|
using Timer = System.Threading.Timer;
|
|
|
|
|
|
|
|
|
|
namespace NzbDrone.Core.Providers
|
|
|
|
|
{
|
|
|
|
|
public class TimerProvider : ITimerProvider
|
|
|
|
|
{
|
|
|
|
|
private ProgressNotification _seriesSyncNotification;
|
|
|
|
|
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 ResetRssSyncTimer()
|
|
|
|
|
{
|
|
|
|
|
double interval = _rssSyncTimer.Interval;
|
|
|
|
|
_rssSyncTimer .Interval= interval;
|
|
|
|
|
}
|
|
|
|
|
public void StartRssSyncTimer()
|
|
|
|
|
{
|
|
|
|
|
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 StopRssSyncTimer()
|
|
|
|
|
{
|
|
|
|
|
_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();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|