You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
MobileApp/www/js/notifications.js

140 lines
4.2 KiB
JavaScript

/*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/
function getNotifications(callback) {
var notifications = [];
$.post(localStorage.getItem("syncurl"), {
username: localStorage.getItem("username"),
key: localStorage.getItem("key"),
action: "checknotifications"
}, function (data) {
if (data.status === 'OK') {
for (var i = 0; i < data.notifications.length; i++) {
var n = data.notifications[i];
notifications.push({
id: n.id,
title: n.title,
text: n.content,
sensitive: n.sensitive,
seen: n.seen
});
}
callback(notifications);
return;
}
if (typeof callback == 'function') {
callback(false);
}
}, "json").fail(function () {
if (typeof callback == 'function') {
callback(false);
}
});
}
function displayNotifications(callback) {
getNotifications(function (notifications) {
if (notifications != false) {
for (var i = 0; i < notifications.length; i++) {
var n = notifications[i];
if (n.seen || shown_notifications.includes(n.id)) {
continue;
}
cordova.plugins.notification.local.schedule([{
title: n.title,
text: n.text,
// actions: [
// {id: 'mark_read', title: "Mark Read"}
// ],
id: n.id,
lockscreen: !n.sensitive
}]);
shown_notifications.push(n.id);
}
if (typeof callback == 'function') {
callback();
}
return;
}
if (typeof callback == 'function') {
callback();
}
});
}
function deleteNotification(id) {
$.post(localStorage.getItem("syncurl"), {
username: localStorage.getItem("username"),
key: localStorage.getItem("key"),
password: localStorage.getItem("password"),
action: "deletenotification",
id: id
});
}
function readNotification(id) {
$.post(localStorage.getItem("syncurl"), {
username: localStorage.getItem("username"),
key: localStorage.getItem("key"),
password: localStorage.getItem("password"),
action: "readnotification",
id: id
});
}
function initForegroundNotifications() {
cordova.plugins.notification.local.setDefaults({
led: true,
color: '#2196F3',
vibrate: true,
smallIcon: "res://ic_notification"
});
cordova.plugins.notification.local.on("mark_read", function (notification) {
$.post(localStorage.getItem("syncurl"), {
username: localStorage.getItem("username"),
key: localStorage.getItem("key"),
password: localStorage.getItem("password"),
action: "readnotification",
id: notification.id
});
});
setInterval(displayNotifications, 30 * 1000);
if (typeof cordova.plugins.notification.local.launchDetails === 'undefined') {
displayNotifications();
}
}
function initBackgroundNotifications() {
var BackgroundFetch = window.BackgroundFetch;
// Your background-fetch handler.
var fetchCallback = function () {
console.log('[js] BackgroundFetch event received');
displayNotifications(function () {
BackgroundFetch.finish();
});
};
var failureCallback = function (error) {
console.log('- BackgroundFetch failed', error);
};
BackgroundFetch.configure(fetchCallback, failureCallback, {
minimumFetchInterval: 1,
stopOnTerminate: false,
startOnBoot: true,
forceReload: false,
enableHeadless: true
});
}
function initNotifications() {
initForegroundNotifications();
initBackgroundNotifications();
}