Should fix #696 Fixed an issue with the scheduled jobs where it could use a different trigger if the order between the schedules and the triggers were in different positions in the array... Stupid me, ordering both arrays by the name now.

Fixed #729 #730
Should fix #717 also
pull/738/head^2
tidusjar 8 years ago
parent 4e60b4afda
commit 1d8437739e

@ -230,7 +230,7 @@ namespace PlexRequests.Services.Jobs
public IEnumerable<PlexContent> GetPlexTvShows(IEnumerable<PlexContent> content) public IEnumerable<PlexContent> GetPlexTvShows(IEnumerable<PlexContent> content)
{ {
return content.Where(x => x.Type == Store.Models.Plex.PlexMediaType.Show.to); return content.Where(x => x.Type == Store.Models.Plex.PlexMediaType.Show);
} }
public bool IsTvShowAvailable(PlexContent[] plexShows, string title, string year, string providerId = null, int[] seasons = null) public bool IsTvShowAvailable(PlexContent[] plexShows, string title, string year, string providerId = null, int[] seasons = null)

@ -132,10 +132,11 @@ namespace PlexRequests.Services.Jobs
private void GenerateMovieHtml(RecentlyAddedModel movies, PlexSettings plexSettings, StringBuilder sb) private void GenerateMovieHtml(RecentlyAddedModel movies, PlexSettings plexSettings, StringBuilder sb)
{ {
var orderedMovies = movies?._children?.OrderByDescending(x => x?.addedAt.UnixTimeStampToDateTime()).ToList() ?? new List<RecentlyAddedChild>();
sb.Append("<h1>New Movies:</h1><br/><br/>"); sb.Append("<h1>New Movies:</h1><br/><br/>");
sb.Append( sb.Append(
"<table border=\"0\" cellpadding=\"0\" align=\"center\" cellspacing=\"0\" style=\"border-collapse: separate; mso-table-lspace: 0pt; mso-table-rspace: 0pt; width: 100%;\" width=\"100%\">"); "<table border=\"0\" cellpadding=\"0\" align=\"center\" cellspacing=\"0\" style=\"border-collapse: separate; mso-table-lspace: 0pt; mso-table-rspace: 0pt; width: 100%;\" width=\"100%\">");
foreach (var movie in movies._children.OrderByDescending(x => x.addedAt.UnixTimeStampToDateTime())) foreach (var movie in orderedMovies)
{ {
var plexGUID = string.Empty; var plexGUID = string.Empty;
try try
@ -259,9 +260,6 @@ namespace PlexRequests.Services.Jobs
if (!testEmail) if (!testEmail)
{ {
//if (newletterSettings.SendToPlexUsers)
//{
var users = UserHelper.GetUsersWithFeature(Features.RequestAddedNotification); var users = UserHelper.GetUsersWithFeature(Features.RequestAddedNotification);
if (users != null) if (users != null)
{ {
@ -273,7 +271,6 @@ namespace PlexRequests.Services.Jobs
} }
} }
} }
//}
if (newletterSettings.CustomUsersEmailAddresses != null if (newletterSettings.CustomUsersEmailAddresses != null
&& newletterSettings.CustomUsersEmailAddresses.Any()) && newletterSettings.CustomUsersEmailAddresses.Any())

@ -62,7 +62,7 @@ namespace PlexRequests.UI.Jobs
var jobList = new List<IJobDetail> var jobList = new List<IJobDetail>
{ {
JobBuilder.Create<PlexAvailabilityChecker>().WithIdentity("PlexAvailabilityChecker", "Plex").Build(), JobBuilder.Create<PlexAvailabilityChecker>().WithIdentity("PlexAvailabilityChecker", "Plex").Build(),
JobBuilder.Create<PlexContentCacher>().WithIdentity("PlexContentCacher", "Plex").Build(), JobBuilder.Create<PlexContentCacher>().WithIdentity("PlexContentCacher", "PlexCacher").Build(),
JobBuilder.Create<PlexEpisodeCacher>().WithIdentity("PlexEpisodeCacher", "Plex").Build(), JobBuilder.Create<PlexEpisodeCacher>().WithIdentity("PlexEpisodeCacher", "Plex").Build(),
JobBuilder.Create<PlexUserChecker>().WithIdentity("PlexUserChecker", "Plex").Build(), JobBuilder.Create<PlexUserChecker>().WithIdentity("PlexUserChecker", "Plex").Build(),
JobBuilder.Create<SickRageCacher>().WithIdentity("SickRageCacher", "Cache").Build(), JobBuilder.Create<SickRageCacher>().WithIdentity("SickRageCacher", "Cache").Build(),
@ -93,8 +93,8 @@ namespace PlexRequests.UI.Jobs
var jobs = CreateJobs(); var jobs = CreateJobs();
var triggers = CreateTriggers(); var triggers = CreateTriggers();
var jobDetails = jobs as IJobDetail[] ?? jobs.ToArray(); var jobDetails = jobs as IJobDetail[] ?? jobs.OrderByDescending(x => x.Key.Name).ToArray();
var triggerDetails = triggers as ITrigger[] ?? triggers.ToArray(); var triggerDetails = triggers as ITrigger[] ?? triggers.OrderByDescending(x => x.Key.Name).ToArray();
if (jobDetails.Length != triggerDetails.Length) if (jobDetails.Length != triggerDetails.Length)
{ {
@ -175,7 +175,7 @@ namespace PlexRequests.UI.Jobs
.Build(); .Build();
var plexCacher = var plexCacher =
TriggerBuilder.Create() TriggerBuilder.Create()
.WithIdentity("PlexContentCacher", "Plex") .WithIdentity("PlexContentCacher", "PlexCacher")
.StartNow() .StartNow()
.WithSimpleSchedule(x => x.WithIntervalInMinutes(s.PlexContentCacher).RepeatForever()) .WithSimpleSchedule(x => x.WithIntervalInMinutes(s.PlexContentCacher).RepeatForever())
.Build(); .Build();
@ -183,49 +183,49 @@ namespace PlexRequests.UI.Jobs
var plexUserChecker = var plexUserChecker =
TriggerBuilder.Create() TriggerBuilder.Create()
.WithIdentity("PlexUserChecker", "Plex") .WithIdentity("PlexUserChecker", "Plex")
.StartNow() .StartAt(DateBuilder.FutureDate(30, IntervalUnit.Minute))
.WithSimpleSchedule(x => x.WithIntervalInMinutes(s.PlexUserChecker).RepeatForever()) .WithSimpleSchedule(x => x.WithIntervalInMinutes(s.PlexUserChecker).RepeatForever())
.Build(); .Build();
var srCacher = var srCacher =
TriggerBuilder.Create() TriggerBuilder.Create()
.WithIdentity("SickRageCacher", "Cache") .WithIdentity("SickRageCacher", "Cache")
.StartNow() .StartAt(DateBuilder.FutureDate(2, IntervalUnit.Minute))
.WithSimpleSchedule(x => x.WithIntervalInMinutes(s.SickRageCacher).RepeatForever()) .WithSimpleSchedule(x => x.WithIntervalInMinutes(s.SickRageCacher).RepeatForever())
.Build(); .Build();
var sonarrCacher = var sonarrCacher =
TriggerBuilder.Create() TriggerBuilder.Create()
.WithIdentity("SonarrCacher", "Cache") .WithIdentity("SonarrCacher", "Cache")
.StartNow() .StartAt(DateBuilder.FutureDate(3, IntervalUnit.Minute))
.WithSimpleSchedule(x => x.WithIntervalInMinutes(s.SonarrCacher).RepeatForever()) .WithSimpleSchedule(x => x.WithIntervalInMinutes(s.SonarrCacher).RepeatForever())
.Build(); .Build();
var cpCacher = var cpCacher =
TriggerBuilder.Create() TriggerBuilder.Create()
.WithIdentity("CouchPotatoCacher", "Cache") .WithIdentity("CouchPotatoCacher", "Cache")
.StartNow() .StartAt(DateBuilder.FutureDate(4, IntervalUnit.Minute))
.WithSimpleSchedule(x => x.WithIntervalInMinutes(s.CouchPotatoCacher).RepeatForever()) .WithSimpleSchedule(x => x.WithIntervalInMinutes(s.CouchPotatoCacher).RepeatForever())
.Build(); .Build();
var storeBackup = var storeBackup =
TriggerBuilder.Create() TriggerBuilder.Create()
.WithIdentity("StoreBackup", "Database") .WithIdentity("StoreBackup", "Database")
.StartNow() .StartAt(DateBuilder.FutureDate(20, IntervalUnit.Minute))
.WithSimpleSchedule(x => x.WithIntervalInHours(s.StoreBackup).RepeatForever()) .WithSimpleSchedule(x => x.WithIntervalInHours(s.StoreBackup).RepeatForever())
.Build(); .Build();
var storeCleanup = var storeCleanup =
TriggerBuilder.Create() TriggerBuilder.Create()
.WithIdentity("StoreCleanup", "Database") .WithIdentity("StoreCleanup", "Database")
.StartNow() .StartAt(DateBuilder.FutureDate(35, IntervalUnit.Minute))
.WithSimpleSchedule(x => x.WithIntervalInHours(s.StoreCleanup).RepeatForever()) .WithSimpleSchedule(x => x.WithIntervalInHours(s.StoreCleanup).RepeatForever())
.Build(); .Build();
var userRequestLimiter = var userRequestLimiter =
TriggerBuilder.Create() TriggerBuilder.Create()
.WithIdentity("UserRequestLimiter", "Request") .WithIdentity("UserRequestLimiter", "Request")
.StartAt(DateBuilder.FutureDate(5, IntervalUnit.Minute)) .StartAt(DateBuilder.FutureDate(25, IntervalUnit.Minute))
// Everything has started on application start, lets wait 5 minutes // Everything has started on application start, lets wait 5 minutes
.WithSimpleSchedule(x => x.WithIntervalInHours(s.UserRequestLimitResetter).RepeatForever()) .WithSimpleSchedule(x => x.WithIntervalInHours(s.UserRequestLimitResetter).RepeatForever())
.Build(); .Build();
@ -233,7 +233,7 @@ namespace PlexRequests.UI.Jobs
var plexEpCacher = var plexEpCacher =
TriggerBuilder.Create() TriggerBuilder.Create()
.WithIdentity("PlexEpisodeCacher", "Cache") .WithIdentity("PlexEpisodeCacher", "Cache")
.StartAt(DateBuilder.FutureDate(5, IntervalUnit.Minute)) .StartAt(DateBuilder.FutureDate(10, IntervalUnit.Minute))
.WithSimpleSchedule(x => x.WithIntervalInHours(s.PlexEpisodeCacher).RepeatForever()) .WithSimpleSchedule(x => x.WithIntervalInHours(s.PlexEpisodeCacher).RepeatForever())
.Build(); .Build();
@ -243,14 +243,13 @@ namespace PlexRequests.UI.Jobs
.WithIdentity("RecentlyAddedModel", "Email") .WithIdentity("RecentlyAddedModel", "Email")
.StartNow() .StartNow()
.WithCronSchedule(s.RecentlyAddedCron) .WithCronSchedule(s.RecentlyAddedCron)
.WithSimpleSchedule(x => x.WithIntervalInHours(2).RepeatForever())
.Build(); .Build();
var fault = var fault =
TriggerBuilder.Create() TriggerBuilder.Create()
.WithIdentity("FaultQueueHandler", "Fault") .WithIdentity("FaultQueueHandler", "Fault")
//.StartAt(DateBuilder.FutureDate(10, IntervalUnit.Minute)) //.StartAt(DateBuilder.FutureDate(10, IntervalUnit.Minute))
.StartNow() .StartAt(DateBuilder.FutureDate(13, IntervalUnit.Minute))
.WithSimpleSchedule(x => x.WithIntervalInHours(s.FaultQueueHandler).RepeatForever()) .WithSimpleSchedule(x => x.WithIntervalInHours(s.FaultQueueHandler).RepeatForever())
.Build(); .Build();

@ -977,7 +977,12 @@ namespace PlexRequests.UI.Modules
StoreBackup = s.StoreBackup, StoreBackup = s.StoreBackup,
StoreCleanup = s.StoreCleanup, StoreCleanup = s.StoreCleanup,
JobRecorder = dict, JobRecorder = dict,
RecentlyAddedCron = s.RecentlyAddedCron RecentlyAddedCron = s.RecentlyAddedCron,
PlexContentCacher = s.PlexContentCacher,
FaultQueueHandler = s.FaultQueueHandler,
PlexEpisodeCacher = s.PlexEpisodeCacher,
PlexUserChecker = s.PlexUserChecker,
UserRequestLimitResetter = s.UserRequestLimitResetter
}; };
return View["SchedulerSettings", model]; return View["SchedulerSettings", model];
} }

@ -104,7 +104,8 @@ namespace PlexRequests.UI.Modules
|| x.Name.Equals(JobNames.EpisodeCacher) || x.Name.Equals(JobNames.EpisodeCacher)
|| x.Name.Equals(JobNames.PlexChecker) || x.Name.Equals(JobNames.PlexChecker)
|| x.Name.Equals(JobNames.SonarrCacher) || x.Name.Equals(JobNames.SonarrCacher)
|| x.Name.Equals(JobNames.SrCacher)); || x.Name.Equals(JobNames.SrCacher)
|| x.Name.Equals(JobNames.PlexCacher));
return Response.AsJson(cacherJobs.Any() return Response.AsJson(cacherJobs.Any()

@ -11,7 +11,7 @@
formAction = "/" + baseUrl.ToHtmlString(); formAction = "/" + baseUrl.ToHtmlString();
} }
var isAdmin = Html.HasAnyPermission(true, Permissions.Administrator) || Html.HasAnyPermission(Permissions.ManageRequests); var isAdmin = Html.HasAnyPermission(true, Permissions.Administrator, Permissions.ManageRequests);
} }
<h1>Details</h1> <h1>Details</h1>

Loading…
Cancel
Save