Skip to content

Commit 2097c72

Browse files
ut003640deepin-bot[bot]
authored andcommitted
fix: fix system proxy status change error
when the system proxy hosts changed,must change the button status of dock Log: fix proxy status Influence: dock proxy status PMS: BUG-313855
1 parent 2d0d9ed commit 2097c72

5 files changed

Lines changed: 65 additions & 20 deletions

File tree

net-view/operation/private/netmanagerthreadprivate.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -459,13 +459,13 @@ void NetManagerThreadPrivate::doInit()
459459
item->updateenabled(method == ProxyMethod::Auto || method == ProxyMethod::Manual);
460460
item->updatelastMethod(NetType::ProxyMethod(ConfigWatcher::instance()->proxyMethod()));
461461
item->updatemethod(NetType::ProxyMethod(method));
462-
// item->updateenabledable(networkController->proxyController()->systemProxyExist());
463462
item->item()->moveToThread(m_parentThread);
464463
Q_EMIT itemAdded("Root", item);
464+
onSystemProxyExistChanged(networkController->proxyController()->systemProxyExist());
465465
onSystemAutoProxyChanged(networkController->proxyController()->autoProxy());
466466
onSystemManualProxyChanged();
467467

468-
// connect(networkController->proxyController(), &ProxyController::systemProxyExistChanged, this, &NetManagerThreadPrivate::onSystemProxyExistChanged);
468+
connect(networkController->proxyController(), &ProxyController::systemProxyExistChanged, this, &NetManagerThreadPrivate::onSystemProxyExistChanged);
469469
connect(networkController->proxyController(), &ProxyController::proxyMethodChanged, this, &NetManagerThreadPrivate::onSystemProxyMethodChanged);
470470
connect(networkController->proxyController(), &ProxyController::autoProxyChanged, this, &NetManagerThreadPrivate::onSystemAutoProxyChanged);
471471
connect(networkController->proxyController(), &ProxyController::proxyChanged, this, &NetManagerThreadPrivate::onSystemManualProxyChanged);

network-service-plugin/src/session/networkproxy.cpp

Lines changed: 27 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
namespace network {
1616
namespace sessionservice {
1717

18+
const QString ProxyTypeAuto = "auto";
1819
const QString ProxyTypeHttp = "http";
1920
const QString ProxyTypeHttps = "https";
2021
const QString ProxyTypeFtp = "ftp";
@@ -60,14 +61,19 @@ NetworkProxy::NetworkProxy(QDBusConnection &dbusConnection, NetworkStateHandler
6061
return;
6162
}
6263
m_proxySettings = new QGSettings(GSettingsIdProxy, QByteArray(), this);
64+
m_proxySettings->setProperty("type", ProxyTypeAuto);
6365
connect(m_proxySettings, &QGSettings::changed, this, &NetworkProxy::onConfigChanged);
6466
m_proxyChildSettingsHttp = new QGSettings(GChildProxyHttp, QByteArray(), this);
67+
m_proxyChildSettingsHttp->setProperty("type", ProxyTypeHttp);
6568
connect(m_proxyChildSettingsHttp, &QGSettings::changed, this, &NetworkProxy::onConfigChanged);
6669
m_proxyChildSettingsHttps = new QGSettings(GChildProxyHttps, QByteArray(), this);
70+
m_proxyChildSettingsHttps->setProperty("type", ProxyTypeHttps);
6771
connect(m_proxyChildSettingsHttps, &QGSettings::changed, this, &NetworkProxy::onConfigChanged);
6872
m_proxyChildSettingsFtp = new QGSettings(GChildProxyFtp, QByteArray(), this);
73+
m_proxyChildSettingsFtp->setProperty("type", ProxyTypeFtp);
6974
connect(m_proxyChildSettingsFtp, &QGSettings::changed, this, &NetworkProxy::onConfigChanged);
7075
m_proxyChildSettingsSocks = new QGSettings(GChildProxySocks, QByteArray(), this);
76+
m_proxyChildSettingsSocks->setProperty("type", ProxyTypeSocks);
7177
connect(m_proxyChildSettingsSocks, &QGSettings::changed, this, &NetworkProxy::onConfigChanged);
7278
// 如果ip全为空,则自动设置代理为None
7379
QString proxyAuto = m_proxySettings->get(GKeyProxyAuto).toString();
@@ -147,16 +153,22 @@ void NetworkProxy::GetProxy(const QString &proxyType)
147153
dbusConnection().send(message().createErrorReply(QDBusError::InvalidArgs, err));
148154
return;
149155
}
150-
QString host = childSettings->get(GKeyProxyHost).toString();
151-
int port = childSettings->get(GKeyProxyPort).toInt();
156+
QString host;
157+
int port = 0;
158+
if (proxyType == ProxyTypeAuto) {
159+
host = childSettings->get("autoconfigUrl").toString();
160+
} else {
161+
host = childSettings->get(GKeyProxyHost).toString();
162+
port = childSettings->get(GKeyProxyPort).toInt();
163+
}
152164
dbusConnection().send(message().createReply({ host, QString::number(port) }));
153165
}
154166

155167
void NetworkProxy::SetProxy(const QString &proxyType, const QString &host, const QString &port)
156168
{
157169
qCDebug(DSM()) << QString("Manager.SetProxy proxyType: %1, host: %2, port: %3").arg(proxyType).arg(host).arg(port);
158170
int portInt = port.toInt();
159-
if (portInt < 0 || portInt > 65535) {
171+
if (portInt < 0 || portInt >= 65535) {
160172
setDelayedReply(true);
161173
dbusConnection().send(message().createErrorReply(QDBusError::InvalidArgs, "port number must be an integer between 0 and 65535"));
162174
return;
@@ -210,7 +222,16 @@ void NetworkProxy::SetProxyAuthentication(const QString &proxyType, const QStrin
210222
childSettings->set(GKeyProxyAuthenticationPassword, password);
211223
}
212224

213-
void NetworkProxy::onConfigChanged(const QString &key) { }
225+
void NetworkProxy::onConfigChanged(const QString &key)
226+
{
227+
QGSettings *settings = qobject_cast<QGSettings *>(sender());
228+
if (!settings)
229+
return;
230+
231+
if (key == "host" || key == "autoconfigUrl") {
232+
emit proxyChanged(settings->property("type").toString(), settings->get(key).toString());
233+
}
234+
}
214235

215236
QGSettings *NetworkProxy::getProxyChildSettings(const QString &proxyType)
216237
{
@@ -222,6 +243,8 @@ QGSettings *NetworkProxy::getProxyChildSettings(const QString &proxyType)
222243
return m_proxyChildSettingsFtp;
223244
} else if (proxyType == ProxyTypeSocks) {
224245
return m_proxyChildSettingsSocks;
246+
} else if (proxyType == ProxyTypeAuto) {
247+
return m_proxySettings;
225248
}
226249
qCWarning(DSM()) << "not a valid proxy type:" << proxyType;
227250
return nullptr;

network-service-plugin/src/session/networkproxy.h

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,10 @@ class NetworkProxy : public QObject, protected QDBusContext
6464
" <signal name='ProxyMethodChanged'>\n"
6565
" <arg name='method' type='s'></arg>\n"
6666
" </signal>\n"
67+
" <signal name='proxyChanged'>\n"
68+
" <arg name='method' type='s'></arg>\n"
69+
" <arg name='method' type='s'></arg>\n"
70+
" </signal>\n"
6771
// 空实现
6872
" <method name='ActivateAccessPoint'>\n"
6973
" <arg name='uuid' type='s' direction='in'></arg>\n"
@@ -223,6 +227,7 @@ public Q_SLOTS:
223227

224228
Q_SIGNALS:
225229
void ProxyMethodChanged(const QString &proxyMode);
230+
void proxyChanged(const QString &type, const QString &value);
226231

227232
private Q_SLOTS:
228233
void onConfigChanged(const QString &key);
@@ -233,7 +238,7 @@ private Q_SLOTS:
233238
inline QDBusConnection dbusConnection() const { return m_dbusConnection; }
234239

235240
private:
236-
QDBusConnection &m_dbusConnection;
241+
QDBusConnection m_dbusConnection;
237242
NetworkStateHandler *m_networkStateHandler;
238243
QGSettings *m_proxySettings;
239244
QGSettings *m_proxyChildSettingsHttp;

src/proxycontroller.cpp

Lines changed: 27 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,9 @@ ProxyController::ProxyController(QObject *parent)
2323
// 判断是否存在proxychains4来决定是否存在应用代理
2424
m_appProxyExist = !QStandardPaths::findExecutable("proxychains4").isEmpty();
2525
QDBusConnection::sessionBus().connect(networkService, networkPath, networkInterface, "ProxyMethodChanged", this, SLOT(onProxyMethodChanged(const QString&)));
26+
QDBusConnection::sessionBus().connect(networkService, networkPath, networkInterface, "proxyChanged", this, SLOT(onProxyChanged(const QString &, const QString &)));
27+
connect(this, &ProxyController::proxyChanged, this, [ this ] { checkSystemProxyExist(); });
28+
querySysProxyData();
2629

2730
connect(m_networkInter, &NetworkInter::serviceValidChanged, this, [this](bool valid) {
2831
// 设置快速登录,重启后,锁屏的网络插件进行初始化,但是dbus服务无效,导致系统代理等设置异常,等dbus有效后,重新同步数据
@@ -41,19 +44,12 @@ void ProxyController::onProxyMethodChanged(const QString &method)
4144
m_proxyMethod = value;
4245
Q_EMIT proxyMethodChanged(value);
4346
}
44-
// 如果没有配置,则关掉代理,避免升级问题
45-
bool isConfExist = false;
46-
for (auto conf : m_sysProxyConfig) {
47-
if (!conf.url.isEmpty()) {
48-
isConfExist = true;
49-
break;
50-
}
51-
}
52-
bool systemProxyExist = isConfExist || !m_autoProxyURL.isEmpty();
53-
if (m_systemProxyExist != systemProxyExist) {
54-
m_systemProxyExist = systemProxyExist;
55-
Q_EMIT systemProxyExistChanged(m_systemProxyExist);
56-
}
47+
checkSystemProxyExist();
48+
}
49+
50+
void ProxyController::onProxyChanged(const QString &type, const QString &value)
51+
{
52+
queryProxyDataByType(type);
5753
}
5854

5955
void ProxyController::setProxyMethod(const ProxyMethod &pm)
@@ -167,6 +163,7 @@ void ProxyController::queryAutoProxy()
167163
if (m_autoProxyURL != autoProxyURL) {
168164
m_autoProxyURL = autoProxyURL;
169165
Q_EMIT autoProxyChanged(autoProxyURL);
166+
checkSystemProxyExist();
170167
}
171168
});
172169
}
@@ -382,6 +379,23 @@ QString ProxyController::appProxyType(const AppProxyType &v)
382379
return "http";
383380
}
384381

382+
void ProxyController::checkSystemProxyExist()
383+
{
384+
// 如果没有配置,则关掉代理,避免升级问题
385+
bool isConfExist = false;
386+
for (auto conf : m_sysProxyConfig) {
387+
if (!conf.url.isEmpty()) {
388+
isConfExist = true;
389+
break;
390+
}
391+
}
392+
bool systemProxyExist = isConfExist || !m_autoProxyURL.isEmpty();
393+
if (m_systemProxyExist != systemProxyExist) {
394+
m_systemProxyExist = systemProxyExist;
395+
Q_EMIT systemProxyExistChanged(m_systemProxyExist);
396+
}
397+
}
398+
385399
void ProxyController::onTypeChanged(const QString &value)
386400
{
387401
// 应用代理类型发生变化

src/proxycontroller.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,13 +83,16 @@ class ProxyController : public QObject
8383
AppProxyType appProxyType(const QString &v); // 系统代理类型转换,字符串到枚举
8484
QString appProxyType(const AppProxyType &v); // 系统代理类型转换,枚举到字符串
8585

86+
void checkSystemProxyExist();
87+
8688
protected Q_SLOTS:
8789
void onIPChanged(const QString &value);
8890
void onPasswordChanged(const QString &value);
8991
void onTypeChanged(const QString &value);
9092
void onUserChanged(const QString &value);
9193
void onPortChanged(uint value);
9294
void onProxyMethodChanged(const QString &method);
95+
void onProxyChanged(const QString &type, const QString &value);
9396

9497
private:
9598
NetworkInter *m_networkInter;

0 commit comments

Comments
 (0)