VulpesOS/assets/webapps/communications.gaiamobile.org/contacts/js/deferred_actions.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

119 lines
3.1 KiB
JavaScript

'use strict';
/* global fb */
/* global fbLoader */
/* global ImportStatusData */
/* global LazyLoader */
/* global Migrator */
/* global utils */
/* exported DeferredActions */
// Methods not related with the list rendering that must be executed after
// render to not damage performance.
var DeferredActions = (function() {
var config;
var TOTAL_RETRIES = 4;
var execute = function execute() {
config = utils.cookie.load();
if (!fbLoader.loaded) {
window.addEventListener('facebookLoaded', doExecute);
return;
}
doExecute();
};
var doExecute = function doExecute() {
window.removeEventListener('facebookLoaded', doExecute);
checkFacebookSynchronization(config);
checkVersionMigration(config);
checkFacebookSanity(config);
};
// If FB Cleaning data was ongoing we finish it
// This avoids keeping the contacts database inconsistent. See bug 1073684
function checkFacebookSanity(config) {
if (!config || !config.fbCleaningInProgress ||
config.fbCleaningInProgress > TOTAL_RETRIES) {
return;
}
var req = fb.utils.clearFbData();
req.onsuccess = function() {
var cleaner = req.result;
cleaner.onsuccess = function() {
console.log('Finished clean Fb data');
fb.markFbCleaningInProgress(0);
};
cleaner.onerror = function() {
console.error('FB Cleaner reported an error: ',
req.error && req.error.name);
fb.markFbCleaningInProgress(++config.fbCleaningInProgress);
};
};
req.onerror = function() {
console.error('Unable to start cleaning', req.error && req.error.name);
fb.markFbCleaningInProgress(++config.fbCleaningInProgress);
};
}
function checkFacebookSynchronization(config) {
// Checks if we should set a fb sync alarm when fb sync has been done in ftu
if (config && config.fbScheduleDone) {
return;
}
LazyLoader.load([
'/facebook/js/fb_sync.js',
'/shared/js/contacts/import/import_status_data.js'
], performFbSync);
}
function performFbSync() {
var fbutils = fb.utils;
function neverExecuteAgain() {
ImportStatusData.remove(fbutils.SCHEDULE_SYNC_KEY);
utils.cookie.update({fbScheduleDone: true});
navigator.removeIdleObserver(idleObserver);
idleObserver = null;
}
var idleObserver = {
time: 3,
onidle: function onidle() {
ImportStatusData.get(fbutils.SCHEDULE_SYNC_KEY).then(function(date) {
if (date) {
fbutils.setLastUpdate(date, function() {
var req = fb.sync.scheduleNextSync();
req.onsuccess = neverExecuteAgain;
req.onerror = neverExecuteAgain;
});
} else {
neverExecuteAgain();
}
});
}
};
navigator.addIdleObserver(idleObserver);
}
function checkVersionMigration(config) {
if (!config || !config.fbMigrated || !config.accessTokenMigrated) {
LazyLoader.load('js/migrator.js', function() {
Migrator.start(config);
});
}
}
return {
'execute': execute
};
})();