@ -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 @@ namespace NzbDrone.Core.Providers
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 ( Run Sync) ;
_rssSyncTimer . Elapsed + = new ElapsedEventHandler ( Run Rss Sync) ;
_rssSyncTimer . Start ( ) ;
_rssSyncNextInterval = DateTime . Now . AddMilliseconds ( _rssSyncTimer . Interval ) ;
}
@ -66,12 +75,51 @@ namespace NzbDrone.Core.Providers
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 Run Rss Sync( 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 ( ) ;
}
}
}