107 lines
3.5 KiB
JavaScript
107 lines
3.5 KiB
JavaScript
'use strict';
|
|
|
|
angular.module('podcasts.alarmManager', ['podcasts.settings', 'podcasts.downloader'])
|
|
.run(['alarmManager', 'updateFeedsAlarmManager', function(alarmManager, updateFeedsAlarmManager) {
|
|
updateFeedsAlarmManager.setAlarmListener();
|
|
alarmManager.setAlarmListener();
|
|
}])
|
|
.service('alarmManager', function() {
|
|
var alarmManager = navigator.mozAlarms,
|
|
alarmHandlers = [];
|
|
|
|
if (!alarmManager) {
|
|
console.log('navigator.mozAlarms is not available');
|
|
return {
|
|
setAlarmIn: angular.noop,
|
|
removeExistingAlarms: angular.noop,
|
|
setAlarmListener: angular.noop,
|
|
addAlarmListener: angular.noop
|
|
};
|
|
}
|
|
|
|
function setAlarmIn(milliSeconds, data) {
|
|
var now = new Date(),
|
|
alarmDate = new Date(+now + +milliSeconds);
|
|
|
|
//TODO: check how to set timezone-specific alarms
|
|
var setAlarmRequest = alarmManager.add(alarmDate, "ignoreTimezone", data);
|
|
setAlarmRequest.onsuccess = function () {
|
|
console.log("Alarm scheduled for " + alarmDate);
|
|
};
|
|
setAlarmRequest.onerror = function () {
|
|
console.log("An error occurred when scheduling the alarm: " + e.target.error.name);
|
|
};
|
|
}
|
|
|
|
function removeExistingAlarms(type)
|
|
{
|
|
var allAlarms = alarmManager.getAll();
|
|
allAlarms.onsuccess = function (e) {
|
|
this.result.forEach(function (alarm) {
|
|
if (type === alarm.data.type) {
|
|
alarmManager.remove(alarm.id);
|
|
}
|
|
});
|
|
};
|
|
}
|
|
|
|
function addAlarmListener(type, alarmFunction)
|
|
{
|
|
alarmHandlers.push({type: type, handle: alarmFunction});
|
|
}
|
|
|
|
function handleAlarm(alarm)
|
|
{
|
|
alarmHandlers.forEach(function (alarmHandler) {
|
|
if (alarm.data.type == alarmHandler.type) {
|
|
alarmHandler.handle(alarm);
|
|
}
|
|
});
|
|
}
|
|
|
|
function setAlarmListener()
|
|
{
|
|
navigator.mozSetMessageHandler("alarm", handleAlarm);
|
|
}
|
|
|
|
return {
|
|
setAlarmIn: setAlarmIn,
|
|
removeExistingAlarms: removeExistingAlarms,
|
|
addAlarmListener: addAlarmListener,
|
|
setAlarmListener: setAlarmListener
|
|
};
|
|
})
|
|
.service('updateFeedsAlarmManager', ['settings', 'alarmManager', 'downloader', function(settings, alarmManager, downloader) {
|
|
var alarmType = "updateFeeds";
|
|
|
|
function setAlarm()
|
|
{
|
|
settings.get('refreshInterval', function(value) {
|
|
if (value.value > 0) {
|
|
var refreshInterval = value.value;
|
|
|
|
alarmManager.setAlarmIn(refreshInterval, {type: alarmType});
|
|
}
|
|
});
|
|
}
|
|
|
|
function changeAlarmInterval(newInterval)
|
|
{
|
|
alarmManager.removeExistingAlarms(alarmType);
|
|
this.setAlarm();
|
|
}
|
|
|
|
function setAlarmListener()
|
|
{
|
|
alarmManager.addAlarmListener(alarmType, function(alarm) {
|
|
downloader.downloadAll(true);
|
|
setAlarm();
|
|
});
|
|
}
|
|
|
|
return {
|
|
setAlarm: setAlarm,
|
|
changeAlarmInterval: changeAlarmInterval,
|
|
setAlarmListener: setAlarmListener
|
|
};
|
|
}]);
|