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.
This commit is contained in:
OverSu 2026-09-30 23:13:03 +02:00
commit b38dea0597
25901 changed files with 9982925 additions and 369 deletions

View file

@ -0,0 +1,101 @@
/*global SettingsURL */
(function(exports) {
'use strict';
var SETTINGS = {
notificationVolume: 'audio.volume.notification',
vibration: 'vibration.enabled',
ringtone: 'notification.ringtone'
};
function entry(key, value) {
if (urls[key]) {
return new SettingsURL().set(value);
}
return value;
}
// one day we'll be able to use ES6 initializers instead
var urls = {};
urls[SETTINGS.ringtone] = 1;
function getSetting(key) {
if (!navigator.mozSettings) {
return Promise.reject(new Error('The mozSettings API is not available.'));
}
var request = navigator.mozSettings.createLock().get(key);
return new Promise((resolve, reject) => {
request.onsuccess = function() {
resolve(entry(key, request.result[key]));
};
request.onerror = function() {
reject(new Error('Error while retrieving ' + key));
};
});
}
function getSettings(settings) {
return Promise.all(
settings.map(getSetting)
).catch((e) => {
// catch and log errors
console.error('Error while retrieving settings', e.message, e);
return settings.map(() => null);
}).then((results) => {
return settings.reduce((result, setting, i) => {
result[setting] = results[i];
return result;
}, {});
});
}
function ringtone(ringtoneFile) {
var ringtonePlayer = new Audio();
ringtonePlayer.src = ringtoneFile;
ringtonePlayer.mozAudioChannelType = 'notification';
ringtonePlayer.play();
window.setTimeout(function smsRingtoneEnder() {
ringtonePlayer.pause();
ringtonePlayer.removeAttribute('src');
ringtonePlayer.load();
}, 2000);
}
function vibrate() {
// vibration only works when App is in the foreground
if (document.hidden) {
window.addEventListener('visibilitychange', function waitOn() {
window.removeEventListener('visibilitychange', waitOn);
navigator.vibrate([200, 200, 200, 200]);
});
} else {
navigator.vibrate([200, 200, 200, 200]);
}
}
var Notify = {
ringtone: function notification_ringtone() {
return getSettings(
[SETTINGS.notificationVolume, SETTINGS.ringtone]
).then((settings) => {
if (settings[SETTINGS.notificationVolume] &&
settings[SETTINGS.ringtone]) {
ringtone(settings[SETTINGS.ringtone]);
}
});
},
vibrate: function notification_vibrate() {
return getSettings([SETTINGS.vibration]).then((settings) => {
if (settings[SETTINGS.vibration]) {
vibrate();
}
});
}
};
exports.Notify = Notify;
}(this));