520 lines
13 KiB
JavaScript
520 lines
13 KiB
JavaScript
cordova.define("cordova-plugin-nativestorage.mainHandle", function(require, exports, module) { var inBrowser = false;
|
|
var NativeStorageError = require('./NativeStorageError');
|
|
|
|
|
|
function isInBrowser() {
|
|
inBrowser = (window.cordova && (window.cordova.platformId === 'browser' || window.cordova.platformId === 'osx')) || !(window.phonegap || window.cordova);
|
|
return inBrowser;
|
|
}
|
|
|
|
function storageSupportAnalyse() {
|
|
if (!isInBrowser()) {
|
|
return 0;
|
|
//storageHandlerDelegate = exec;
|
|
} else {
|
|
if (window.localStorage) {
|
|
return 1;
|
|
//storageHandlerDelegate = localStorageHandle;
|
|
} else {
|
|
return 2;
|
|
//console.log("ALERT! localstorage isn't supported");
|
|
}
|
|
}
|
|
}
|
|
|
|
//if storage not available gracefully fails, no error message for now
|
|
function StorageHandle() {
|
|
this.storageSupport = storageSupportAnalyse();
|
|
switch (this.storageSupport) {
|
|
case 0:
|
|
var exec = require('cordova/exec');
|
|
this.storageHandlerDelegate = exec;
|
|
break;
|
|
case 1:
|
|
var localStorageHandle = require('./LocalStorageHandle');
|
|
this.storageHandlerDelegate = localStorageHandle;
|
|
break;
|
|
case 2:
|
|
console.log("ALERT! localstorage isn't supported");
|
|
break;
|
|
default:
|
|
console.log("StorageSupport Error");
|
|
break;
|
|
}
|
|
}
|
|
|
|
StorageHandle.prototype.initWithSuiteName = function(suiteName, success, error) {
|
|
if (suiteName === null) {
|
|
error("Null suiteName isn't supported");
|
|
return;
|
|
}
|
|
this.storageHandlerDelegate(success, error, "NativeStorage", "initWithSuiteName", [suiteName]);
|
|
};
|
|
|
|
StorageHandle.prototype.set = function(reference, value, success, error) {
|
|
|
|
//if error is null then replace with empty function to silence warnings
|
|
if(!error){
|
|
error = function(){};
|
|
}
|
|
|
|
if (reference === null) {
|
|
error("The reference can't be null");
|
|
return;
|
|
}
|
|
if (value === null) {
|
|
error("a Null value isn't supported");
|
|
return;
|
|
}
|
|
switch (typeof value) {
|
|
case 'undefined':
|
|
error("an undefined type isn't supported");
|
|
break;
|
|
case 'boolean': {
|
|
this.putBoolean(reference, value, success, error);
|
|
break;
|
|
}
|
|
case 'number': {
|
|
// Good now check if it's a float or an int
|
|
if (value === +value) {
|
|
if (value === (value | 0)) {
|
|
// it's an int
|
|
this.putInt(reference, value, success, error);
|
|
} else if (value !== (value | 0)) {
|
|
this.putDouble(reference, value, success, error);
|
|
}
|
|
} else {
|
|
error("The value doesn't seem to be a number");
|
|
}
|
|
break;
|
|
}
|
|
case 'string': {
|
|
this.putString(reference, value, success, error);
|
|
break;
|
|
}
|
|
case 'object': {
|
|
this.putObject(reference, value, success, error);
|
|
break;
|
|
}
|
|
default:
|
|
error("The type isn't supported or isn't been recognized");
|
|
break;
|
|
}
|
|
};
|
|
|
|
/* removing */
|
|
StorageHandle.prototype.remove = function(reference, success, error) {
|
|
|
|
//if error is null then replace with empty function to silence warnings
|
|
if(!error){
|
|
error = function(){};
|
|
}
|
|
|
|
if (reference === null) {
|
|
error("Null reference isn't supported");
|
|
return;
|
|
}
|
|
|
|
if (inBrowser) {
|
|
try {
|
|
localStorage.removeItem(reference);
|
|
success();
|
|
} catch (e) {
|
|
error(e);
|
|
}
|
|
} else {
|
|
this.storageHandlerDelegate(success, error, "NativeStorage", "remove", [reference]);
|
|
}
|
|
};
|
|
|
|
/* clearing */
|
|
StorageHandle.prototype.clear = function(success, error) {
|
|
|
|
//if error is null then replace with empty function to silence warnings
|
|
if(!error){
|
|
error = function(){};
|
|
}
|
|
|
|
if (inBrowser) {
|
|
try {
|
|
localStorage.clear();
|
|
success();
|
|
} catch (e) {
|
|
error(e);
|
|
}
|
|
} else {
|
|
this.storageHandlerDelegate(success, error, "NativeStorage", "clear", []);
|
|
}
|
|
};
|
|
|
|
|
|
/* boolean storage */
|
|
StorageHandle.prototype.putBoolean = function(reference, aBoolean, success, error) {
|
|
|
|
//if error is null then replace with empty function to silence warnings
|
|
if(!error){
|
|
error = function(){};
|
|
}
|
|
|
|
if (reference === null) {
|
|
error("Null reference isn't supported");
|
|
return;
|
|
}
|
|
|
|
if (aBoolean === null) {
|
|
error("a Null value isn't supported");
|
|
return;
|
|
}
|
|
|
|
if (typeof aBoolean === 'boolean') {
|
|
this.storageHandlerDelegate(function(returnedBool) {
|
|
if ('string' === typeof returnedBool) {
|
|
if ( (returnedBool === 'true') ) {
|
|
success(true);
|
|
} else if ( (returnedBool === 'false') ) {
|
|
success(false);
|
|
} else {
|
|
error("The returned boolean from SharedPreferences was not recognized: " + returnedBool);
|
|
}
|
|
} else {
|
|
success(returnedBool);
|
|
}
|
|
}, error, "NativeStorage", "putBoolean", [reference, aBoolean]);
|
|
} else {
|
|
error("Only boolean types are supported");
|
|
}
|
|
};
|
|
|
|
|
|
StorageHandle.prototype.getBoolean = function(reference, success, error) {
|
|
|
|
//if error is null then replace with empty function to silence warnings
|
|
if(!error){
|
|
error = function(){};
|
|
}
|
|
|
|
if (reference === null) {
|
|
error("Null reference isn't supported");
|
|
return;
|
|
}
|
|
this.storageHandlerDelegate(function(returnedBool) {
|
|
if ('string' === typeof returnedBool) {
|
|
if ( (returnedBool === 'true') ) {
|
|
success(true);
|
|
} else if ( (returnedBool === 'false') ) {
|
|
success(false);
|
|
} else {
|
|
error("The returned boolean from SharedPreferences was not recognized: " + returnedBool);
|
|
}
|
|
} else {
|
|
success(returnedBool);
|
|
}
|
|
}, error, "NativeStorage", "getBoolean", [reference]);
|
|
};
|
|
|
|
/* int storage */
|
|
StorageHandle.prototype.putInt = function(reference, anInt, success, error) {
|
|
|
|
//if error is null then replace with empty function to silence warnings
|
|
if(!error){
|
|
error = function(){};
|
|
}
|
|
|
|
if (reference === null) {
|
|
error("Null reference isn't supported");
|
|
return;
|
|
}
|
|
this.storageHandlerDelegate(success, error, "NativeStorage", "putInt", [reference, anInt]);
|
|
};
|
|
|
|
StorageHandle.prototype.getInt = function(reference, success, error) {
|
|
|
|
//if error is null then replace with empty function to silence warnings
|
|
if(!error){
|
|
error = function(){};
|
|
}
|
|
|
|
if (reference === null) {
|
|
error("Null reference isn't supported");
|
|
return;
|
|
}
|
|
this.storageHandlerDelegate(success, error, "NativeStorage", "getInt", [reference]);
|
|
};
|
|
|
|
|
|
/* float storage */
|
|
StorageHandle.prototype.putDouble = function(reference, aFloat, success, error) {
|
|
|
|
//if error is null then replace with empty function to silence warnings
|
|
if(!error){
|
|
error = function(){};
|
|
}
|
|
|
|
if (reference === null) {
|
|
error("Null reference isn't supported");
|
|
return;
|
|
}
|
|
this.storageHandlerDelegate(success, error, "NativeStorage", "putDouble", [reference, aFloat]);
|
|
};
|
|
|
|
StorageHandle.prototype.getDouble = function(reference, success, error) {
|
|
|
|
//if error is null then replace with empty function to silence warnings
|
|
if(!error){
|
|
error = function(){};
|
|
}
|
|
|
|
if (reference === null) {
|
|
error("Null reference isn't supported");
|
|
return;
|
|
}
|
|
this.storageHandlerDelegate(function(data) {
|
|
if (isNaN(data)) {
|
|
error('Expected double but got non-number');
|
|
} else {
|
|
success(parseFloat(data));
|
|
}
|
|
}, error, "NativeStorage", "getDouble", [reference]);
|
|
};
|
|
|
|
/* string storage */
|
|
StorageHandle.prototype.putString = function(reference, s, success, error) {
|
|
|
|
//if error is null then replace with empty function to silence warnings
|
|
if(!error){
|
|
error = function(){};
|
|
}
|
|
|
|
if (reference === null) {
|
|
error("Null reference isn't supported");
|
|
return;
|
|
}
|
|
this.storageHandlerDelegate(success, error, "NativeStorage", "putString", [reference, s]);
|
|
};
|
|
|
|
StorageHandle.prototype.getString = function(reference, success, error) {
|
|
|
|
//if error is null then replace with empty function to silence warnings
|
|
if(!error){
|
|
error = function(){};
|
|
}
|
|
|
|
if (reference === null) {
|
|
error("Null reference isn't supported");
|
|
return;
|
|
}
|
|
this.storageHandlerDelegate(success, error, "NativeStorage", "getString", [reference]);
|
|
};
|
|
|
|
/* object storage COMPOSITE AND DOESNT CARE FOR BROWSER*/
|
|
StorageHandle.prototype.putObject = function(reference, obj, success, error) {
|
|
|
|
//if error is null then replace with empty function to silence warnings
|
|
if(!error){
|
|
error = function(){};
|
|
}
|
|
|
|
var objAsString = "";
|
|
try {
|
|
objAsString = JSON.stringify(obj);
|
|
} catch (err) {
|
|
error(err);
|
|
}
|
|
this.putString(reference, objAsString, function(data) {
|
|
var obj = {};
|
|
try {
|
|
obj = JSON.parse(data);
|
|
success(obj);
|
|
} catch (err) {
|
|
error(err);
|
|
}
|
|
}, error);
|
|
};
|
|
|
|
StorageHandle.prototype.getObject = function(reference, success, error) {
|
|
|
|
//if error is null then replace with empty function to silence warnings
|
|
if(!error){
|
|
error = function(){};
|
|
}
|
|
|
|
this.getString(reference, function(data) {
|
|
var obj = {};
|
|
try {
|
|
obj = JSON.parse(data);
|
|
success(obj);
|
|
} catch (err) {
|
|
error(err);
|
|
}
|
|
}, error);
|
|
};
|
|
|
|
/* API >= 2 */
|
|
StorageHandle.prototype.setItem = function(reference, obj, success, error) {
|
|
|
|
//if error is null then replace with empty function to silence warnings
|
|
if(!error){
|
|
error = function(){};
|
|
}
|
|
|
|
var objAsString = "";
|
|
try {
|
|
objAsString = JSON.stringify(obj);
|
|
} catch (err) {
|
|
error(new NativeStorageError(NativeStorageError.JSON_ERROR, "JS", err));
|
|
return;
|
|
}
|
|
if (reference === null) {
|
|
error(new NativeStorageError(NativeStorageError.NULL_REFERENCE, "JS", ""));
|
|
return;
|
|
}
|
|
this.storageHandlerDelegate(function(data) {
|
|
try {
|
|
obj = JSON.parse(data);
|
|
success(obj);
|
|
} catch (err) {
|
|
error(new NativeStorageError(NativeStorageError.JSON_ERROR, "JS", err));
|
|
}
|
|
}, function(code) {
|
|
error(new NativeStorageError(code, "Native", ""));
|
|
}, "NativeStorage", "setItem", [reference, objAsString]);
|
|
};
|
|
|
|
StorageHandle.prototype.getItem = function(reference, success, error) {
|
|
|
|
//if error is null then replace with empty function to silence warnings
|
|
if(!error){
|
|
error = function(){};
|
|
}
|
|
|
|
if (reference === null) {
|
|
error(new NativeStorageError(NativeStorageError.NULL_REFERENCE, "JS", ""));
|
|
return;
|
|
}
|
|
var obj = {};
|
|
|
|
this.storageHandlerDelegate(
|
|
function(data) {
|
|
try {
|
|
obj = JSON.parse(data);
|
|
success(obj);
|
|
} catch (err) {
|
|
error(new NativeStorageError(NativeStorageError.JSON_ERROR, "JS", err));
|
|
}
|
|
},
|
|
function(code) {
|
|
error(new NativeStorageError(code, "Native", ""));
|
|
}, "NativeStorage", "getItem", [reference]);
|
|
};
|
|
|
|
/* API >= 2 */
|
|
StorageHandle.prototype.setSecretItem = function(reference, obj, encryptConfig, success, error) {
|
|
|
|
//if error is null then replace with empty function to silence warnings
|
|
if(!error){
|
|
error = function(){};
|
|
}
|
|
|
|
var objAsString = "";
|
|
try {
|
|
objAsString = JSON.stringify(obj);
|
|
} catch (err) {
|
|
error(new NativeStorageError(NativeStorageError.JSON_ERROR, "JS", err));
|
|
return;
|
|
}
|
|
if (reference === null) {
|
|
error(new NativeStorageError(NativeStorageError.NULL_REFERENCE, "JS", ""));
|
|
return;
|
|
}
|
|
|
|
var action = "setItem";
|
|
var params = [reference, objAsString];
|
|
switch (encryptConfig.mode) {
|
|
case "password":
|
|
action = "setItemWithPassword";
|
|
params = [reference, objAsString, encryptConfig.value];
|
|
break;
|
|
case "key":
|
|
action = "setItemWithKey";
|
|
break;
|
|
case "none":
|
|
break;
|
|
default: {
|
|
error(new NativeStorageError(NativeStorageError.WRONG_PARAMETER, "JS", ""));
|
|
return;
|
|
}
|
|
}
|
|
this.storageHandlerDelegate(function(data) {
|
|
try {
|
|
obj = JSON.parse(data);
|
|
success(obj);
|
|
} catch (err) {
|
|
error(new NativeStorageError(NativeStorageError.JSON_ERROR, "JS", err));
|
|
}
|
|
}, function(code) {
|
|
error(new NativeStorageError(code, "Native", ""));
|
|
}, "NativeStorage", action, params);
|
|
};
|
|
|
|
StorageHandle.prototype.getSecretItem = function(reference, encryptConfig, success, error) {
|
|
|
|
//if error is null then replace with empty function to silence warnings
|
|
if(!error){
|
|
error = function(){};
|
|
}
|
|
|
|
if (reference === null) {
|
|
error(new NativeStorageError(NativeStorageError.NULL_REFERENCE, "JS", ""));
|
|
return;
|
|
}
|
|
var obj = {};
|
|
|
|
var action = "getItem";
|
|
var params = [reference];
|
|
switch (encryptConfig.mode) {
|
|
case "password":
|
|
action = "getItemWithPassword";
|
|
params = [reference, encryptConfig.value];
|
|
break;
|
|
case "key":
|
|
action = "getItemWithKey";
|
|
break;
|
|
case "none":
|
|
break;
|
|
default: {
|
|
error(new NativeStorageError(NativeStorageError.WRONG_PARAMETER, "JS", ""));
|
|
return;
|
|
}
|
|
}
|
|
|
|
this.storageHandlerDelegate(
|
|
function(data) {
|
|
try {
|
|
obj = JSON.parse(data);
|
|
success(obj);
|
|
} catch (err) {
|
|
error(new NativeStorageError(NativeStorageError.JSON_ERROR, "JS", err));
|
|
}
|
|
},
|
|
function(code) {
|
|
error(new NativeStorageError(code, "Native", ""));
|
|
}, "NativeStorage", action, params);
|
|
};
|
|
|
|
/* list keys */
|
|
StorageHandle.prototype.keys = function(success, error) {
|
|
|
|
//if error is null then replace with empty function to silence warnings
|
|
if(!error){
|
|
error = function(){};
|
|
}
|
|
|
|
this.storageHandlerDelegate(success, error, "NativeStorage", "keys", []);
|
|
};
|
|
|
|
|
|
var storageHandle = new StorageHandle();
|
|
module.exports = storageHandle;
|
|
|
|
});
|