import {ipcRenderer} from "electron";
import * as ConfigUtil from "../../../../common/config-util";
import {html} from "../../../../common/html";
import * as t from "../../../../common/translation-util";
import {generateSettingOption} from "./base-section";
interface NetworkSectionProps {
$root: Element;
}
export function initNetworkSection(props: NetworkSectionProps): void {
props.$root.innerHTML = html`
${t.__("Proxy")}
${t.__("Use system proxy settings (requires restart)")}
${t.__("Manual proxy configuration")}
`.html;
const $proxyPAC: HTMLInputElement = document.querySelector(
"#proxy-pac-option .setting-input-value",
)!;
const $proxyRules: HTMLInputElement = document.querySelector(
"#proxy-rules-option .setting-input-value",
)!;
const $proxyBypass: HTMLInputElement = document.querySelector(
"#proxy-bypass-option .setting-input-value",
)!;
const $proxySaveAction = document.querySelector("#proxy-save-action")!;
const $manualProxyBlock = props.$root.querySelector(".manual-proxy-block")!;
toggleManualProxySettings(ConfigUtil.getConfigItem("useManualProxy", false));
updateProxyOption();
$proxyPAC.value = ConfigUtil.getConfigItem("proxyPAC", "");
$proxyRules.value = ConfigUtil.getConfigItem("proxyRules", "");
$proxyBypass.value = ConfigUtil.getConfigItem("proxyBypass", "");
$proxySaveAction.addEventListener("click", () => {
ConfigUtil.setConfigItem("proxyPAC", $proxyPAC.value);
ConfigUtil.setConfigItem("proxyRules", $proxyRules.value);
ConfigUtil.setConfigItem("proxyBypass", $proxyBypass.value);
ipcRenderer.send("forward-message", "reload-proxy", true);
});
function toggleManualProxySettings(option: boolean): void {
if (option) {
$manualProxyBlock.classList.remove("hidden");
} else {
$manualProxyBlock.classList.add("hidden");
}
}
function updateProxyOption(): void {
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);
toggleManualProxySettings(!manualProxyValue);
}
if (!newValue) {
// Remove proxy system proxy settings
ConfigUtil.setConfigItem("proxyRules", "");
ipcRenderer.send("forward-message", "reload-proxy", false);
}
ConfigUtil.setConfigItem("useSystemProxy", newValue);
updateProxyOption();
},
});
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");
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);
updateProxyOption();
},
});
}
}