1
0
mirror of https://github.com/Sonarr/Sonarr.git synced 2024-12-12 11:15:43 +02:00

TimerProvider will test every 1 minute to see if it matches a schedule for updating season or entire series.

Countdown now shows a real value from RSS Sync.

CentralDispatch updated to start RSSSyncTimer when run.
This commit is contained in:
markus101 2011-02-09 22:51:04 -08:00
parent fd4cf86694
commit 0fc75e8907
4 changed files with 75 additions and 13 deletions

View File

@ -70,15 +70,21 @@ public static void BindKernel()
_kernel.Bind<INotificationProvider>().To<NotificationProvider>().InSingletonScope();
_kernel.Bind<ILogProvider>().To<LogProvider>().InSingletonScope();
_kernel.Bind<IMediaFileProvider>().To<MediaFileProvider>().InSingletonScope();
_kernel.Bind<ITimerProvider>().To<TimerProvider>().InSingletonScope();
_kernel.Bind<IRepository>().ToMethod(c => new SimpleRepository(dbProvider, SimpleRepositoryOptions.RunMigrations)).InSingletonScope();
_kernel.Bind<IRepository>().ToConstant(logRepository).WhenInjectedInto<SubsonicTarget>().InSingletonScope();
_kernel.Bind<IRepository>().ToConstant(logRepository).WhenInjectedInto<LogProvider>().InSingletonScope();
ForceMigration(_kernel.Get<IRepository>());
SetupIndexers(_kernel.Get<IRepository>()); //Setup the default set of indexers on start-up
SetupDefaultQualityProfiles(_kernel.Get<IRepository>()); //Setup the default QualityProfiles on start-up
//Get the Timers going
var config = _kernel.Get<IConfigProvider>();
var timer = _kernel.Get<ITimerProvider>();
timer.SetRssSyncTimer(Convert.ToInt32(config.GetValue("SyncFrequency", "15", true)));
timer.StartRssSyncTimer();
}
}

View File

@ -13,5 +13,7 @@ public interface ITimerProvider
void SetRssSyncTimer(int minutes);
TimeSpan RssSyncTimeLeft();
DateTime NextRssSyncTime();
void StartMinuteTimer();
void StopMinuteTimer();
}
}

View File

@ -2,27 +2,35 @@
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 ISeriesProvider _seriesProvider;
private ISeasonProvider _seasonProvider;
private IEpisodeProvider _episodeProvider;
private Timer _rssSyncTimer;
private Timer _minuteTimer;
private static readonly Logger Logger = LogManager.GetCurrentClassLogger();
private DateTime _rssSyncNextInterval;
public TimerProvider(IRssSyncProvider rssSyncProvider)
public TimerProvider(IRssSyncProvider rssSyncProvider, ISeriesProvider seriesProvider, ISeasonProvider seasonProvider, IEpisodeProvider episodeProvider)
{
_rssSyncProvider = rssSyncProvider;
_seriesProvider = seriesProvider;
_seasonProvider = seasonProvider;
_episodeProvider = episodeProvider;
_rssSyncTimer = new Timer();
_minuteTimer = new Timer(60000);
}
#region ITimerProvider Members
@ -32,15 +40,16 @@ 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!
if (_rssSyncTimer.Interval < 900000) //If Timer is less than 15 minutes, throw an error! This should also be handled when saving the config, though a user could by-pass it by editing the DB directly... TNO (Trust No One)
{
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.Elapsed +=new ElapsedEventHandler(RunRssSync);
_rssSyncTimer.Start();
_rssSyncNextInterval = DateTime.Now.AddMilliseconds(_rssSyncTimer.Interval);
}
@ -66,12 +75,51 @@ public DateTime NextRssSyncTime()
return _rssSyncNextInterval;
}
public void StartMinuteTimer()
{
_minuteTimer.Elapsed += new ElapsedEventHandler(MinuteTimer_Elapsed);
_minuteTimer.Start();
}
public void StopMinuteTimer()
{
_minuteTimer.Stop();
}
#endregion
private void RunSync(object obj, ElapsedEventArgs args)
private void RunRssSync(object obj, ElapsedEventArgs args)
{
DateTime.Now.AddMilliseconds(_rssSyncTimer.Interval);
_rssSyncProvider.Begin();
}
private void MinuteTimer_Elapsed(object obj, ElapsedEventArgs args)
{
//Check to see if anything should be run at this time, if so run it
var now = DateTime.Now;
//Daily (Except Sunday) 03:00 - Update the lastest season for all TV Shows
if (now.Hour == 3 && now.Minute == 0 && now.DayOfWeek != DayOfWeek.Sunday)
{
foreach (var series in _seriesProvider.GetAllSeries())
{
var season = _seasonProvider.GetLatestSeason(series.SeriesId);
_episodeProvider.RefreshEpisodeInfo(season);
}
}
//Sunday 03:00 - Update all TV Shows
if (now.Hour == 3 && now.Minute == 0 && now.DayOfWeek == DayOfWeek.Sunday)
{
foreach (var series in _seriesProvider.GetAllSeries())
{
_episodeProvider.RefreshEpisodeInfo(series.SeriesId);
}
}
throw new NotImplementedException();
}
}
}

View File

@ -3,13 +3,18 @@
using System.Linq;
using System.Web;
using System.Web.Mvc;
using NzbDrone.Core.Providers;
namespace NzbDrone.Web.Controllers
{
public class SharedController : Controller
{
//
// GET: /Shared/
private ITimerProvider _timerProvider;
public SharedController(ITimerProvider timerProvider)
{
_timerProvider = timerProvider;
}
public ActionResult Index()
{
@ -19,7 +24,8 @@ public ActionResult Index()
[ChildActionOnly]
public ActionResult Footer()
{
ViewData["RssTimer"] = DateTime.Now.AddMinutes(61).AddSeconds(10).ToString("yyyyMMddHHmmss");
ViewData["RssTimer"] = _timerProvider.NextRssSyncTime().ToString("yyyyMMddHHmmss");
//ViewData["RssTimer"] = DateTime.Now.AddMinutes(61).AddSeconds(10).ToString("yyyyMMddHHmmss");
return PartialView();
}
}