Skip to content

Instantly share code, notes, and snippets.

@valarpirai
Created June 23, 2015 10:36
Show Gist options
  • Save valarpirai/c8dd875bce83d3b2eec6 to your computer and use it in GitHub Desktop.
Save valarpirai/c8dd875bce83d3b2eec6 to your computer and use it in GitHub Desktop.
Javascript - Alarm Manager like https://developer.chrome.com/apps/alarms
var Alarm = function () {
this.name;
this.scheduledTime;
this.periodInMinutes;
};
var AlarmManager = function () {
var alarms = {},
timerOuts = {},
timerIntervels = {},
self = this,
onAlarmListener = null;
var setOneTimeTimer = function (alarmName) {
var alarm = alarms[alarmName];
var delayInMilliSeconds = alarm.scheduledTime - Date.now();
var timeout = setTimeout(function (alarmName) {
return function () { // SetTimeout Callback function
var l_alarm = alarms[alarmName];
setRepeatedTimer(alarmName);
// OnAlarm callback function
if(onAlarmListener)
onAlarmListener(l_alarm);
};
}(alarmName), delayInMilliSeconds);
timerOuts[alarmName] = timeout;
};
var setRepeatedTimer = function (alarmName) {
var alarm = alarms[alarmName];
// Set Interval if the alarm has periodInMinutes
if(alarm.periodInMinutes) {
var intervalInMilliSeconds = alarm.periodInMinutes * 60 * 1000;
var timeInterval = setInterval(function (alarmName) {
return function () {
// OnAlarm callback function
if(onAlarmListener)
onAlarmListener(alarms[alarmName]);
};
}(alarmName), intervalInMilliSeconds);
timerIntervels[alarmName] = timeInterval;
}
};
this.create = function (alarmName, alarmInfo) {
var alarm = new Alarm();
alarm.name = alarmName;
if(!alarmInfo['delayInMinutes'])
alarm.scheduledTime = alarmInfo['when'];
else
alarm.scheduledTime = Date.now() + (alarmInfo['delayInMinutes'] * 60 * 1000);
alarm.periodInMinutes = alarmInfo['periodInMinutes'];
alarms[alarmName] = alarm;
setOneTimeTimer(alarmName);
};
this.get = function (alarmName, callback){
callback(alarms[alarmName]);
};
this.getAll = function (callback){
for(var alarmName in alarms)
alarmList.push(alarms[alarmName]);
callback(alarmList);
};
this.clear = function (alarmName, callback){
clearTimeout(timerOuts[alarmName]); // Clear Timeout
delete timerOuts[alarmName];
clearInterval(timerIntervels[alarmName]);// Clear Interval
delete timerIntervels[alarmName];
delete alarms[alarmName];
callback(true);
};
this.clearAll = function (callback) {
for (var alarmName in alarms) {
clearTimeout(timerOuts[alarmName]);
delete timerOuts[alarmName];
clearInterval(timerIntervels[alarmName]);
delete timerIntervels[alarmName];
delete alarms[alarmName];
}
callback(true);
};
this.addListener = function (callback){
if(callback)
onAlarmListener = callback;
};
};
var alarmManager = new AlarmManager();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment