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,136 @@
/* global Promise */
/* exported VersionHelper */
'use strict';
(function(exports) {
// Helper to work with version strings
// e.g. 2.0.0.1-prerelease becomes { major: 2, minor: 0 }
function Version(str) {
str = str || '0.0';
var parts = str.split('.');
this.major = parts[0];
this.minor = parts[1];
this.toString = function() {
return '' + str;
};
}
function InfoResult(current, previous) {
this.current = current;
this.previous = previous;
}
InfoResult.prototype.isUpgrade = function() {
var prev = this.previous,
curr = this.current,
isUpgrade = false;
// dont treat lack of previous version info as an upgrade
if (prev && curr) {
isUpgrade = curr.major > prev.major || curr.minor > prev.minor;
}
return isUpgrade;
};
InfoResult.prototype.delta = function() {
var prev = this.previous,
curr = this.current;
var delta = '';
if (prev) {
delta += prev.major + '.' +prev.minor;
}
delta += '..';
if (curr) {
delta += curr.major + '.' + curr.minor;
}
return delta;
};
// Helper to get settings
function getSetting(setting, cb, errback) {
var req = navigator.mozSettings.createLock().get(setting);
req.onsuccess = function() {
var value = req.result[setting];
if(typeof cb === 'function') {
cb(value);
}
};
req.onerror = function() {
if(typeof errback === 'function') {
errback(req.error);
}
};
}
function getCurrent() {
return new Promise(function(resolve, reject) {
getSetting('deviceinfo.os', function(value) {
resolve(value ? new Version(value) : null);
}, function(err) {
reject(err);
});
});
}
function getPrevious() {
return new Promise(function(resolve, reject) {
// XXX: we return null version when previous_os lookup fails
getSetting('deviceinfo.previous_os', function(value) {
resolve(value ? new Version(value) : null);
}, function(err) {
resolve(null);
});
});
}
function updatePrevious(str) {
var currentPromise = str ? Promise.resolve(new Version(str)) :
getCurrent();
var setPromise = new Promise(function(resolve, reject) {
currentPromise.then(function(version) {
// guard against empty deviceinfo.os
if (version) {
var req = navigator.mozSettings.createLock().set({
'deviceinfo.previous_os': version.toString()
});
req.onsuccess = function() {
resolve(version);
};
req.onerror = function() {
var reason = req.error;
reject(reason);
};
} else {
resolve(null);
}
}, function(err) {
reject('Error getting previous version: ', err);
});
});
return setPromise;
}
function getVersionInfo() {
var info = new InfoResult();
var infoPromise = new Promise(function(resolve, reject) {
Promise.all([
getCurrent().then(function(version) {
info.current = version;
}),
getPrevious().then(function(version) {
info.previous = version;
})
]).then(function() {
resolve(info);
}, reject);
});
return infoPromise;
}
exports.VersionHelper = {
updatePrevious: updatePrevious,
getVersionInfo: getVersionInfo
};
})(window);