diff --git a/NzbDrone.Core.Test/ProviderTests/JobProviderTests/JobProviderFixture.cs b/NzbDrone.Core.Test/ProviderTests/JobProviderTests/JobProviderFixture.cs index 8738c952cf..d3cd845484 100644 --- a/NzbDrone.Core.Test/ProviderTests/JobProviderTests/JobProviderFixture.cs +++ b/NzbDrone.Core.Test/ProviderTests/JobProviderTests/JobProviderFixture.cs @@ -490,6 +490,22 @@ public void trygin_to_queue_unregistered_job_should_fail() ExceptionVerification.ExpectedErrors(1); } + [Test] + public void scheduled_job_should_have_scheduler_as_source() + { + IList BaseFakeJobs = new List { slowJob, fakeJob}; + Mocker.SetConstant(BaseFakeJobs); + + var jobProvider = Mocker.Resolve(); + jobProvider.Initialize(); + ResetLastExecution(); + jobProvider.QueueScheduled(); + + jobProvider.Queue.Should().OnlyContain(c => c.Source == JobQueueItem.JobSourceType.Scheduler); + + WaitForQueue(); + } + } diff --git a/NzbDrone.Core/Jobs/JobProvider.cs b/NzbDrone.Core/Jobs/JobProvider.cs index 21923db280..22712356ac 100644 --- a/NzbDrone.Core/Jobs/JobProvider.cs +++ b/NzbDrone.Core/Jobs/JobProvider.cs @@ -139,17 +139,18 @@ public virtual void QueueScheduled() ).Select(c => _jobs.Where(t => t.GetType().ToString() == c.TypeName).Single().GetType()).ToList(); - pendingJobTypes.ForEach(jobType => QueueJob(jobType)); + pendingJobTypes.ForEach(jobType => QueueJob(jobType, source: JobQueueItem.JobSourceType.Scheduler)); logger.Trace("{0} Scheduled tasks have been added to the queue", pendingJobTypes.Count); } - public virtual void QueueJob(Type jobType, int targetId = 0, int secondaryTargetId = 0) + public virtual void QueueJob(Type jobType, int targetId = 0, int secondaryTargetId = 0, JobQueueItem.JobSourceType source = JobQueueItem.JobSourceType.User) { var queueItem = new JobQueueItem { JobType = jobType, TargetId = targetId, - SecondaryTargetId = secondaryTargetId + SecondaryTargetId = secondaryTargetId, + Source = source }; logger.Debug("Attempting to queue {0}", queueItem); @@ -211,7 +212,7 @@ private void ProcessQueue() { if (Queue.Count != 0) { - job = Queue.First(); + job = Queue.OrderByDescending(c=>c.Source).First(); logger.Trace("Popping {0} from the queue.", job); Queue.Remove(job); } diff --git a/NzbDrone.Core/Model/JobQueueItem.cs b/NzbDrone.Core/Model/JobQueueItem.cs index c2b983a071..f8332d8010 100644 --- a/NzbDrone.Core/Model/JobQueueItem.cs +++ b/NzbDrone.Core/Model/JobQueueItem.cs @@ -8,6 +8,8 @@ public class JobQueueItem : IEquatable public int TargetId { get; set; } public int SecondaryTargetId { get; set; } + public JobSourceType Source { get; set; } + public bool Equals(JobQueueItem other) { return (JobType == other.JobType && TargetId == other.TargetId @@ -18,5 +20,11 @@ public override string ToString() { return string.Format("[{0}({1}, {2})]", JobType.Name, TargetId, SecondaryTargetId); } + + public enum JobSourceType + { + User, + Scheduler + } } } diff --git a/NzbDrone.Core/Model/Sabnzbd/SabCategoryModel.cs b/NzbDrone.Core/Model/Sabnzbd/SabCategoryModel.cs index 9ddf34ca25..0b8bd1cbce 100644 --- a/NzbDrone.Core/Model/Sabnzbd/SabCategoryModel.cs +++ b/NzbDrone.Core/Model/Sabnzbd/SabCategoryModel.cs @@ -1,6 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Text; +using System.Collections.Generic; namespace NzbDrone.Core.Model.Sabnzbd { diff --git a/NzbDrone.Web/Controllers/UpdateController.cs b/NzbDrone.Web/Controllers/UpdateController.cs index e4bbc4d47f..8a2982bd38 100644 --- a/NzbDrone.Web/Controllers/UpdateController.cs +++ b/NzbDrone.Web/Controllers/UpdateController.cs @@ -1,5 +1,4 @@ using System; -using System.IO; using System.Linq; using System.Web.Mvc; using NzbDrone.Common;