mirror of
https://github.com/transatoshi-mw/grin-web-wallet.git
synced 2025-10-07 00:02:47 +00:00
contents of zip
This commit is contained in:
403
scripts/settings.js
Executable file
403
scripts/settings.js
Executable file
@@ -0,0 +1,403 @@
|
||||
// Use strict
|
||||
"use strict";
|
||||
|
||||
|
||||
// Classes
|
||||
|
||||
// Settings class
|
||||
class Settings {
|
||||
|
||||
// Public
|
||||
|
||||
// Constructor
|
||||
constructor() {
|
||||
|
||||
// Set default values
|
||||
this.defaultValues = {};
|
||||
|
||||
// Set self
|
||||
var self = this;
|
||||
|
||||
// Create database
|
||||
Database.createDatabase(function(database, currentVersion, databaseTransaction) {
|
||||
|
||||
// Create or get settings object store
|
||||
var settingsObjectStore = (currentVersion === Database.NO_CURRENT_VERSION) ? database.createObjectStore(Settings.OBJECT_STORE_NAME, {
|
||||
|
||||
// Key path
|
||||
"keyPath": [
|
||||
|
||||
// Wallet type
|
||||
Database.toKeyPath(Settings.DATABASE_WALLET_TYPE_NAME),
|
||||
|
||||
// Network type
|
||||
Database.toKeyPath(Settings.DATABASE_NETWORK_TYPE_NAME),
|
||||
|
||||
// Setting
|
||||
Database.toKeyPath(Settings.DATABASE_SETTING_NAME)
|
||||
]
|
||||
|
||||
}) : databaseTransaction.objectStore(Settings.OBJECT_STORE_NAME);
|
||||
|
||||
// Check if no database version exists
|
||||
if(currentVersion === Database.NO_CURRENT_VERSION) {
|
||||
|
||||
// Create index to search settings object store by wallet type and network type
|
||||
settingsObjectStore.createIndex(Settings.DATABASE_WALLET_TYPE_AND_NETWORK_TYPE_NAME, [
|
||||
|
||||
// Wallet Type
|
||||
Database.toKeyPath(Settings.DATABASE_WALLET_TYPE_NAME),
|
||||
|
||||
// Network Type
|
||||
Database.toKeyPath(Settings.DATABASE_NETWORK_TYPE_NAME)
|
||||
], {
|
||||
|
||||
// Unique
|
||||
"unique": false
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// Create value
|
||||
createValue(setting, defaultValue) {
|
||||
|
||||
// Set self
|
||||
var self = this;
|
||||
|
||||
// Return promise
|
||||
return new Promise(function(resolve, reject) {
|
||||
|
||||
// Append settings to default values
|
||||
self.defaultValues[setting] = defaultValue;
|
||||
|
||||
// Resolve
|
||||
resolve();
|
||||
});
|
||||
}
|
||||
|
||||
// Get default value
|
||||
getDefaultValue(setting) {
|
||||
|
||||
// Set self
|
||||
var self = this;
|
||||
|
||||
// Return promise
|
||||
return new Promise(function(resolve, reject) {
|
||||
|
||||
// Check if setting has a default values
|
||||
if(setting in self.defaultValues === true)
|
||||
|
||||
// Resolve default value
|
||||
resolve(self.defaultValues[setting]);
|
||||
|
||||
// Otherwise
|
||||
else
|
||||
|
||||
// Reject error
|
||||
reject(Language.getDefaultTranslation('The setting doesn\'t exist.'));
|
||||
});
|
||||
}
|
||||
|
||||
// Get value
|
||||
getValue(setting) {
|
||||
|
||||
// Set self
|
||||
var self = this;
|
||||
|
||||
// Return promise
|
||||
return new Promise(function(resolve, reject) {
|
||||
|
||||
// Return result from searching for setting in the database
|
||||
return Database.getResult(Settings.OBJECT_STORE_NAME, [
|
||||
|
||||
// Wallet type
|
||||
Consensus.getWalletType(),
|
||||
|
||||
// Network type
|
||||
Consensus.getNetworkType(),
|
||||
|
||||
// Setting
|
||||
setting
|
||||
|
||||
]).then(function(result) {
|
||||
|
||||
// Check if result was found
|
||||
if(result !== Database.RESULT_NOT_FOUND)
|
||||
|
||||
// Resolve value
|
||||
resolve(result[Database.toKeyPath(Settings.DATABASE_VALUE_NAME)]);
|
||||
|
||||
// Otherwise check if setting has a default values
|
||||
else if(setting in self.defaultValues === true)
|
||||
|
||||
// Resolve default value
|
||||
resolve(self.defaultValues[setting]);
|
||||
|
||||
// Otherwise
|
||||
else
|
||||
|
||||
// Reject error
|
||||
reject(Language.getDefaultTranslation('The setting doesn\'t exist.'));
|
||||
|
||||
// Catch error
|
||||
}).catch(function(error) {
|
||||
|
||||
// Reject error
|
||||
reject(Language.getDefaultTranslation('The database failed.'));
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
// Set value
|
||||
setValue(setting, value, logMessage = false, sensitive = false) {
|
||||
|
||||
// Set self
|
||||
var self = this;
|
||||
|
||||
// Return promise
|
||||
return new Promise(function(resolve, reject) {
|
||||
|
||||
// Return saving setting in the database
|
||||
return Database.saveResults(Settings.OBJECT_STORE_NAME, [{
|
||||
|
||||
// Wallet Type
|
||||
[Database.toKeyPath(Settings.DATABASE_WALLET_TYPE_NAME)]: Consensus.getWalletType(),
|
||||
|
||||
// Network type
|
||||
[Database.toKeyPath(Settings.DATABASE_NETWORK_TYPE_NAME)]: Consensus.getNetworkType(),
|
||||
|
||||
// Setting
|
||||
[Database.toKeyPath(Settings.DATABASE_SETTING_NAME)]: setting,
|
||||
|
||||
// Value
|
||||
[Database.toKeyPath(Settings.DATABASE_VALUE_NAME)]: value
|
||||
|
||||
}], [], Database.CREATE_NEW_TRANSACTION, Database.RELAXED_DURABILITY).then(function() {
|
||||
|
||||
// Check if logging message
|
||||
if(logMessage === true) {
|
||||
|
||||
// Check if sensitive
|
||||
if(sensitive === true) {
|
||||
|
||||
// Log message
|
||||
Log.logMessage(Language.getDefaultTranslation('Changed %1$y setting.'), [
|
||||
|
||||
// Setting
|
||||
setting
|
||||
]);
|
||||
}
|
||||
|
||||
// Otherwise
|
||||
else {
|
||||
|
||||
// Log message
|
||||
Log.logMessage(Language.getDefaultTranslation('Changed %1$y setting to %2$y.'), [
|
||||
|
||||
// Setting
|
||||
setting,
|
||||
|
||||
// Value
|
||||
value
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
// Trigger change event
|
||||
$(self).trigger(Settings.CHANGE_EVENT, {
|
||||
|
||||
// Setting
|
||||
[Settings.DATABASE_SETTING_NAME]: setting,
|
||||
|
||||
// Value
|
||||
[Settings.DATABASE_VALUE_NAME]: value
|
||||
});
|
||||
|
||||
// Resolve
|
||||
resolve();
|
||||
|
||||
// Catch errors
|
||||
}).catch(function(error) {
|
||||
|
||||
// Reject error
|
||||
reject(Language.getDefaultTranslation('The database failed.'));
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
// Delete values
|
||||
deleteValues(triggerChangeEvents = true) {
|
||||
|
||||
// Set self
|
||||
var self = this;
|
||||
|
||||
// Return promise
|
||||
return new Promise(function(resolve, reject) {
|
||||
|
||||
// Initialize get values
|
||||
var getValues = [];
|
||||
|
||||
// Check if triggering change events
|
||||
if(triggerChangeEvents === true) {
|
||||
|
||||
// Initialize settings
|
||||
var settings = [];
|
||||
|
||||
// Initialize default values
|
||||
var defaultValues = [];
|
||||
|
||||
// Go through all settings
|
||||
for(let setting in self.defaultValues) {
|
||||
|
||||
if(self.defaultValues.hasOwnProperty(setting) === true) {
|
||||
|
||||
// Append setting to list
|
||||
settings.push(setting);
|
||||
|
||||
// Append default value to list
|
||||
defaultValues.push(self.defaultValues[setting]);
|
||||
|
||||
// Append getting setting's value to list
|
||||
getValues.push(new Promise(function(resolve, reject) {
|
||||
|
||||
// Return getting setting's value
|
||||
return self.getValue(setting).then(function(value) {
|
||||
|
||||
// Resolve value
|
||||
resolve(value);
|
||||
|
||||
// Catch errors
|
||||
}).catch(function(error) {
|
||||
|
||||
// Reject error
|
||||
reject(error);
|
||||
});
|
||||
}));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Return getting all setting's values
|
||||
return Promise.all(getValues).then(function(values) {
|
||||
|
||||
// Return deleting settings with the wallet type and network type in the database
|
||||
return Database.deleteResultsWithValue(Settings.OBJECT_STORE_NAME, Settings.DATABASE_WALLET_TYPE_AND_NETWORK_TYPE_NAME, IDBKeyRange.only([
|
||||
|
||||
// Wallet type
|
||||
Consensus.getWalletType(),
|
||||
|
||||
// Network type
|
||||
Consensus.getNetworkType()
|
||||
|
||||
]), Database.CREATE_NEW_TRANSACTION, Database.STRICT_DURABILITY).then(function() {
|
||||
|
||||
// Log message
|
||||
Log.logMessage(Language.getDefaultTranslation('Reset settings.'));
|
||||
|
||||
// Check if triggering change events
|
||||
if(triggerChangeEvents === true) {
|
||||
|
||||
// Go through all settings
|
||||
for(var i = 0; i < settings["length"]; ++i) {
|
||||
|
||||
// Get setting
|
||||
var setting = settings[i];
|
||||
|
||||
// Get default value
|
||||
var defaultValue = defaultValues[i];
|
||||
|
||||
// Get value
|
||||
var value = values[i];
|
||||
|
||||
// Check if setting's value changed
|
||||
if(value !== defaultValue) {
|
||||
|
||||
// Trigger change event
|
||||
$(self).trigger(Settings.CHANGE_EVENT, {
|
||||
|
||||
// Setting
|
||||
[Settings.DATABASE_SETTING_NAME]: setting,
|
||||
|
||||
// Value
|
||||
[Settings.DATABASE_VALUE_NAME]: defaultValue
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Resolve
|
||||
resolve();
|
||||
|
||||
// Catch errors
|
||||
}).catch(function(error) {
|
||||
|
||||
// Reject error
|
||||
reject(error);
|
||||
});
|
||||
// Catch errors
|
||||
}).catch(function(error) {
|
||||
|
||||
// Reject error
|
||||
reject(error);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
// Change event
|
||||
static get CHANGE_EVENT() {
|
||||
|
||||
// Return changed event
|
||||
return "SettingsChangeEvent";
|
||||
}
|
||||
|
||||
// Private
|
||||
|
||||
// Object store name
|
||||
static get OBJECT_STORE_NAME() {
|
||||
|
||||
// Return object store name
|
||||
return "Settings";
|
||||
}
|
||||
|
||||
// Database wallet type name
|
||||
static get DATABASE_WALLET_TYPE_NAME() {
|
||||
|
||||
// Return database wallet type name
|
||||
return "Wallet Type";
|
||||
}
|
||||
|
||||
// Database network type name
|
||||
static get DATABASE_NETWORK_TYPE_NAME() {
|
||||
|
||||
// Return database network type name
|
||||
return "Network Type";
|
||||
}
|
||||
|
||||
// Database setting name
|
||||
static get DATABASE_SETTING_NAME() {
|
||||
|
||||
// Return database setting name
|
||||
return "Setting";
|
||||
}
|
||||
|
||||
// Database value name
|
||||
static get DATABASE_VALUE_NAME() {
|
||||
|
||||
// Return database value name
|
||||
return "Value";
|
||||
}
|
||||
|
||||
// Database wallet type and network type name
|
||||
static get DATABASE_WALLET_TYPE_AND_NETWORK_TYPE_NAME() {
|
||||
|
||||
// Return database wallet type and network type name
|
||||
return "Wallet Type And Network Type";
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Main function
|
||||
|
||||
// Set global object's settings
|
||||
globalThis["Settings"] = Settings;
|
Reference in New Issue
Block a user