From 1902b5b2d95cd645f760e9ff4aad8380bf94be1c Mon Sep 17 00:00:00 2001 From: s2 Date: Mon, 18 Mar 2019 16:44:36 +0100 Subject: [PATCH] add notification function --- src/background-pinger.js | 48 ++++++++++++++++++++++++++++++++-------- src/manifest.json | 3 ++- src/popup/ping.css | 2 +- src/popup/ping.html | 5 +++++ src/popup/ping.js | 4 +++- src/utils.js | 3 ++- 6 files changed, 52 insertions(+), 13 deletions(-) diff --git a/src/background-pinger.js b/src/background-pinger.js index 35faf9f..b20f570 100644 --- a/src/background-pinger.js +++ b/src/background-pinger.js @@ -2,24 +2,53 @@ import { loadOptions } from './utils.js'; let options = {}; +function down(error) { + if (options.alert && !options.alertShown) { + browser.notifications.create('server-down-notification', { + 'type': 'basic', + 'iconUrl': browser.extension.getURL('icons/offline-48.png'), + 'title': 'Server went down', + 'message': error + }); + + options.alertShown = true; + } + + browser.browserAction.setIcon({ + path: 'icons/offline-32.png' + }); + + if (error) { + browser.browserAction.setTitle({ + title: error + }); + } +} + +function up() { + browser.browserAction.setIcon({ + path: 'icons/available-32.png' + }); + browser.browserAction.setTitle({ + title: 'pinging ' + options.server + }); + + options.alertShown = false; + browser.notifications.clear('server-down-notification'); +} + function ping(server) { console.log('pinging ' + server); fetch(server) .then(function(response) { if (response.status === 200) { - browser.browserAction.setIcon({ - path: 'icons/available-32.png' - }); + up(); } else { - browser.browserAction.setIcon({ - path: 'icons/offline-32.png' - }); + down(response.statusText); } }) .catch((error) => { - browser.browserAction.setIcon({ - path: 'icons/offline-32.png' - }); + down(error.message); }); } @@ -27,6 +56,7 @@ function reloadConfig() { loadOptions().then((savedOptions) => { options.server = savedOptions.server; options.interval = savedOptions.interval; + options.alert = savedOptions.alert; if (options.server && options.interval >= 1) { ping(options.server); diff --git a/src/manifest.json b/src/manifest.json index d6395db..ff793aa 100644 --- a/src/manifest.json +++ b/src/manifest.json @@ -28,6 +28,7 @@ "permissions": [ "storage", "", - "webRequest" + "webRequest", + "notifications" ] } diff --git a/src/popup/ping.css b/src/popup/ping.css index 991b71c..f55ccbf 100644 --- a/src/popup/ping.css +++ b/src/popup/ping.css @@ -29,5 +29,5 @@ input[type="number"] { } input[type="checkbox"] { - margin-bottom: -7px; + margin-bottom: -4px; } diff --git a/src/popup/ping.html b/src/popup/ping.html index b827eed..8d7891f 100644 --- a/src/popup/ping.html +++ b/src/popup/ping.html @@ -20,6 +20,11 @@ + +
+ + +
diff --git a/src/popup/ping.js b/src/popup/ping.js index 6c97ac8..94d4820 100644 --- a/src/popup/ping.js +++ b/src/popup/ping.js @@ -3,7 +3,8 @@ import { loadOptions, saveOptions } from '../utils.js'; function getParams() { return { server: document.getElementById('server').value, - interval: parseInt(document.getElementById('interval').value) + interval: parseInt(document.getElementById('interval').value), + alert: document.getElementById('alert').checked }; }; @@ -19,6 +20,7 @@ document.addEventListener('DOMContentLoaded', function() { loadOptions().then((options) => { document.getElementById('server').value = options.server; document.getElementById('interval').value = options.interval; + document.getElementById('alert').checked = options.alert; browser.runtime.sendMessage('configChanged'); }); diff --git a/src/utils.js b/src/utils.js index f488b8d..38144b4 100644 --- a/src/utils.js +++ b/src/utils.js @@ -1,7 +1,8 @@ function loadOptions() { return browser.storage.local.get({ server: '', - interval: 60 + interval: 60, + alert: false }); };