Start date (do not use schedule until) implemented.
This commit is contained in:
parent
1569440050
commit
5b352af190
1 changed files with 36 additions and 28 deletions
|
@ -71,12 +71,9 @@ com.telldus.scheduler = function() {
|
||||||
|
|
||||||
//TODO ordna upp, dela upp i flera filer, inte ladda jobb här (per plugin istället), bara "add job" här...
|
//TODO ordna upp, dela upp i flera filer, inte ladda jobb här (per plugin istället), bara "add job" här...
|
||||||
//TODO ta bort absoluta events efter att de har passerats? Kan inte göras härifrån, får på ngt sätt ske därifrån de sparas/laddas
|
//TODO ta bort absoluta events efter att de har passerats? Kan inte göras härifrån, får på ngt sätt ske därifrån de sparas/laddas
|
||||||
//TODO startdate
|
//TODO update last run, i respektive executemetod... bara?
|
||||||
//det enda varje jobb har är getNextRunTime (som ska override:as)
|
//det enda varje jobb har är getNextRunTime (som ska override:as) (och ev. updateLastRun)
|
||||||
|
|
||||||
|
|
||||||
// gränssnittet... hur...?
|
|
||||||
//
|
|
||||||
|
|
||||||
function init(){
|
function init(){
|
||||||
loadJobs(); //load jobs from permanent storage TODO move
|
loadJobs(); //load jobs from permanent storage TODO move
|
||||||
|
@ -130,13 +127,7 @@ com.telldus.scheduler = function() {
|
||||||
}
|
}
|
||||||
|
|
||||||
function updateLastRun(id, lastRun){
|
function updateLastRun(id, lastRun){
|
||||||
/*
|
//TODO... this will not be stored of course, how to do that? Maybe in the execute function per job too...
|
||||||
var settings = new com.telldus.settings();
|
|
||||||
var jobs = settings.value("jobs", "");
|
|
||||||
jobs[id].lastrun = lastRun; //update permanent storage
|
|
||||||
settings.setValue("jobs", jobs);
|
|
||||||
*/
|
|
||||||
//TODO... this will not be stored of course, how to do that?
|
|
||||||
print("Update last run: " + id + " to " + lastRun);
|
print("Update last run: " + id + " to " + lastRun);
|
||||||
storedJobs.get(id).v.lastRun = lastRun; //update current list
|
storedJobs.get(id).v.lastRun = lastRun; //update current list
|
||||||
}
|
}
|
||||||
|
@ -212,13 +203,16 @@ com.telldus.scheduler = function() {
|
||||||
time3 = time1 - 60;
|
time3 = time1 - 60;
|
||||||
time1 = time1 + 50;
|
time1 = time1 + 50;
|
||||||
|
|
||||||
var newRecurringMonthJob = getJob({id: 4, name: "testnamn14", type: JOBTYPE_RECURRING_WEEK, startdate: "2010-01-01", lastRun: 0, device: 1, method: 1, value: ""});
|
var startdate1 = new Date(2011,0,5).getTime();
|
||||||
newRecurringMonthJob.addEvent(new Event({id: 0, value: 2, fuzzinessBefore: 0, fuzzinessAfter: 0, type: EVENTTYPE_ABSOLUTE, offset: 0, time: time1}));
|
var startdate2 = new Date(2011,0,5).getTime();
|
||||||
|
|
||||||
|
var newRecurringMonthJob = getJob({id: 4, name: "testnamn14", type: JOBTYPE_RECURRING_WEEK, startdate: startdate1, lastRun: 0, device: 1, method: 1, value: ""});
|
||||||
|
newRecurringMonthJob.addEvent(new Event({id: 0, value: 3, fuzzinessBefore: 0, fuzzinessAfter: 0, type: EVENTTYPE_ABSOLUTE, offset: 0, time: time1}));
|
||||||
newRecurringMonthJob.save();
|
newRecurringMonthJob.save();
|
||||||
|
|
||||||
var newAbsoluteJob = getJob({id: 5, name: "testnamn15", type: JOBTYPE_RECURRING_MONTH, startdate: "2010-01-01", lastRun: 0, device: 1, method: 1, value: "", pastGracePeriod: 90000});
|
var newAbsoluteJob = getJob({id: 5, name: "testnamn15", type: JOBTYPE_RECURRING_MONTH, startdate: startdate2, lastRun: 0, device: 1, method: 1, value: "", pastGracePeriod: 0});
|
||||||
newAbsoluteJob.addEvent(new Event({id: 1, value: "00-04", fuzzinessBefore: 0, fuzzinessAfter: 0, type: EVENTTYPE_ABSOLUTE, offset: 0, time: time2}));
|
newAbsoluteJob.addEvent(new Event({id: 1, value: "00-05", fuzzinessBefore: 0, fuzzinessAfter: 0, type: EVENTTYPE_ABSOLUTE, offset: 0, time: time2}));
|
||||||
newAbsoluteJob.addEvent(new Event({id: 2, value: "00-04", fuzzinessBefore: 0, fuzzinessAfter: 0, type: EVENTTYPE_ABSOLUTE, offset: 0, time: time3}));
|
newAbsoluteJob.addEvent(new Event({id: 2, value: "00-05", fuzzinessBefore: 0, fuzzinessAfter: 0, type: EVENTTYPE_ABSOLUTE, offset: 0, time: time3}));
|
||||||
newAbsoluteJob.save();
|
newAbsoluteJob.save();
|
||||||
|
|
||||||
storedJobs = new MappedList();
|
storedJobs = new MappedList();
|
||||||
|
@ -334,6 +328,7 @@ com.telldus.scheduler = function() {
|
||||||
* note, must in that case have checked last run
|
* note, must in that case have checked last run
|
||||||
*/
|
*/
|
||||||
function getNextEventRunTime(nextRunTime, event, date, pastGracePeriod){
|
function getNextEventRunTime(nextRunTime, event, date, pastGracePeriod){
|
||||||
|
|
||||||
if(!pastGracePeriod){
|
if(!pastGracePeriod){
|
||||||
var pastGracePeriod = 0;
|
var pastGracePeriod = 0;
|
||||||
}
|
}
|
||||||
|
@ -543,7 +538,6 @@ com.telldus.scheduler = function() {
|
||||||
print("getNextRunTime day");
|
print("getNextRunTime day");
|
||||||
//Recurring day (every day, every other day or every x day)
|
//Recurring day (every day, every other day or every x day)
|
||||||
//only one event/job (at the moment at least)
|
//only one event/job (at the moment at least)
|
||||||
//TODO test this
|
|
||||||
var nextRunTime = 0;
|
var nextRunTime = 0;
|
||||||
var pastGracePeriod = getGracePeriod(this.v);
|
var pastGracePeriod = getGracePeriod(this.v);
|
||||||
var date;
|
var date;
|
||||||
|
@ -554,8 +548,14 @@ com.telldus.scheduler = function() {
|
||||||
date = date.getTime() + this.v.events[0].d.value; //add interval
|
date = date.getTime() + this.v.events[0].d.value; //add interval
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
var now = new Date(); //Now
|
var startTime = new Date(); //Now
|
||||||
date = new Date(now.getFullYear(), now.getMonth(), now.getDate());
|
var minStartTime = new Date(this.v.startdate);
|
||||||
|
|
||||||
|
if(minStartTime > startTime){
|
||||||
|
//next run not until startTime is passed
|
||||||
|
startTime = minStartTime;
|
||||||
|
}
|
||||||
|
date = new Date(startTime.getFullYear(), startTime.getMonth(), startTime.getDate());
|
||||||
}
|
}
|
||||||
nextRunTime = getNextEventRunTime(0, this.v.events[0], date.getTime(), pastGracePeriod);
|
nextRunTime = getNextEventRunTime(0, this.v.events[0], date.getTime(), pastGracePeriod);
|
||||||
if(nextRunTime < new Date().getTime()){
|
if(nextRunTime < new Date().getTime()){
|
||||||
|
@ -584,6 +584,11 @@ com.telldus.scheduler = function() {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
var returnDate = new Date();
|
var returnDate = new Date();
|
||||||
|
var minStartTime = new Date(this.v.startdate);
|
||||||
|
if(minStartTime > returnDate){
|
||||||
|
//next run not until startTime is passed
|
||||||
|
returnDate = minStartTime;
|
||||||
|
}
|
||||||
var returnDay = returnDate.getDay();
|
var returnDay = returnDate.getDay();
|
||||||
if (weekday !== returnDay) {
|
if (weekday !== returnDay) {
|
||||||
returnDate.setDate(returnDate.getDate() + (weekday + (7 - returnDay)) % 7);
|
returnDate.setDate(returnDate.getDate() + (weekday + (7 - returnDay)) % 7);
|
||||||
|
@ -606,7 +611,6 @@ com.telldus.scheduler = function() {
|
||||||
|
|
||||||
JobRecurringMonth.prototype.getNextRunTime = function(){
|
JobRecurringMonth.prototype.getNextRunTime = function(){
|
||||||
print("getNextRunTime month");
|
print("getNextRunTime month");
|
||||||
//TODO test this
|
|
||||||
var nextRunTime = 0;
|
var nextRunTime = 0;
|
||||||
if(!this.v.events){
|
if(!this.v.events){
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -622,18 +626,22 @@ com.telldus.scheduler = function() {
|
||||||
var daymonth = this.v.events[key].d.value.split('-'); //month-day
|
var daymonth = this.v.events[key].d.value.split('-'); //month-day
|
||||||
var month = daymonth[0];
|
var month = daymonth[0];
|
||||||
var day = daymonth[1];
|
var day = daymonth[1];
|
||||||
var now = new Date();
|
var startTime = new Date(); //Now
|
||||||
|
var minStartTime = new Date(this.v.startdate);
|
||||||
|
|
||||||
if((32 - new Date(now.getFullYear(), month, 32).getDate()) < day){ //check that day exists for this month
|
if((32 - new Date(startTime.getFullYear(), month, 32).getDate()) < day){ //check that day exists for this month
|
||||||
if(month != 1 && day != 29){
|
if(month != 1 && day != 29){
|
||||||
break; //this day doesn't exist for this month (at least not this year (leap year...))
|
break; //this day doesn't exist for this month (at least not this year (leap year...))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
var nextdate = getNextLeapYearSafeDate(now.getFullYear(), month, day, this.v.events[key]);
|
var nextdate = getNextLeapYearSafeDate(startTime.getFullYear(), month, day, this.v.events[key]);
|
||||||
|
|
||||||
if((nextdate + pastGracePeriod) < new Date().getTime()){ //event already happened this year, add to next year instead
|
if((nextdate + pastGracePeriod) < new Date().getTime() || (nextdate + pastGracePeriod) < minStartTime){ //event already happened this year, or startTime not reached yet, add to next year instead
|
||||||
var tempdate = new Date(nextdate);
|
var tempdate = new Date(nextdate);
|
||||||
tempdate.setYear(now.getFullYear() + 1);
|
tempdate.setYear(startTime.getFullYear() + 1);
|
||||||
|
if(tempdate < minStartTime){
|
||||||
|
tempdate.setYear(tempdate.getFullYear() + 1); //no need to check if start date is reached this time, will always be recalculated before that, if nothing else at least by daylight saving time
|
||||||
|
}
|
||||||
nextdate = tempdate.getTime();
|
nextdate = tempdate.getTime();
|
||||||
}
|
}
|
||||||
print("Candidate date: " + new Date(nextdate));
|
print("Candidate date: " + new Date(nextdate));
|
||||||
|
@ -697,7 +705,7 @@ com.telldus.scheduler = function() {
|
||||||
addJob: addJob,
|
addJob: addJob,
|
||||||
removeJob: removeJob,
|
removeJob: removeJob,
|
||||||
updateJob: updateJob,
|
updateJob: updateJob,
|
||||||
//TODO getNextRunForJob? For all?
|
//TODO getNextRunForJob? For all? (to see when job is due to run next)
|
||||||
init:init //TODO change this
|
init:init //TODO change this
|
||||||
}
|
}
|
||||||
}();
|
}();
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue