Created
June 23, 2015 10:36
-
-
Save valarpirai/c8dd875bce83d3b2eec6 to your computer and use it in GitHub Desktop.
Javascript - Alarm Manager like https://developer.chrome.com/apps/alarms
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 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