VulpesOS/gaia/apps/costcontrol/js/settings/networkUsageAlarm.js
OverSu b38dea0597 Publish Vulpes Preview 15 sources for desktop, Android and Tundra
Share Gaia assets and adapters, keep private profiles and development documents local, and update both public READMEs.
2026-09-30 23:13:03 +02:00

89 lines
2.9 KiB
JavaScript
Executable file

/* exported NetworkUsageAlarm */
'use strict';
var NetworkUsageAlarm = (function() {
function _addAlarm(networkInterface, value, onsuccess, onerror) {
if (!networkInterface) {
console.error('Error, the network interface is not defined when trying ' +
'to add an alarm');
(typeof onerror === 'function') && onerror();
return;
}
if (value === null || typeof value === 'undefined') {
console.error('Limit value is undefined, impossible add an alarm');
(typeof onerror === 'function') && onerror();
return;
}
var request = navigator.mozNetworkStats.addAlarm(networkInterface, value);
request.onsuccess = onsuccess;
request.onerror = function error(e) {
console.error('Error, when trying to addAlarm to the interfaceId: ' +
networkInterface.id + ' and limit: ' + value);
(typeof onerror === 'function') && onerror();
};
}
function _clearAlarms(networkInterface, callback) {
if (!networkInterface) {
console.error('Error, the network interface is not defined when trying ' +
'to remove alarms');
return;
}
var request = navigator.mozNetworkStats.getAllAlarms(networkInterface);
request.onsuccess = function success() {
var alarmList = request.result;
var pendingRequest = alarmList.length;
function checkForCompletion() {
pendingRequest--;
if (pendingRequest === 0) {
(typeof callback === 'function') && callback();
}
}
function _onErrorRemoveAlarm() {
console.error('Error when trying to remove one alarm.');
checkForCompletion();
}
for (var i = 0; i < alarmList.length; i++) {
if (alarmList[i] && alarmList[i].alarmId) {
var rA = navigator.mozNetworkStats.removeAlarms(alarmList[i].alarmId);
rA.onsuccess = checkForCompletion;
rA.onerror = _onErrorRemoveAlarm;
}
}
if (pendingRequest === 0) {
(typeof callback === 'function') && callback();
}
};
request.onerror = function error() {
console.error('Error when trying to get alarms from the API to clear it');
};
}
function _updateAlarm(dataInterface, value, onsuccess, onerror) {
if (dataInterface && value) {
var addNewAlarm = _addAlarm.bind(null, dataInterface, value, onsuccess,
onerror);
_clearAlarms(dataInterface, addNewAlarm);
} else {
if (!dataInterface) {
console.error('Error, the network interface is not defined when ' +
'trying to update an alarm');
} else {
console.error('Error, the data limit value is not defined when ' +
'trying to update an alarm');
}
(typeof onerror === 'function') && onerror();
}
}
return {
updateAlarm: _updateAlarm,
clearAlarms: _clearAlarms
};
}());