From cea1ef73af30ef4a5874dec2c7ae7e253047a683 Mon Sep 17 00:00:00 2001 From: John Furrow Date: Wed, 8 Jun 2016 22:32:08 -0700 Subject: [PATCH] Add toggle for DHT --- .../components/modals/SettingsModal.js | 28 ++++++++++----- .../components/settings/ConnectivityTab.js | 34 +++++++++++++++++++ client/source/scripts/stores/SettingsStore.js | 6 +++- server/models/ClientRequest.js | 10 +++--- shared/constants/clientSettingsMap.js | 4 +-- 5 files changed, 67 insertions(+), 15 deletions(-) diff --git a/client/source/scripts/components/modals/SettingsModal.js b/client/source/scripts/components/modals/SettingsModal.js index c0690965..55b6af1a 100644 --- a/client/source/scripts/components/modals/SettingsModal.js +++ b/client/source/scripts/components/modals/SettingsModal.js @@ -10,10 +10,11 @@ import SettingsStore from '../../stores/SettingsStore'; import StorageTab from '../settings/StorageTab'; const METHODS_TO_BIND = [ + 'handleClientSettingsChange', + 'handleCustomsSettingChange', + 'handleFloodSettingsChange', 'handleSaveSettingsClick', 'handleSaveSettingsError', - 'handleClientSettingsChange', - 'handleFloodSettingsChange', 'handleSettingsStoreChange' ]; @@ -80,9 +81,14 @@ export default class SettingsModal extends React.Component { ]; } - handleSaveSettingsClick() { - this.setState({isSavingSettings: true}); + handleCustomsSettingChange(data) { + this.setState({ + changedClientSettings: this.mergeObjects(this.state.changedClientSettings, + {[data.id]: {...data, overrideLocalSetting: true}}) + }); + } + handleSaveSettingsClick() { let floodSettings = Object.keys(this.state.changedFloodSettings).map((settingsKey) => { return { id: settingsKey, @@ -91,12 +97,17 @@ export default class SettingsModal extends React.Component { }); let clientSettings = Object.keys(this.state.changedClientSettings).map((settingsKey) => { - return { - id: settingsKey, - data: this.state.changedClientSettings[settingsKey] - }; + let data = this.state.changedClientSettings[settingsKey]; + + if (data.overrideLocalSetting) { + return data; + } + + return {id: settingsKey, data}; }); + this.setState({isSavingSettings: true}); + SettingsStore.saveFloodSettings(floodSettings, {dismissModal: true, notify: true}); SettingsStore.saveClientSettings(clientSettings, {dismissModal: true, notify: true}); } @@ -161,6 +172,7 @@ export default class SettingsModal extends React.Component { connectivity: { content: ConnectivityTab, props: { + onCustomSettingsChange: this.handleCustomsSettingChange, onClientSettingsChange: this.handleClientSettingsChange, settings: this.state.clientSettings }, diff --git a/client/source/scripts/components/settings/ConnectivityTab.js b/client/source/scripts/components/settings/ConnectivityTab.js index 6ce3d4eb..3972186c 100644 --- a/client/source/scripts/components/settings/ConnectivityTab.js +++ b/client/source/scripts/components/settings/ConnectivityTab.js @@ -4,11 +4,38 @@ import React from 'react'; import Checkbox from '../forms/Checkbox'; import SettingsTab from './SettingsTab'; +const METHODS_TO_BIND = ['handleDHTToggle']; + export default class ConnectivityTab extends SettingsTab { constructor() { super(...arguments); this.state = {}; + + METHODS_TO_BIND.forEach((method) => { + this[method] = this[method].bind(this); + }); + } + + getDHTEnabledValue() { + if (this.state.dhtEnabled != null) { + return this.state.dhtEnabled; + } + + return this.props.settings.dhtStats.dht === 'auto'; + } + + handleDHTToggle() { + let dhtEnabled = !this.getDHTEnabledValue(); + let dhtEnabledString = dhtEnabled ? 'auto' : 'disable'; + + this.setState({dhtEnabled}); + this.props.onCustomSettingsChange({ + id: 'dht', + data: [dhtEnabledString], + overrideID: 'dhtStats', + overrideData: {dht: dhtEnabledString} + }); } render() { @@ -56,6 +83,13 @@ export default class ConnectivityTab extends SettingsTab { onChange={this.handleClientSettingFieldChange.bind(this, 'dhtPort')} value={this.getFieldValue('dhtPort')} /> +
+ + Enabled + +
diff --git a/client/source/scripts/stores/SettingsStore.js b/client/source/scripts/stores/SettingsStore.js index cf21001b..e0daebad 100644 --- a/client/source/scripts/stores/SettingsStore.js +++ b/client/source/scripts/stores/SettingsStore.js @@ -155,7 +155,11 @@ class SettingsStoreClass extends BaseStore { updateLocalSettings(settings, settingsType) { settings.forEach((setting) => { - this[settingsType][setting.id] = setting.data; + if (setting.overrideLocalSetting) { + this[settingsType][setting.overrideID] = setting.overrideData; + } else { + this[settingsType][setting.id] = setting.data; + } }); } } diff --git a/server/models/ClientRequest.js b/server/models/ClientRequest.js index d816a8d3..d7ddf6ec 100644 --- a/server/models/ClientRequest.js +++ b/server/models/ClientRequest.js @@ -126,7 +126,6 @@ class ClientRequest { } addURLsMethodCall(options) { - console.log(options); let path = options.path; let start = options.start; let urls = this.getEnsuredArray(options.urls); @@ -274,12 +273,15 @@ class ClientRequest { } setSettingsMethodCall(options) { - console.log(options); let settings = this.getEnsuredArray(options.settings); settings.forEach((setting) => { - this.requests.push(this.getMethodCall(`${clientSettingsMap[setting.id]}.set`, - ['', setting.data])); + if (setting.overrideLocalSetting) { + this.requests.push(this.getMethodCall(setting.id, setting.data)); + } else { + this.requests.push(this.getMethodCall(`${clientSettingsMap[setting.id]}.set`, + ['', setting.data])); + } }); } diff --git a/shared/constants/clientSettingsMap.js b/shared/constants/clientSettingsMap.js index c71e930f..859af1d8 100644 --- a/shared/constants/clientSettingsMap.js +++ b/shared/constants/clientSettingsMap.js @@ -4,7 +4,7 @@ let objectUtil = require('../util/objectUtil'); const clientSettingsMap = objectUtil.reflect({ dhtPort: 'dht.port', - dhtStatus: 'dht.statistics', + dhtStats: 'dht.statistics', directoryDefault: 'directory.default', maxFileSize: 'system.file.max_size', networkBindAddress: 'network.bind_address', @@ -55,7 +55,7 @@ const clientSettingsMap = objectUtil.reflect({ clientSettingsMap.defaults = [ 'dhtPort', - 'dhtStatus', + 'dhtStats', 'directoryDefault', 'maxFileSize', 'networkBindAddress',