From c963f3dea78909ebcef00e980ec9e09438a3821e Mon Sep 17 00:00:00 2001 From: Matteo Gheza Date: Tue, 29 Dec 2020 00:52:31 +0100 Subject: [PATCH] Support for saveData and others device APIs --- server/resources/src/main.js | 44 +++++++++++++++++++++++++++++++----- 1 file changed, 38 insertions(+), 6 deletions(-) diff --git a/server/resources/src/main.js b/server/resources/src/main.js index 402039f..e060a74 100644 --- a/server/resources/src/main.js +++ b/server/resources/src/main.js @@ -54,17 +54,35 @@ $( document ).ajaxError(function(event, xhr, settings, error) { console.log(settings); }); +var installServiceWorker = true; if (getCookie("authenticated")) { if ('serviceWorker' in navigator) { - window.addEventListener('load', () => { - navigator.serviceWorker.register('sw.js').then(registration => { - console.log('SW registered: ', registration); - }).catch(registrationError => { - console.log('SW registration failed: ', registrationError); + if ('connection' in navigator && navigator.connection.saveData && !getCookie("forceServiceWorkerInstall")) { + console.log("Skipping ServiceWorker installation because saveData is enabled"); + installServiceWorker = false; + } + if ('storage' in navigator && 'estimate' in navigator.storage && !getCookie("forceServiceWorkerInstall")){ + navigator.storage.estimate().then(quota => { + const requiredMemory = 3 * 1e+6; + if (quota < requiredMemory) { + console.log("Skipping ServiceWorker installation because memory is low. memory="+quota); + installServiceWorker = false; + } }); - }); + } + } else { + installServiceWorker = false; } } +if(installServiceWorker){ + window.addEventListener('load', () => { + navigator.serviceWorker.register('sw.js').then(registration => { + console.log('SW registered: ', registration); + }).catch(registrationError => { + console.log('SW registration failed: ', registrationError); + }); + }); +} function fillTable(data, replaceLatLngWithMap=false){ $("#table_body").empty(); @@ -100,6 +118,16 @@ var offline = false; var loadTable_interval = undefined; var old_data = "null"; function loadTable(table_page, set_interval=true, interval=10000, onlineReload=false){ + if ('getBattery' in navigator) { + navigator.getBattery().then((level, charging) => { + if (!charging && level < 0.2) { + return; + } + }) + } + if ('deviceMemory' in navigator && navigator.deviceMemory < 0.2) { + return; + } let replaceLatLngWithMap = table_page == "services" || table_page == "trainings"; $.getJSON({ url: "resources/ajax/ajax_"+table_page+".php", data: { "old_data": old_data }, success: function( data, status, xhr ) { old_data = xhr.getResponseHeader('data'); //TODO: refactoring and adding comments @@ -143,6 +171,10 @@ function loadTable(table_page, set_interval=true, interval=10000, onlineReload=f } }); if(set_interval){ + if ('connection' in navigator && navigator.connection.saveData) { + interval += 5000; + } + console.log("table_load interval "+interval); window.loadTable_interval = setInterval(function() { window.loadTable(table_page, false, interval, onlineReload); }, interval);