Last active
May 10, 2018 10:56
-
-
Save kylecorry31/d9329898e136c80dd33b3c43ab8b4c32 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
var Time = function(hour, minute, second){ | |
var getNextOccurrence = function(){ | |
var date = new Date(); | |
date.setHours(hour, minute, second); | |
var currentTime = new Date(); | |
// If the alarm time is in the past, move it to the next day | |
if(date.getTime() < currentTime.getTime()){ | |
date.setTime(date.getTime() + 86400000); // Increment by 1 day in millis | |
} | |
return date; | |
}; | |
return { | |
hour: hour, | |
minute: minute, | |
second: second, | |
getNextOccurrence: getNextOccurrence | |
}; | |
}; | |
var AlarmManager = (function(){ | |
var AlarmClockInfo = function(tag, triggerTime, intervalTime, operation){ | |
return { | |
tag: tag, | |
triggerTime: triggerTime, | |
intervalTime: intervalTime, | |
operation: operation | |
}; | |
}; | |
var alarms = []; | |
var alarmIds = []; | |
var cancelAlarm = function(alarmIndex){ | |
clearTimeout(alarmIds[alarmIndex]); | |
alarms.splice(alarmIndex, 1); | |
alarmIds.splice(alarmIndex, 1); | |
}; | |
var cancel = function(operation){ | |
if (typeof(operation) === "string") { | |
var tag = operation; | |
for (var i = alarms.length - 1; i >= 0; i--){ | |
if (alarms[i].tag === tag) { | |
cancelAlarm(i); | |
} | |
} | |
} else { | |
for (var i = alarms.length - 1; i >= 0; i--){ | |
if (alarms[i].operation === operation) { | |
cancelAlarm(i); | |
} | |
} | |
} | |
}; | |
var getNextAlarm = function(){ | |
if (alarms.length > 0) { | |
var min = alarms[0]; | |
for (var i = 0; i < alarms.length; i++) { | |
var alarm = alarms[i]; | |
if (alarm.triggerTime < min.triggerTime) { | |
min = alarm; | |
} | |
} | |
return min; | |
} | |
return null; | |
}; | |
var getAllAlarms = function(){ | |
return alarms; | |
}; | |
var addAlarm = function(alarm){ | |
var id = setTimeout(function(){ | |
alarm.operation(); | |
cancel(alarm.operation); | |
if (alarm.intervalTime > 0) { | |
setRepeating(alarm.tag, parseInt(new Date().getTime() + alarm.intervalTime), alarm.intervalTime, alarm.operation); | |
} | |
}, parseInt(alarm.triggerTime - new Date())); | |
alarms.push(alarm); | |
alarmIds.push(id); | |
}; | |
var set = function(tag, triggerAtMillis, operation){ | |
var alarm = new AlarmClockInfo(tag, triggerAtMillis, -1, operation); | |
addAlarm(alarm); | |
}; | |
var setRepeating = function(tag, triggerAtMillis, intervalMillis, operation){ | |
var alarm = new AlarmClockInfo(tag, triggerAtMillis, intervalMillis, operation); | |
addAlarm(alarm); | |
}; | |
return { | |
cancel: cancel, | |
getNextAlarm: getNextAlarm, | |
getAllAlarms: getAllAlarms, | |
set: set, | |
setRepeating: setRepeating | |
}; | |
})(); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment