cordova-plugin-cloud-settings
Version:
A Cordova plugin for Android & iOS to persist user settings in cloud storage across devices and installs.
118 lines (97 loc) • 3.23 kB
JavaScript
var onRestoreFn = function(){};
var merge = function () {
var destination = {},
sources = [].slice.call(arguments, 0);
sources.forEach(function (source) {
var prop;
for (prop in source) {
if (prop in destination && Array.isArray(destination[prop])) {
// Concat Arrays
destination[prop] = destination[prop].concat(source[prop]);
} else if (prop in destination && typeof destination[prop] === "object") {
// Merge Objects
destination[prop] = merge(destination[prop], source[prop]);
} else {
// Set new values
destination[prop] = source[prop];
}
}
});
return destination;
};
var fail = function (onError, operation, error) {
if(typeof error === "object"){
error = JSON.stringify(error);
}
var msg = "CloudSettingsPlugin ERROR " + operation + ": " + error;
if (onError){
onError(msg);
}else{
console.error(msg);
}
};
var cloudsettings = {};
cloudsettings.enableDebug = function(onSuccess) {
return cordova.exec(onSuccess,
null,
'CloudSettingsPlugin',
'enableDebug',
[]);
};
cloudsettings.load = function(onSuccess, onError){
cordova.exec(function(sData){
try{
var oData = JSON.parse(sData);
}catch(e){
return fail(onError, "parsing stored settings to JSON", e.message);
}
try{
onSuccess(oData);
}catch(e){
return fail(onError, "calling success callback", e.message);
}
}, fail.bind(this, onError, "loading stored settings"), 'CloudSettingsPlugin', 'load', []);
};
cloudsettings.save = function(settings, onSuccess, onError, overwrite){
if(typeof settings !== "object" || typeof settings.length !== "undefined") throw "settings must be a key/value object!";
var doSave = function(){
settings.timestamp = (new Date()).valueOf();
try{
var data = JSON.stringify(settings);
}catch(e){
return fail(onError, "convert settings to JSON", e.message);
}
cordova.exec(function(){
try{
onSuccess(settings);
}catch(e){
return fail(onError, "calling success callback", e.message);
}
}, fail.bind(this, onError, "saving settings"), 'CloudSettingsPlugin', 'save', [data]);
};
if(overwrite){
doSave();
}else{
cloudsettings.exists(function(exists){
if(exists){
// Load stored settings and merge them with new settings
cloudsettings.load(function(stored){
settings = merge(stored, settings);
doSave();
}, onError);
}else{
doSave();
}
});
}
};
cloudsettings.exists = function(onSuccess){
cordova.exec(onSuccess, null, 'CloudSettingsPlugin', 'exists', []);
};
cloudsettings.onRestore = function(fn){
onRestoreFn = fn;
};
cloudsettings._onRestore = function(){
onRestoreFn();
};
module.exports = cloudsettings;