'use strict'; const {ipcRenderer} = require('electron'); const BaseSection = require(__dirname + '/base-section.js'); const ConfigUtil = require(__dirname + '/../../utils/config-util.js'); class NetworkSection extends BaseSection { constructor(props) { super(); this.props = props; } template() { return `
Proxy
Use system proxy settings (requires restart)
Manual proxy configuration
PAC script
Proxy rules
Proxy bypass rules
Save
`; } init() { this.props.$root.innerHTML = this.template(); this.$proxyPAC = document.querySelector('#proxy-pac-option .setting-input-value'); this.$proxyRules = document.querySelector('#proxy-rules-option .setting-input-value'); this.$proxyBypass = document.querySelector('#proxy-bypass-option .setting-input-value'); this.$proxySaveAction = document.getElementById('proxy-save-action'); this.$manualProxyBlock = this.props.$root.querySelector('.manual-proxy-block'); this.initProxyOption(); this.$proxyPAC.value = ConfigUtil.getConfigItem('proxyPAC', ''); this.$proxyRules.value = ConfigUtil.getConfigItem('proxyRules', ''); this.$proxyBypass.value = ConfigUtil.getConfigItem('proxyBypass', ''); this.$proxySaveAction.addEventListener('click', () => { ConfigUtil.setConfigItem('proxyPAC', this.$proxyPAC.value); ConfigUtil.setConfigItem('proxyRules', this.$proxyRules.value); ConfigUtil.setConfigItem('proxyBypass', this.$proxyBypass.value); ipcRenderer.send('forward-message', 'reload-proxy', true); }); } initProxyOption() { const manualProxyEnabled = ConfigUtil.getConfigItem('useManualProxy', false); this.toggleManualProxySettings(manualProxyEnabled); this.updateProxyOption(); } toggleManualProxySettings(option) { if (option) { this.$manualProxyBlock.classList.remove('hidden'); } else { this.$manualProxyBlock.classList.add('hidden'); } } updateProxyOption() { this.generateSettingOption({ $element: document.querySelector('#use-system-settings .setting-control'), value: ConfigUtil.getConfigItem('useSystemProxy', false), clickHandler: () => { const newValue = !ConfigUtil.getConfigItem('useSystemProxy'); const manualProxyValue = ConfigUtil.getConfigItem('useManualProxy'); if (manualProxyValue && newValue) { ConfigUtil.setConfigItem('useManualProxy', !manualProxyValue); this.toggleManualProxySettings(!manualProxyValue); } if (newValue === false) { // Remove proxy system proxy settings ConfigUtil.setConfigItem('proxyRules', ''); ipcRenderer.send('forward-message', 'reload-proxy', false); } ConfigUtil.setConfigItem('useSystemProxy', newValue); this.updateProxyOption(); } }); this.generateSettingOption({ $element: document.querySelector('#use-manual-settings .setting-control'), value: ConfigUtil.getConfigItem('useManualProxy', false), clickHandler: () => { const newValue = !ConfigUtil.getConfigItem('useManualProxy'); const systemProxyValue = ConfigUtil.getConfigItem('useSystemProxy'); this.toggleManualProxySettings(newValue); if (systemProxyValue && newValue) { ConfigUtil.setConfigItem('useSystemProxy', !systemProxyValue); } ConfigUtil.setConfigItem('proxyRules', ''); ConfigUtil.setConfigItem('useManualProxy', newValue); // Reload app only when turning manual proxy off, hence !newValue ipcRenderer.send('forward-message', 'reload-proxy', !newValue); this.updateProxyOption(); } }); } } module.exports = NetworkSection;