From e1e83fbfdd741c96f8b5034081c1d3008f370a42 Mon Sep 17 00:00:00 2001 From: reionwong Date: Thu, 18 Nov 2021 22:22:56 +0800 Subject: [PATCH] Finished proxy --- src/networkproxy.cpp | 26 ++++++++++++++++++++++++++ src/networkproxy.h | 3 +++ src/qml/Proxy/Main.qml | 38 +++++++++++++++++++++----------------- translations/en_US.ts | 23 +++++++++-------------- translations/zh_CN.ts | 23 +++++++++-------------- 5 files changed, 68 insertions(+), 45 deletions(-) diff --git a/src/networkproxy.cpp b/src/networkproxy.cpp index 19ff352..95f8c57 100644 --- a/src/networkproxy.cpp +++ b/src/networkproxy.cpp @@ -1,4 +1,7 @@ #include "networkproxy.h" +#include +#include +#include NetworkProxy::NetworkProxy(QObject *parent) : QObject(parent) @@ -25,6 +28,7 @@ void NetworkProxy::setFlag(int flag) if (m_flag != flag) { m_flag = flag; m_settings.setValue("ProxyFlag", flag); + delayUpdateProxy(); emit flagChanged(); } } @@ -39,6 +43,7 @@ void NetworkProxy::setUseSameProxy(bool enabled) if (m_useSameProxy != enabled) { m_useSameProxy = enabled; m_settings.setValue("UseSameProxy", enabled); + delayUpdateProxy(); emit useSameProxyChanged(); } } @@ -53,6 +58,7 @@ void NetworkProxy::setScriptProxy(const QString &path) if (m_scriptProxy != path) { m_scriptProxy = path; m_settings.setValue("ProxyScriptProxy", path); + delayUpdateProxy(); emit scriptProxyChanged(); } } @@ -67,6 +73,7 @@ void NetworkProxy::setHttpProxy(const QString &path) if (m_httpProxy != path) { m_httpProxy = path; m_settings.setValue("HttpProxy", path); + delayUpdateProxy(); emit httpProxyChanged(); } } @@ -81,6 +88,7 @@ void NetworkProxy::setFtpProxy(const QString &path) if (m_ftpProxy != path) { m_ftpProxy = path; m_settings.setValue("FtpProxy", path); + delayUpdateProxy(); emit ftpProxyChanged(); } } @@ -95,6 +103,7 @@ void NetworkProxy::setSocksProxy(const QString &path) if (m_socksProxy != path) { m_socksProxy = path; m_settings.setValue("SocksProxy", path); + delayUpdateProxy(); emit socksProxyChanged(); } } @@ -109,6 +118,7 @@ void NetworkProxy::setHttpProxyPort(const QString &port) if (m_httpProxyPort != port) { m_httpProxyPort = port; m_settings.setValue("HttpProxyPort", port); + delayUpdateProxy(); emit httpProxyPortChanged(); } } @@ -123,6 +133,7 @@ void NetworkProxy::setFtpProxyPort(const QString &port) if (m_ftpProxyPort != port) { m_ftpProxyPort = port; m_settings.setValue("FtpProxyPort", port); + delayUpdateProxy(); emit ftpProxyPortChanged(); } } @@ -137,6 +148,21 @@ void NetworkProxy::setSocksProxyPort(const QString &port) if (m_socksProxyPort != port) { m_socksProxyPort = port; m_settings.setValue("SocksProxyPort", port); + delayUpdateProxy(); emit socksProxyPortChanged(); } } + +void NetworkProxy::updateProxy() +{ + QDBusInterface iface("com.cutefish.Session", "/Session", "com.cutefish.Session"); + + if (iface.isValid()) { + iface.asyncCall("updateNetworkProxy"); + } +} + +void NetworkProxy::delayUpdateProxy() +{ + QTimer::singleShot(50, this, &NetworkProxy::updateProxy); +} diff --git a/src/networkproxy.h b/src/networkproxy.h index fe32e2d..99f98a1 100644 --- a/src/networkproxy.h +++ b/src/networkproxy.h @@ -47,6 +47,9 @@ public: QString socksProxyPort() const; void setSocksProxyPort(const QString &port); + Q_INVOKABLE void updateProxy(); + Q_INVOKABLE void delayUpdateProxy(); + signals: void flagChanged(); void useSameProxyChanged(); diff --git a/src/qml/Proxy/Main.qml b/src/qml/Proxy/Main.qml index 090847c..bd0ac5a 100644 --- a/src/qml/Proxy/Main.qml +++ b/src/qml/Proxy/Main.qml @@ -72,37 +72,28 @@ ItemPage { } } - RadioButton { - id: autoDiscoverProxyRadioButton - checked: networkProxy.flag === 1 - text: qsTr("Detect proxy configuration automatically") - onClicked: { - networkProxy.flag = 1 - } - } - RadioButton { id: autoScriptProxyRadioButton - checked: networkProxy.flag === 2 + checked: networkProxy.flag === 1 text: qsTr("Use proxy auto configuration URL") onClicked: { - networkProxy.flag = 2 + networkProxy.flag = 1 } } RadioButton { id: manualProxyRadioButton - checked: networkProxy.flag === 3 + checked: networkProxy.flag === 2 text: qsTr("Use manually specified proxy configuration") onClicked: { - networkProxy.flag = 3 + networkProxy.flag = 2 } } } RoundedItem { id: proxyItem - visible: !noProxyRadioButton.checked && !autoDiscoverProxyRadioButton.checked + visible: !noProxyRadioButton.checked RowLayout { id: autoScriptProxyLayout @@ -143,6 +134,9 @@ ItemPage { Layout.fillWidth: true height: 40 text: networkProxy.httpProxy + validator: RegExpValidator { + regExp: /(?=(\b|\D))(((\d{1,2})|(1\d{1,2})|(2[0-4]\d)|(25[0-5]))\.){3}((\d{1,2})|(1\d{1,2})|(2[0-4]\d)|(25[0-5]))(?=(\b|\D))/ + } onEditingFinished: { networkProxy.httpProxy = httpProxyField.text @@ -160,6 +154,8 @@ ItemPage { text: networkProxy.httpProxyPort + validator: IntValidator { bottom: 0; top: 999999} + onEditingFinished: { networkProxy.httpProxyPort = httpProxyPortField.text } @@ -174,7 +170,9 @@ ItemPage { text: qsTr("Also use this proxy for FTP") Layout.fillWidth: true checked: networkProxy.useSameProxy - onClicked: networkProxy.useSameProxy = forFtpCheckBox.checked + onClicked: { + networkProxy.useSameProxy = forFtpCheckBox.checked + } } Item { @@ -195,9 +193,10 @@ ItemPage { Layout.fillWidth: true height: 40 enabled: !forFtpCheckBox.checked - text: networkProxy.ftpProxy - + validator: RegExpValidator { + regExp: /(?=(\b|\D))(((\d{1,2})|(1\d{1,2})|(2[0-4]\d)|(25[0-5]))\.){3}((\d{1,2})|(1\d{1,2})|(2[0-4]\d)|(25[0-5]))(?=(\b|\D))/ + } onEditingFinished: { networkProxy.ftpProxy = ftpProxyTextField.text } @@ -214,6 +213,7 @@ ItemPage { enabled: !forFtpCheckBox.checked text: networkProxy.ftpProxyPort + validator: IntValidator { bottom: 0; top: 999999} onEditingFinished: { networkProxy.ftpProxyPort = ftpProxyPortField.text @@ -230,6 +230,9 @@ ItemPage { Layout.fillWidth: true height: 40 + validator: RegExpValidator { + regExp: /(?=(\b|\D))(((\d{1,2})|(1\d{1,2})|(2[0-4]\d)|(25[0-5]))\.){3}((\d{1,2})|(1\d{1,2})|(2[0-4]\d)|(25[0-5]))(?=(\b|\D))/ + } text: networkProxy.socksProxy onEditingFinished: { @@ -247,6 +250,7 @@ ItemPage { Layout.preferredWidth: 80 text: networkProxy.socksProxyPort + validator: IntValidator { bottom: 0; top: 999999} onEditingFinished: { networkProxy.socksProxyPort = socksProxyPortField.text diff --git a/translations/en_US.ts b/translations/en_US.ts index 877211c..4166d1a 100644 --- a/translations/en_US.ts +++ b/translations/en_US.ts @@ -704,48 +704,43 @@ - Detect proxy configuration automatically - - - - Use proxy auto configuration URL - + Use manually specified proxy configuration - + Select file - + HTTP Proxy - - - + + + Port - + Also use this proxy for FTP - + FTP Proxy - + SOCKS Proxy diff --git a/translations/zh_CN.ts b/translations/zh_CN.ts index 4b42ead..d3cd3a0 100644 --- a/translations/zh_CN.ts +++ b/translations/zh_CN.ts @@ -704,48 +704,43 @@ - Detect proxy configuration automatically - 自动检测代理配置 - - - Use proxy auto configuration URL 使用代理自动配置 URL - + Use manually specified proxy configuration 使用手动配置的代理服务器 - + Select file 选择文件 - + HTTP Proxy HTTP 代理 - - - + + + Port 端口 - + Also use this proxy for FTP 将此代理用于 FTP - + FTP Proxy FTP 代理 - + SOCKS Proxy SOCKS 代理