diff --git a/CMakeLists.txt b/CMakeLists.txt index 0eac68f..f06d3ed 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -60,6 +60,7 @@ set(SRCS src/vpn/nm-l2tp-service.h src/vpn/nm-openvpn-service.h src/vpn/nm-pptp-service.h + src/networkproxy.cpp # src/update/updatemodel.cpp ) diff --git a/src/application.cpp b/src/application.cpp index a9d9c5a..f6d546d 100644 --- a/src/application.cpp +++ b/src/application.cpp @@ -18,6 +18,7 @@ #include "password.h" #include "powermanager.h" #include "touchpad.h" +#include "networkproxy.h" #include "cursor/cursorthememodel.h" #include "cursor/mouse.h" @@ -80,6 +81,7 @@ Application::Application(int &argc, char **argv) qmlRegisterType(uri, 1, 0, "TimeZoneMap"); qmlRegisterType(uri, 1, 0, "Touchpad"); qmlRegisterType(uri, 1, 0, "BluetoothManager"); + qmlRegisterType(uri, 1, 0, "NetworkProxy"); qmlRegisterSingletonType(uri, 1, 0, "Password", passwordSingleton); diff --git a/src/images/sidebar/dark/proxy.svg b/src/images/sidebar/dark/proxy.svg old mode 100755 new mode 100644 index 34a5fa3..dfc9ae6 --- a/src/images/sidebar/dark/proxy.svg +++ b/src/images/sidebar/dark/proxy.svg @@ -1,5 +1,5 @@ - + @@ -9,6 +9,10 @@ - - + + + + diff --git a/src/networkproxy.cpp b/src/networkproxy.cpp new file mode 100644 index 0000000..19ff352 --- /dev/null +++ b/src/networkproxy.cpp @@ -0,0 +1,142 @@ +#include "networkproxy.h" + +NetworkProxy::NetworkProxy(QObject *parent) + : QObject(parent) + , m_settings("cutefishos", "network") +{ + m_flag = m_settings.value("ProxyFlag", 0).toInt(); + m_useSameProxy = m_settings.value("UseSameProxy", false).toBool(); + m_scriptProxy = m_settings.value("ProxyScriptProxy", "").toString(); + m_httpProxy = m_settings.value("HttpProxy", "").toString(); + m_ftpProxy = m_settings.value("FtpProxy", "").toString(); + m_socksProxy = m_settings.value("SocksProxy", "").toString(); + m_httpProxyPort = m_settings.value("HttpProxyPort", "").toString(); + m_ftpProxyPort = m_settings.value("FtpProxyPort", "").toString(); + m_socksProxyPort = m_settings.value("SocksProxyPort", "").toString(); +} + +int NetworkProxy::flag() const +{ + return m_flag; +} + +void NetworkProxy::setFlag(int flag) +{ + if (m_flag != flag) { + m_flag = flag; + m_settings.setValue("ProxyFlag", flag); + emit flagChanged(); + } +} + +bool NetworkProxy::useSameProxy() const +{ + return m_useSameProxy; +} + +void NetworkProxy::setUseSameProxy(bool enabled) +{ + if (m_useSameProxy != enabled) { + m_useSameProxy = enabled; + m_settings.setValue("UseSameProxy", enabled); + emit useSameProxyChanged(); + } +} + +QString NetworkProxy::scriptProxy() const +{ + return m_scriptProxy; +} + +void NetworkProxy::setScriptProxy(const QString &path) +{ + if (m_scriptProxy != path) { + m_scriptProxy = path; + m_settings.setValue("ProxyScriptProxy", path); + emit scriptProxyChanged(); + } +} + +QString NetworkProxy::httpProxy() const +{ + return m_httpProxy; +} + +void NetworkProxy::setHttpProxy(const QString &path) +{ + if (m_httpProxy != path) { + m_httpProxy = path; + m_settings.setValue("HttpProxy", path); + emit httpProxyChanged(); + } +} + +QString NetworkProxy::ftpProxy() const +{ + return m_ftpProxy; +} + +void NetworkProxy::setFtpProxy(const QString &path) +{ + if (m_ftpProxy != path) { + m_ftpProxy = path; + m_settings.setValue("FtpProxy", path); + emit ftpProxyChanged(); + } +} + +QString NetworkProxy::socksProxy() const +{ + return m_socksProxy; +} + +void NetworkProxy::setSocksProxy(const QString &path) +{ + if (m_socksProxy != path) { + m_socksProxy = path; + m_settings.setValue("SocksProxy", path); + emit socksProxyChanged(); + } +} + +QString NetworkProxy::httpProxyPort() const +{ + return m_httpProxyPort; +} + +void NetworkProxy::setHttpProxyPort(const QString &port) +{ + if (m_httpProxyPort != port) { + m_httpProxyPort = port; + m_settings.setValue("HttpProxyPort", port); + emit httpProxyPortChanged(); + } +} + +QString NetworkProxy::ftpProxyPort() const +{ + return m_ftpProxyPort; +} + +void NetworkProxy::setFtpProxyPort(const QString &port) +{ + if (m_ftpProxyPort != port) { + m_ftpProxyPort = port; + m_settings.setValue("FtpProxyPort", port); + emit ftpProxyPortChanged(); + } +} + +QString NetworkProxy::socksProxyPort() const +{ + return m_socksProxyPort; +} + +void NetworkProxy::setSocksProxyPort(const QString &port) +{ + if (m_socksProxyPort != port) { + m_socksProxyPort = port; + m_settings.setValue("SocksProxyPort", port); + emit socksProxyPortChanged(); + } +} diff --git a/src/networkproxy.h b/src/networkproxy.h new file mode 100644 index 0000000..fe32e2d --- /dev/null +++ b/src/networkproxy.h @@ -0,0 +1,76 @@ +#ifndef NETWORKPROXY_H +#define NETWORKPROXY_H + +#include +#include + +class NetworkProxy : public QObject +{ + Q_OBJECT + Q_PROPERTY(int flag READ flag WRITE setFlag NOTIFY flagChanged) + Q_PROPERTY(bool useSameProxy READ useSameProxy WRITE setUseSameProxy NOTIFY useSameProxyChanged) + Q_PROPERTY(QString scriptProxy READ scriptProxy WRITE setScriptProxy NOTIFY scriptProxyChanged) + Q_PROPERTY(QString httpProxy READ httpProxy WRITE setHttpProxy NOTIFY httpProxyChanged) + Q_PROPERTY(QString ftpProxy READ ftpProxy WRITE setFtpProxy NOTIFY ftpProxyChanged) + Q_PROPERTY(QString socksProxy READ socksProxy WRITE setSocksProxy NOTIFY socksProxyChanged) + Q_PROPERTY(QString httpProxyPort READ httpProxyPort WRITE setHttpProxyPort NOTIFY httpProxyPortChanged) + Q_PROPERTY(QString ftpProxyPort READ ftpProxyPort WRITE setFtpProxyPort NOTIFY ftpProxyPortChanged) + Q_PROPERTY(QString socksProxyPort READ socksProxyPort WRITE setSocksProxyPort NOTIFY socksProxyPortChanged) + +public: + explicit NetworkProxy(QObject *parent = nullptr); + + int flag() const; + void setFlag(int flag); + + bool useSameProxy() const; + void setUseSameProxy(bool enabled); + + QString scriptProxy() const; + void setScriptProxy(const QString &path); + + QString httpProxy() const; + void setHttpProxy(const QString &path); + + QString ftpProxy() const; + void setFtpProxy(const QString &path); + + QString socksProxy() const; + void setSocksProxy(const QString &path); + + QString httpProxyPort() const; + void setHttpProxyPort(const QString &port); + + QString ftpProxyPort() const; + void setFtpProxyPort(const QString &port); + + QString socksProxyPort() const; + void setSocksProxyPort(const QString &port); + +signals: + void flagChanged(); + void useSameProxyChanged(); + void scriptProxyChanged(); + void httpProxyChanged(); + void ftpProxyChanged(); + void socksProxyChanged(); + void httpProxyPortChanged(); + void ftpProxyPortChanged(); + void socksProxyPortChanged(); + +private: + QSettings m_settings; + int m_flag; + bool m_useSameProxy; + + QString m_scriptProxy; + QString m_httpProxy; + QString m_ftpProxy; + QString m_socksProxy; + + QString m_httpProxyPort; + QString m_ftpProxyPort; + QString m_socksProxyPort; +}; + +#endif // NETWORKPROXY_H diff --git a/src/qml/Proxy/Main.qml b/src/qml/Proxy/Main.qml index a770612..090847c 100644 --- a/src/qml/Proxy/Main.qml +++ b/src/qml/Proxy/Main.qml @@ -35,7 +35,11 @@ ItemPage { property: "text" value: httpProxyField.text when: forFtpCheckBox.checked - restoreMode: Binding.RestoreNone + restoreMode: Binding.RestoreValue + } + + NetworkProxy { + id: networkProxy } Binding { @@ -61,23 +65,38 @@ ItemPage { RadioButton { id: noProxyRadioButton - checked: true + checked: networkProxy.flag === 0 text: qsTr("No Proxy") + onClicked: { + networkProxy.flag = 0 + } } RadioButton { id: autoDiscoverProxyRadioButton + checked: networkProxy.flag === 1 text: qsTr("Detect proxy configuration automatically") + onClicked: { + networkProxy.flag = 1 + } } RadioButton { id: autoScriptProxyRadioButton + checked: networkProxy.flag === 2 text: qsTr("Use proxy auto configuration URL") + onClicked: { + networkProxy.flag = 2 + } } RadioButton { id: manualProxyRadioButton + checked: networkProxy.flag === 3 text: qsTr("Use manually specified proxy configuration") + onClicked: { + networkProxy.flag = 3 + } } } @@ -93,7 +112,12 @@ ItemPage { TextField { id: autoScriptField Layout.fillWidth: true + text: networkProxy.scriptProxy height: 40 + + onEditingFinished: { + networkProxy.scriptProxy = autoScriptField.text + } } Button { @@ -118,6 +142,11 @@ ItemPage { id: httpProxyField Layout.fillWidth: true height: 40 + text: networkProxy.httpProxy + + onEditingFinished: { + networkProxy.httpProxy = httpProxyField.text + } } Label { @@ -128,6 +157,12 @@ ItemPage { id: httpProxyPortField height: 40 Layout.preferredWidth: 80 + + text: networkProxy.httpProxyPort + + onEditingFinished: { + networkProxy.httpProxyPort = httpProxyPortField.text + } } Item { @@ -138,7 +173,8 @@ ItemPage { id: forFtpCheckBox text: qsTr("Also use this proxy for FTP") Layout.fillWidth: true - checked: true + checked: networkProxy.useSameProxy + onClicked: networkProxy.useSameProxy = forFtpCheckBox.checked } Item { @@ -159,6 +195,12 @@ ItemPage { Layout.fillWidth: true height: 40 enabled: !forFtpCheckBox.checked + + text: networkProxy.ftpProxy + + onEditingFinished: { + networkProxy.ftpProxy = ftpProxyTextField.text + } } Label { @@ -170,6 +212,12 @@ ItemPage { height: 40 Layout.preferredWidth: 80 enabled: !forFtpCheckBox.checked + + text: networkProxy.ftpProxyPort + + onEditingFinished: { + networkProxy.ftpProxyPort = ftpProxyPortField.text + } } // SOCKS @@ -178,8 +226,15 @@ ItemPage { } TextField { + id: socksProxyField Layout.fillWidth: true height: 40 + + text: networkProxy.socksProxy + + onEditingFinished: { + networkProxy.socksProxy = socksProxyField.text + } } Label { @@ -187,8 +242,15 @@ ItemPage { } TextField { + id: socksProxyPortField height: 40 Layout.preferredWidth: 80 + + text: networkProxy.socksProxyPort + + onEditingFinished: { + networkProxy.socksProxyPort = socksProxyPortField.text + } } } } @@ -203,6 +265,7 @@ ItemPage { id: fileDialog onAccepted: { autoScriptField.text = fileDialog.fileUrl.toString().replace("file://", "") + networkProxy.scriptProxy = autoScriptField.text } } }