using System; using System.Web; using System.Web.Caching; using NLog; using NzbDrone.Core.Jobs; namespace NzbDrone.Core { public class WebTimer { private readonly JobProvider _jobProvider; private static CacheItemRemovedCallback _onCacheRemove; private static bool _stop; private static readonly Logger Logger = LogManager.GetCurrentClassLogger(); public WebTimer(JobProvider jobProvider) { _jobProvider = jobProvider; } //TODO: Fix this so the timer doesn't keep running during unit tests. public void StartTimer(int secondInterval) { _onCacheRemove = DoWork; HttpRuntime.Cache.Insert(GetType().ToString(), secondInterval, null, DateTime.Now.AddSeconds(secondInterval), Cache.NoSlidingExpiration, CacheItemPriority.NotRemovable, _onCacheRemove); } public void DoWork(string k, object v, CacheItemRemovedReason r) { if (!_stop) { _jobProvider.QueueScheduled(); StartTimer(Convert.ToInt32(v)); } } public static void Stop() { Logger.Info("Stopping Web Timer"); _stop = true; } } }