diff --git a/PlexRequests.Core/PlexRequests.Core.csproj b/PlexRequests.Core/PlexRequests.Core.csproj
index 8d81638fa..7fdb4b375 100644
--- a/PlexRequests.Core/PlexRequests.Core.csproj
+++ b/PlexRequests.Core/PlexRequests.Core.csproj
@@ -31,6 +31,14 @@
4
+
+ ..\packages\Common.Logging.3.0.0\lib\net40\Common.Logging.dll
+ True
+
+
+ ..\packages\Common.Logging.Core.3.0.0\lib\net40\Common.Logging.Core.dll
+ True
+
..\Assemblies\Mono.Data.Sqlite.dll
@@ -42,6 +50,10 @@
..\packages\NLog.4.3.6\lib\net45\NLog.dll
True
+
+ ..\packages\Quartz.2.3.3\lib\net40\Quartz.dll
+ True
+
@@ -116,6 +128,9 @@
+
+ Designer
+
Designer
diff --git a/PlexRequests.Core/Setup.cs b/PlexRequests.Core/Setup.cs
index c5d5ddc58..56f3ab95e 100644
--- a/PlexRequests.Core/Setup.cs
+++ b/PlexRequests.Core/Setup.cs
@@ -37,6 +37,7 @@ using PlexRequests.Helpers;
using PlexRequests.Store;
using PlexRequests.Store.Repository;
using System.Threading.Tasks;
+using Quartz;
namespace PlexRequests.Core
{
@@ -118,6 +119,24 @@ namespace PlexRequests.Core
};
var s = new SettingsServiceV2(new SettingsJsonRepository(new DbConfiguration(new SqliteFactory()), new MemoryCacheProvider()));
s.SaveSettings(defaultSettings);
+
+
+ var cron = (Quartz.Impl.Triggers.CronTriggerImpl)CronScheduleBuilder.WeeklyOnDayAndHourAndMinute(DayOfWeek.Friday, 7, 0).Build();
+ var scheduled = new ScheduledJobsSettings
+ {
+ PlexAvailabilityChecker = 60,
+ SickRageCacher = 60,
+ SonarrCacher = 60,
+ CouchPotatoCacher = 60,
+ StoreBackup = 24,
+ StoreCleanup = 24,
+ UserRequestLimitResetter = 12,
+ PlexEpisodeCacher = 12,
+ RecentlyAddedCron = cron.CronExpressionString, // Weekly CRON at 7 am on Mondays
+ };
+
+ var scheduledSettings = new SettingsServiceV2(new SettingsJsonRepository(new DbConfiguration(new SqliteFactory()), new MemoryCacheProvider()));
+ scheduledSettings.SaveSettings(scheduled);
}
public void CacheQualityProfiles()
diff --git a/PlexRequests.Core/job_scheduling_data_2_0.xsd b/PlexRequests.Core/job_scheduling_data_2_0.xsd
new file mode 100644
index 000000000..d1dabc1a9
--- /dev/null
+++ b/PlexRequests.Core/job_scheduling_data_2_0.xsd
@@ -0,0 +1,361 @@
+
+
+
+
+
+
+ Root level node
+
+
+
+
+
+ Commands to be executed before scheduling the jobs and triggers in this file.
+
+
+
+
+ Directives to be followed while scheduling the jobs and triggers in this file.
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Version of the XML Schema instance
+
+
+
+
+
+
+
+
+
+ Delete all jobs, if any, in the identified group. "*" can be used to identify all groups. Will also result in deleting all triggers related to the jobs.
+
+
+
+
+ Delete all triggers, if any, in the identified group. "*" can be used to identify all groups. Will also result in deletion of related jobs that are non-durable.
+
+
+
+
+ Delete the identified job if it exists (will also result in deleting all triggers related to it).
+
+
+
+
+
+
+
+
+
+
+ Delete the identified trigger if it exists (will also result in deletion of related jobs that are non-durable).
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Whether the existing scheduling data (with same identifiers) will be overwritten. If false, and ignore-duplicates is not false, and jobs or triggers with the same names already exist as those in the file, an error will occur.
+
+
+
+
+ If true (and overwrite-existing-data is false) then any job/triggers encountered in this file that have names that already exist in the scheduler will be ignored, and no error will be produced.
+
+
+
+
+ If true trigger's start time is calculated based on earlier run time instead of fixed value. Trigger's start time must be undefined for this to work.
+
+
+
+
+
+
+
+ Define a JobDetail
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Define a JobDataMap
+
+
+
+
+
+
+
+
+ Define a JobDataMap entry
+
+
+
+
+
+
+
+
+
+ Define a Trigger
+
+
+
+
+
+
+
+
+
+
+ Common Trigger definitions
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Define a SimpleTrigger
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Define a CronTrigger
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Define a DateIntervalTrigger
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Cron expression (see JavaDoc for examples)
+
+ Special thanks to Chris Thatcher (thatcher@butterfly.net) for the regular expression!
+
+ Regular expressions are not my strong point but I believe this is complete,
+ with the caveat that order for expressions like 3-0 is not legal but will pass,
+ and month and day names must be capitalized.
+ If you want to examine the correctness look for the [\s] to denote the
+ seperation of individual regular expressions. This is how I break them up visually
+ to examine them:
+
+ SECONDS:
+ (
+ ((([0-9]|[0-5][0-9])(-([0-9]|[0-5][0-9]))?,)*([0-9]|[0-5][0-9])(-([0-9]|[0-5][0-9]))?)
+ | (([\*]|[0-9]|[0-5][0-9])/([0-9]|[0-5][0-9]))
+ | ([\?])
+ | ([\*])
+ ) [\s]
+ MINUTES:
+ (
+ ((([0-9]|[0-5][0-9])(-([0-9]|[0-5][0-9]))?,)*([0-9]|[0-5][0-9])(-([0-9]|[0-5][0-9]))?)
+ | (([\*]|[0-9]|[0-5][0-9])/([0-9]|[0-5][0-9]))
+ | ([\?])
+ | ([\*])
+ ) [\s]
+ HOURS:
+ (
+ ((([0-9]|[0-1][0-9]|[2][0-3])(-([0-9]|[0-1][0-9]|[2][0-3]))?,)*([0-9]|[0-1][0-9]|[2][0-3])(-([0-9]|[0-1][0-9]|[2][0-3]))?)
+ | (([\*]|[0-9]|[0-1][0-9]|[2][0-3])/([0-9]|[0-1][0-9]|[2][0-3]))
+ | ([\?])
+ | ([\*])
+ ) [\s]
+ DAY OF MONTH:
+ (
+ ((([1-9]|[0][1-9]|[1-2][0-9]|[3][0-1])(-([1-9]|[0][1-9]|[1-2][0-9]|[3][0-1]))?,)*([1-9]|[0][1-9]|[1-2][0-9]|[3][0-1])(-([1-9]|[0][1-9]|[1-2][0-9]|[3][0-1]))?(C)?)
+ | (([1-9]|[0][1-9]|[1-2][0-9]|[3][0-1])/([1-9]|[0][1-9]|[1-2][0-9]|[3][0-1])(C)?)
+ | (L(-[0-9])?)
+ | (L(-[1-2][0-9])?)
+ | (L(-[3][0-1])?)
+ | (LW)
+ | ([1-9]W)
+ | ([1-3][0-9]W)
+ | ([\?])
+ | ([\*])
+ )[\s]
+ MONTH:
+ (
+ ((([1-9]|0[1-9]|1[0-2])(-([1-9]|0[1-9]|1[0-2]))?,)*([1-9]|0[1-9]|1[0-2])(-([1-9]|0[1-9]|1[0-2]))?)
+ | (([1-9]|0[1-9]|1[0-2])/([1-9]|0[1-9]|1[0-2]))
+ | (((JAN|FEB|MAR|APR|MAY|JUN|JUL|AUG|SEP|OCT|NOV|DEC)(-(JAN|FEB|MAR|APR|MAY|JUN|JUL|AUG|SEP|OCT|NOV|DEC))?,)*(JAN|FEB|MAR|APR|MAY|JUN|JUL|AUG|SEP|OCT|NOV|DEC)(-(JAN|FEB|MAR|APR|MAY|JUN|JUL|AUG|SEP|OCT|NOV|DEC))?)
+ | ((JAN|FEB|MAR|APR|MAY|JUN|JUL|AUG|SEP|OCT|NOV|DEC)/(JAN|FEB|MAR|APR|MAY|JUN|JUL|AUG|SEP|OCT|NOV|DEC))
+ | ([\?])
+ | ([\*])
+ )[\s]
+ DAY OF WEEK:
+ (
+ (([1-7](-([1-7]))?,)*([1-7])(-([1-7]))?)
+ | ([1-7]/([1-7]))
+ | (((MON|TUE|WED|THU|FRI|SAT|SUN)(-(MON|TUE|WED|THU|FRI|SAT|SUN))?,)*(MON|TUE|WED|THU|FRI|SAT|SUN)(-(MON|TUE|WED|THU|FRI|SAT|SUN))?(C)?)
+ | ((MON|TUE|WED|THU|FRI|SAT|SUN)/(MON|TUE|WED|THU|FRI|SAT|SUN)(C)?)
+ | (([1-7]|(MON|TUE|WED|THU|FRI|SAT|SUN))(L|LW)?)
+ | (([1-7]|MON|TUE|WED|THU|FRI|SAT|SUN)#([1-7])?)
+ | ([\?])
+ | ([\*])
+ )
+ YEAR (OPTIONAL):
+ (
+ [\s]?
+ ([\*])?
+ | ((19[7-9][0-9])|(20[0-9][0-9]))?
+ | (((19[7-9][0-9])|(20[0-9][0-9]))/((19[7-9][0-9])|(20[0-9][0-9])))?
+ | ((((19[7-9][0-9])|(20[0-9][0-9]))(-((19[7-9][0-9])|(20[0-9][0-9])))?,)*((19[7-9][0-9])|(20[0-9][0-9]))(-((19[7-9][0-9])|(20[0-9][0-9])))?)?
+ )
+
+
+
+
+
+
+
+
+
+ Number of times to repeat the Trigger (-1 for indefinite)
+
+
+
+
+
+
+
+
+
+ Simple Trigger Misfire Instructions
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Cron Trigger Misfire Instructions
+
+
+
+
+
+
+
+
+
+
+ Date Interval Trigger Misfire Instructions
+
+
+
+
+
+
+
+
+
+
+ Interval Units
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/PlexRequests.Core/packages.config b/PlexRequests.Core/packages.config
index eddb09ec8..6f3ca4a6c 100644
--- a/PlexRequests.Core/packages.config
+++ b/PlexRequests.Core/packages.config
@@ -1,9 +1,12 @@
+
+
+
\ No newline at end of file