111 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			111 lines
		
	
	
		
			3.1 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 gatherSyncData() {
 | 
						|
    var data = {
 | 
						|
        localStorage: {},
 | 
						|
        changed: getStorage("lastchange") == null ? 0 : getStorage("lastchange"),
 | 
						|
    };
 | 
						|
    if (!inStorage("lastsync")) {
 | 
						|
        // first time syncing to the server, let's make sure
 | 
						|
        // the server settings take precedence
 | 
						|
        data.changed = 1;
 | 
						|
    }
 | 
						|
    var allitems = getAllStorage();
 | 
						|
    for (var i = 0; i < allitems.length; i++) {
 | 
						|
        var key = allitems[i].key;
 | 
						|
        var value = allitems[i].value;
 | 
						|
        if (SETTINGS.synckeyblacklist.includes(key)) {
 | 
						|
            continue;
 | 
						|
        }
 | 
						|
        data.localStorage[key] = value;
 | 
						|
    }
 | 
						|
    return data;
 | 
						|
}
 | 
						|
 | 
						|
function syncDataToLocalStorage(data) {
 | 
						|
    for (var key in data.localStorage) {
 | 
						|
        if (data.localStorage.hasOwnProperty(key)) {
 | 
						|
            setStorage(key, data.localStorage[key], true);
 | 
						|
        }
 | 
						|
    }
 | 
						|
}
 | 
						|
 | 
						|
function resolveSync(remotedata) {
 | 
						|
    var localchangetime = getStorage("lastchange");
 | 
						|
    if (remotedata.changed == null) {
 | 
						|
        // The server has nothing, this is the first sync
 | 
						|
        return true;
 | 
						|
    }
 | 
						|
    if (localchangetime == null) {
 | 
						|
        // No local setting changes but since we've gotten this far,
 | 
						|
        // the server has stuff for us
 | 
						|
        syncDataToLocalStorage(remotedata);
 | 
						|
        return true;
 | 
						|
    }
 | 
						|
    if (localchangetime < remotedata.changed) {
 | 
						|
        // The server has newer stuff for us
 | 
						|
        syncDataToLocalStorage(remotedata);
 | 
						|
        return true;
 | 
						|
    }
 | 
						|
    if (localchangetime >= remotedata.changed) {
 | 
						|
        // Our local data is newer or the same as the server copy
 | 
						|
        return true;
 | 
						|
    }
 | 
						|
    return false;
 | 
						|
}
 | 
						|
 | 
						|
function syncNow(callback) {
 | 
						|
    var username = getStorage("username");
 | 
						|
    var password = getStorage("password");
 | 
						|
    if (username == null || password == null) {
 | 
						|
        return false;
 | 
						|
    }
 | 
						|
    var data = gatherSyncData();
 | 
						|
 | 
						|
    $.post(SETTINGS.syncapi, {
 | 
						|
        username: username,
 | 
						|
        password: password,
 | 
						|
        data: JSON.stringify(data)
 | 
						|
    }, function (resp) {
 | 
						|
        if (resp.status == "OK") {
 | 
						|
            resolveSync(resp.data);
 | 
						|
            setStorage("lastsync", Date.now() / 1000);
 | 
						|
            if (typeof callback == "function") {
 | 
						|
                callback();
 | 
						|
            }
 | 
						|
        }
 | 
						|
    }, "json");
 | 
						|
    return true;
 | 
						|
}
 | 
						|
 | 
						|
function loadSettings() {
 | 
						|
    applyColorTheme();
 | 
						|
 | 
						|
    if (platform_type == "cordova") {
 | 
						|
        if (getStorage("wakelock") == "true") {
 | 
						|
            window.powerManagement.acquire(function () {
 | 
						|
                console.log("Info", 'Wakelock acquired');
 | 
						|
            }, function () {
 | 
						|
                console.log("Warn", 'Failed to acquire wakelock');
 | 
						|
            });
 | 
						|
        } else {
 | 
						|
            window.powerManagement.release(function () {
 | 
						|
                console.log("Info", 'Wakelock released');
 | 
						|
            }, function () {
 | 
						|
                console.log("Warn", 'Failed to release wakelock');
 | 
						|
            });
 | 
						|
        }
 | 
						|
    }
 | 
						|
}
 | 
						|
 | 
						|
syncNow(loadSettings);
 | 
						|
 | 
						|
// Sync every two minutes
 | 
						|
setInterval(function () {
 | 
						|
    syncNow(loadSettings);
 | 
						|
}, 1000 * 60 * 2); |