From de70d42b2b38a15488d038c3a560c8f09e913b78 Mon Sep 17 00:00:00 2001 From: Thomas Rupprecht Date: Sun, 25 Dec 2022 16:45:34 +0100 Subject: [PATCH] use browser.alarms api --- src/background.js | 34 ++++++++++++++++++++-------------- src/config.js | 2 +- src/manifest.json | 1 + 3 files changed, 22 insertions(+), 15 deletions(-) diff --git a/src/background.js b/src/background.js index e826a7a..83d7723 100644 --- a/src/background.js +++ b/src/background.js @@ -11,7 +11,7 @@ async function fetchJson(url) { /** * @param {number} days - * @returns {Promise} + * @returns {Promise>} */ function fetchCalendar(days = 28) { let url = `${Config.calenderUrl}?o=json`; @@ -66,25 +66,31 @@ async function fetchNewData() { } } -let intervalHandler = null; - -function stopFetching() { - if (intervalHandler !== null) { - clearInterval(intervalHandler); - intervalHandler = null; +/** + * @param {Alarm} alarm + */ +function handleAlarm(alarm) { + if (alarm.name === 'fetchData') { + fetchNewData(); } } + function startFetching() { fetchNewData(); - if (intervalHandler === null) { - intervalHandler = setInterval(() => { - fetchNewData(); - }, Config.refreshTimeout); - } + + browser.alarms.onAlarm.addListener(handleAlarm); + + const now = new Date(); + now.setMinutes(Math.ceil((now.getMinutes() + 1) / Config.refreshTimeout) * Config.refreshTimeout, 0, 0); + browser.alarms.create('fetchData', { + when: now.getTime(), + periodInMinutes: Config.refreshTimeout, + }); } -window.addEventListener('offline', () => { - stopFetching(); +window.addEventListener('offline', async () => { + browser.alarms.onAlarm.removeListener(handleAlarm); + await browser.alarms.clear('fetchData'); }); window.addEventListener('online', () => { startFetching(); diff --git a/src/config.js b/src/config.js index 3917e32..4f2a62c 100644 --- a/src/config.js +++ b/src/config.js @@ -1,5 +1,5 @@ export default { - refreshTimeout: 1000 * 60 * 5, // 5min, + refreshTimeout: 5, spaceApiUrl: 'https://www.usrspace.at/spaceapi.json', calenderUrl: 'https://www.usrspace.at/calendar.php', openColor: '#33cc33', diff --git a/src/manifest.json b/src/manifest.json index cae6793..7f383a1 100644 --- a/src/manifest.json +++ b/src/manifest.json @@ -20,6 +20,7 @@ "default_locale": "de", "permissions": [ "https://www.usrspace.at/*", + "alarms", "notifications", "storage", "webRequest"