VulpesOS/gaia/apps/system/js/newsletter_manager.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

84 lines
2.5 KiB
JavaScript
Executable file

/* global LazyLoader, Basket, Promise */
'use strict';
var NewsletterManager = {
start: function() {
return new Promise(function (resolve, reject) {
LazyLoader.load('/shared/js/basket_client.js', function basketLoaded() {
Basket.getDataStore().then(function gotDS(store) {
store.get(1).then(function(itemRetrieved) {
if (typeof itemRetrieved === 'undefined' ||
itemRetrieved.emailSent) {
// either no item stored or it was already sent
resolve();
} else {
// try to send the email
sendWhenOnline(itemRetrieved.newsletter_email)
.then(function () {
resolve();
})
.catch(function () {
reject();
});
}
});
}).catch(function promiseFailed(error) {
var errMsg = 'Something failed: ' + error;
console.error(errMsg);
reject(new Error(errMsg));
});
});
});
},
sendNewsletter: function(emailAddress) {
return new Promise(function (resolve, reject) {
LazyLoader.load('/shared/js/basket_client.js', function basketLoaded() {
Basket.send(emailAddress, function itemSent(err, data) {
if (err) {
var errMsg = 'Error sending data: ' + err;
console.error(errMsg);
reject(new Error(errMsg));
}
if (data && data.status === 'ok') {
// Once is sent, we update the DataStore
Basket.getDataStore().then(function gotDS(store) {
var newObj = {
'emailSent': true
};
store.put(newObj, 1);
resolve();
}).catch(function error(err) {
var errMsg = 'Error getting the datastore: ' + err;
console.error(errMsg);
reject(new Error(errMsg));
});
} else {
reject(
new Error('Error on server answer: ' + JSON.stringify(data))
);
}
});
});
});
}
};
function sendWhenOnline(email) {
return new Promise(function (resolve, reject) {
if (navigator.onLine) {
// send it inmediately
NewsletterManager.sendNewsletter(email).then(resolve).catch(reject);
} else {
// wait for connection
window.addEventListener('online', function online() {
window.removeEventListener('online', online);
NewsletterManager.sendNewsletter(email);
});
reject();
}
});
}