diff --git a/NzbDrone.Common/EnviromentProvider.cs b/NzbDrone.Common/EnviromentProvider.cs index 44826f96f..e9d517910 100644 --- a/NzbDrone.Common/EnviromentProvider.cs +++ b/NzbDrone.Common/EnviromentProvider.cs @@ -25,7 +25,6 @@ namespace NzbDrone.Common { if (isInDebug || Debugger.IsAttached) return false; - Console.WriteLine(processName); if (processName.Contains("nunit")) return false; if (processName.Contains("jetbrain")) return false; if (processName.Contains("resharper")) return false; diff --git a/NzbDrone.Common/IISProvider.cs b/NzbDrone.Common/IISProvider.cs index c0c75b4c6..77012fc6a 100644 --- a/NzbDrone.Common/IISProvider.cs +++ b/NzbDrone.Common/IISProvider.cs @@ -118,7 +118,7 @@ namespace NzbDrone.Common private void OnOutputDataReceived(object s, DataReceivedEventArgs e) { if (e == null || String.IsNullOrWhiteSpace(e.Data) || e.Data.StartsWith("Request started:") || - e.Data.StartsWith("Request ended:") || e.Data == ("IncrementMessages called") || e.Data == "iisexpress" || e.Data == "nzbdrone") + e.Data.StartsWith("Request ended:") || e.Data == ("IncrementMessages called")) return; Console.WriteLine(e.Data); diff --git a/NzbDrone.Core.Test/ProviderTests/JobProviderTests/JobProviderFixture.cs b/NzbDrone.Core.Test/ProviderTests/JobProviderTests/JobProviderFixture.cs index 1b0d103f8..5884bf6ee 100644 --- a/NzbDrone.Core.Test/ProviderTests/JobProviderTests/JobProviderFixture.cs +++ b/NzbDrone.Core.Test/ProviderTests/JobProviderTests/JobProviderFixture.cs @@ -4,10 +4,12 @@ using System.Linq; using System; using System.Collections.Generic; using System.Threading; +using FizzWare.NBuilder; using FluentAssertions; using NUnit.Framework; using NzbDrone.Core.Jobs; using NzbDrone.Core.Model; +using NzbDrone.Core.Repository; using NzbDrone.Core.Test.Framework; using NzbDrone.Test.Common; using NzbDrone.Test.Common.AutoMoq; @@ -282,6 +284,27 @@ namespace NzbDrone.Core.Test.ProviderTests.JobProviderTests timers[0].Enable.Should().BeTrue(); } + [Test] + public void inti_should_removed_jobs_that_no_longer_exist() + { + IList fakeJobs = new List { fakeJob }; + Mocker.SetConstant(fakeJobs); + + WithRealDb(); + var deletedJob = Builder.CreateNew().Build(); + Db.Insert(deletedJob); + var jobProvider = Mocker.Resolve(); + + //Act + jobProvider.Initialize(); + + //Assert + var registeredJobs = Db.Fetch(); + registeredJobs.Should().HaveCount(1); + registeredJobs.Should().NotContain(c => c.Name == deletedJob.Name); + + } + [Test] public void jobs_with_zero_interval_are_registered_as_disabled() { @@ -296,24 +319,6 @@ namespace NzbDrone.Core.Test.ProviderTests.JobProviderTests jobProvider.All().First().Enable.Should().BeFalse(); } - [Test] - public void Get_Next_Execution_Time() - { - IList BaseFakeJobs = new List { fakeJob }; - Mocker.SetConstant(BaseFakeJobs); - - //Act - var jobProvider = Mocker.Resolve(); - jobProvider.Initialize(); - jobProvider.QueueScheduled(); - WaitForQueue(); - - //Assert - var next = jobProvider.NextScheduledRun(typeof(FakeJob)); - jobProvider.All().Should().HaveCount(1); - jobProvider.All().First().LastExecution.Should().Be(next.AddMinutes(-fakeJob.DefaultInterval)); - } - [Test] public void disabled_jobs_arent_run_by_scheduler() { @@ -432,4 +437,4 @@ namespace NzbDrone.Core.Test.ProviderTests.JobProviderTests } -} \ No newline at end of file +} diff --git a/NzbDrone.Core/Jobs/JobProvider.cs b/NzbDrone.Core/Jobs/JobProvider.cs index 88cb9d51c..f63fc997c 100644 --- a/NzbDrone.Core/Jobs/JobProvider.cs +++ b/NzbDrone.Core/Jobs/JobProvider.cs @@ -64,40 +64,45 @@ namespace NzbDrone.Core.Jobs } } - /// - /// Returns a list of all registered jobs - /// public virtual List All() { return _database.Fetch().ToList(); } - /// - /// Initializes jobs in the database using the IJob instances that are - /// registered using ninject - /// public virtual void Initialize() { - logger.Debug("Initializing jobs. Count {0}", _jobs.Count()); - var currentTimer = All(); + var currentJobs = All(); + logger.Debug("Initializing jobs. Available: {0} Existing:{1}", _jobs.Count(), currentJobs.Count); - foreach (var timer in _jobs) + foreach (var currentJob in currentJobs) { - var timerProviderLocal = timer; - if (!currentTimer.Exists(c => c.TypeName == timerProviderLocal.GetType().ToString())) + if (!_jobs.Any(c => c.Name == currentJob.Name)) + { + logger.Debug("Removing job from database '{0}'", currentJob.Name); + _database.Delete(currentJob); + } + } + + foreach (var job in _jobs) + { + var jobLocal = job; + if (!currentJobs.Exists(c => c.TypeName == jobLocal.GetType().ToString())) { var settings = new JobDefinition { - Enable = timerProviderLocal.DefaultInterval > 0, - TypeName = timer.GetType().ToString(), - Name = timerProviderLocal.Name, - Interval = timerProviderLocal.DefaultInterval, + Enable = jobLocal.DefaultInterval > 0, + TypeName = job.GetType().ToString(), + Name = jobLocal.Name, + Interval = jobLocal.DefaultInterval, LastExecution = DateTime.Now }; SaveDefinition(settings); } } + + + } /// @@ -141,17 +146,6 @@ namespace NzbDrone.Core.Jobs logger.Trace("{0} Scheduled tasks have been added to the queue", pendingJobTypes.Count); } - /// - /// Gets the next scheduled run time for a specific job - /// (Estimated due to schedule timer) - /// - /// DateTime of next scheduled job execution - public virtual DateTime NextScheduledRun(Type jobType) - { - var job = All().Where(t => t.TypeName == jobType.ToString()).Single(); - return job.LastExecution.AddMinutes(job.Interval); - } - public virtual void QueueJob(Type jobType, int targetId = 0, int secondaryTargetId = 0) { var queueItem = new JobQueueItem diff --git a/NzbDrone/ApplicationServer.cs b/NzbDrone/ApplicationServer.cs index 41ed6ce96..b66b3268b 100644 --- a/NzbDrone/ApplicationServer.cs +++ b/NzbDrone/ApplicationServer.cs @@ -64,17 +64,6 @@ namespace NzbDrone Logger.ErrorException("Failed to open URL in default browser.", e); } } - else - { - try - { - _webClient.DownloadString(_iisProvider.AppUrl); - } - catch (Exception e) - { - Logger.ErrorException("Failed to load home page.", e); - } - } _monitoringProvider.Start(); } diff --git a/NzbDrone/NzbDrone.csproj b/NzbDrone/NzbDrone.csproj index 41233f488..238926a52 100644 --- a/NzbDrone/NzbDrone.csproj +++ b/NzbDrone/NzbDrone.csproj @@ -94,7 +94,13 @@ + + PreserveNewest + + + PreserveNewest + diff --git a/NzbDrone/ServiceInstall.bat b/NzbDrone/ServiceInstall.bat new file mode 100644 index 000000000..fe98f70fc --- /dev/null +++ b/NzbDrone/ServiceInstall.bat @@ -0,0 +1,4 @@ +@ECHO OFF +nzbdrone.exe /i +net start nzbdrone +pause \ No newline at end of file diff --git a/NzbDrone/ServiceUninstall.bat b/NzbDrone/ServiceUninstall.bat new file mode 100644 index 000000000..fda27bda0 --- /dev/null +++ b/NzbDrone/ServiceUninstall.bat @@ -0,0 +1,4 @@ +@ECHO OFF +net stop nzbdrone +nzbdrone.exe /u +pause \ No newline at end of file