2021-12-12 18:51:24 +01:00

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;
});