Skip to content

Instantly share code, notes, and snippets.

@kylecorry31
Last active May 10, 2018 10:56
Show Gist options
  • Save kylecorry31/d9329898e136c80dd33b3c43ab8b4c32 to your computer and use it in GitHub Desktop.
Save kylecorry31/d9329898e136c80dd33b3c43ab8b4c32 to your computer and use it in GitHub Desktop.
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