2022-09-24 17:08:28 +08:00
|
|
|
|
/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
|
|
|
|
|
*
|
|
|
|
|
* Copyright (C) 2019 Tianjin KYLIN Information Technology Co., Ltd.
|
|
|
|
|
*
|
|
|
|
|
* This program is free software; you can redistribute it and/or modify
|
|
|
|
|
* it under the terms of the GNU General Public License as published by
|
|
|
|
|
* the Free Software Foundation; either version 2 of the License, or
|
|
|
|
|
* (at your option) any later version.
|
|
|
|
|
*
|
|
|
|
|
* This program is distributed in the hope that it will be useful,
|
|
|
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
|
* GNU General Public License for more details.
|
|
|
|
|
*
|
|
|
|
|
* You should have received a copy of the GNU General Public License
|
|
|
|
|
* along with this program; if not, write to the Free Software
|
|
|
|
|
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
|
|
|
*
|
|
|
|
|
*/
|
|
|
|
|
#include "proxy.h"
|
|
|
|
|
#include "aptproxydialog.h"
|
|
|
|
|
#include "aptinfo.h"
|
|
|
|
|
//#include "utils.h"
|
|
|
|
|
|
|
|
|
|
#include <QDebug>
|
|
|
|
|
#include <QRegExpValidator>
|
|
|
|
|
#include <QApplication>
|
|
|
|
|
#include <QTranslator>
|
|
|
|
|
|
|
|
|
|
#define PROXY_SCHEMA "org.gnome.system.proxy"
|
|
|
|
|
#define PROXY_MODE_KEY "mode"
|
|
|
|
|
#define PROXY_AUTOCONFIG_URL_KEY "autoconfig-url"
|
|
|
|
|
#define IGNORE_HOSTS_KEY "ignore-hosts"
|
|
|
|
|
|
|
|
|
|
#define HTTP_PROXY_SCHEMA "org.gnome.system.proxy.http"
|
|
|
|
|
#define HTTP_USE_AUTH_KEY "use-authentication"
|
|
|
|
|
#define HTTP_AUTH_USER_KEY "authentication-user"
|
|
|
|
|
#define HTTP_AUTH_PASSWD_KEY "authentication-password"
|
|
|
|
|
|
|
|
|
|
#define HTTPS_PROXY_SCHEMA "org.gnome.system.proxy.https"
|
|
|
|
|
|
|
|
|
|
#define FTP_PROXY_SCHEMA "org.gnome.system.proxy.ftp"
|
|
|
|
|
|
|
|
|
|
#define SOCKS_PROXY_SCHEMA "org.gnome.system.proxy.socks"
|
|
|
|
|
|
|
|
|
|
#define PROXY_HOST_KEY "host"
|
|
|
|
|
#define PROXY_PORT_KEY "port"
|
|
|
|
|
|
|
|
|
|
#define FRAME_LAYOUT_MARGINS 16,0,16,0
|
|
|
|
|
#define FRAME_LAYOUT_SPACING 8
|
|
|
|
|
#define LABEL_WIDTH 136
|
|
|
|
|
#define LINE_EDIT_HEIGHT 36
|
|
|
|
|
|
|
|
|
|
Proxy::Proxy() : mFirstLoad(true)
|
|
|
|
|
{
|
|
|
|
|
qDBusRegisterMetaType<QMap<QString, QStringList>>();
|
|
|
|
|
qDBusRegisterMetaType<QStringList>();
|
|
|
|
|
|
|
|
|
|
QTranslator* translator = new QTranslator(this);
|
|
|
|
|
translator->load("/usr/share/kylin-nm/proxy/" + QLocale::system().name());
|
|
|
|
|
QApplication::installTranslator(translator);
|
|
|
|
|
|
|
|
|
|
pluginName = tr("Proxy");
|
|
|
|
|
pluginType = NETWORK;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Proxy::~Proxy()
|
|
|
|
|
{
|
|
|
|
|
if (!mFirstLoad) {
|
|
|
|
|
plugin_leave();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
QString Proxy::plugini18nName() {
|
|
|
|
|
return pluginName;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
int Proxy::pluginTypes() {
|
|
|
|
|
return pluginType;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
QWidget *Proxy::pluginUi() {
|
|
|
|
|
if (mFirstLoad) {
|
|
|
|
|
mFirstLoad = false;
|
|
|
|
|
pluginWidget = new QWidget;
|
|
|
|
|
pluginWidget->setAttribute(Qt::WA_DeleteOnClose);
|
|
|
|
|
initUi(pluginWidget);
|
|
|
|
|
retranslateUi();
|
|
|
|
|
|
|
|
|
|
mfileWatch_1 = new QFileSystemWatcher(this);
|
|
|
|
|
mfileWatch_2 = new QFileSystemWatcher(this);
|
|
|
|
|
|
|
|
|
|
QString dir_1("/etc/apt/apt.conf.d");
|
|
|
|
|
QString dir_2("/etc/profile.d");
|
|
|
|
|
mfileWatch_1->addPath(dir_1);
|
|
|
|
|
mfileWatch_2->addPath(dir_2);
|
|
|
|
|
|
|
|
|
|
const QByteArray id(PROXY_SCHEMA);
|
|
|
|
|
const QByteArray idd(HTTP_PROXY_SCHEMA);
|
|
|
|
|
const QByteArray iddd(HTTPS_PROXY_SCHEMA);
|
|
|
|
|
const QByteArray iid(FTP_PROXY_SCHEMA);
|
|
|
|
|
const QByteArray iiid(SOCKS_PROXY_SCHEMA);
|
|
|
|
|
const QByteArray iVd(APT_PROXY_SCHEMA);
|
|
|
|
|
|
|
|
|
|
initSearchText();
|
|
|
|
|
setupComponent();
|
|
|
|
|
|
|
|
|
|
if (QGSettings::isSchemaInstalled(id) && QGSettings::isSchemaInstalled(idd) &&
|
|
|
|
|
QGSettings::isSchemaInstalled(iddd) && QGSettings::isSchemaInstalled(iid) &&
|
|
|
|
|
QGSettings::isSchemaInstalled(iiid) && QGSettings::isSchemaInstalled(iVd)){
|
|
|
|
|
|
|
|
|
|
isExistSettings = true;
|
|
|
|
|
proxysettings = new QGSettings(id,QByteArray(),this);
|
|
|
|
|
httpsettings = new QGSettings(idd,QByteArray(),this);
|
|
|
|
|
securesettings = new QGSettings(iddd,QByteArray(),this);
|
|
|
|
|
ftpsettings = new QGSettings(iid,QByteArray(),this);
|
|
|
|
|
sockssettings = new QGSettings(iiid,QByteArray(),this);
|
|
|
|
|
|
|
|
|
|
setupConnect();
|
|
|
|
|
initProxyModeStatus();
|
|
|
|
|
initAutoProxyStatus();
|
|
|
|
|
initManualProxyStatus();
|
|
|
|
|
initIgnoreHostStatus();
|
|
|
|
|
initDbus();
|
|
|
|
|
initAppProxyStatus();
|
|
|
|
|
} else {
|
|
|
|
|
qCritical() << "Xml needed by Proxy is not installed";
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return pluginWidget;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void Proxy::plugin_leave()
|
|
|
|
|
{
|
|
|
|
|
if (isExistSettings) {
|
|
|
|
|
if (proxysettings->get(PROXY_MODE_KEY) == "manual") {
|
|
|
|
|
if ((httpsettings->get(PROXY_HOST_KEY).toString().isEmpty() || httpsettings->get(PROXY_PORT_KEY).toInt() == 0)
|
|
|
|
|
&& (securesettings->get(PROXY_HOST_KEY).toString().isEmpty() || securesettings->get(PROXY_PORT_KEY).toInt() == 0)
|
|
|
|
|
&& (ftpsettings->get(PROXY_HOST_KEY).toString().isEmpty() || ftpsettings->get(PROXY_PORT_KEY).toInt() == 0)
|
|
|
|
|
&& (sockssettings->get(PROXY_HOST_KEY).toString().isEmpty() || sockssettings->get(PROXY_PORT_KEY).toInt() == 0)) {
|
|
|
|
|
proxysettings->set(PROXY_MODE_KEY,"auto");
|
|
|
|
|
mManualBtn->setChecked(false);
|
|
|
|
|
mAutoBtn->setChecked(true);
|
|
|
|
|
_setSensitivity();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const QString Proxy::name() const {
|
|
|
|
|
|
|
|
|
|
return QStringLiteral("Proxy");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
bool Proxy::isShowOnHomePage() const
|
|
|
|
|
{
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
QIcon Proxy::icon() const
|
|
|
|
|
{
|
|
|
|
|
return QIcon::fromTheme("ukui-network-agent-symbolic");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
bool Proxy::isEnable() const
|
|
|
|
|
{
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void Proxy::initUi(QWidget *widget)
|
|
|
|
|
{
|
|
|
|
|
QVBoxLayout *mverticalLayout = new QVBoxLayout(widget);
|
|
|
|
|
mverticalLayout->setSpacing(8);
|
|
|
|
|
mverticalLayout->setContentsMargins(0, 0, 0, 0);
|
|
|
|
|
|
|
|
|
|
mProxyBtnGroup = new QButtonGroup(this);
|
|
|
|
|
mProxyBtnGroup->setExclusive (false); // 防止互斥
|
|
|
|
|
|
|
|
|
|
mTitleLabel = new TitleLabel(widget);
|
|
|
|
|
|
|
|
|
|
mProxyFrame = new QFrame(widget);
|
|
|
|
|
mProxyFrame->setMinimumSize(QSize(550, 0));
|
|
|
|
|
mProxyFrame->setMaximumSize(QSize(16777215, 16777215));
|
|
|
|
|
mProxyFrame->setFrameShape(QFrame::Box);
|
|
|
|
|
QVBoxLayout *Lyt = new QVBoxLayout(mProxyFrame);
|
|
|
|
|
Lyt->setContentsMargins(0, 0, 0, 0);
|
|
|
|
|
Lyt->setSpacing(0);
|
|
|
|
|
|
|
|
|
|
mEnableFrame = new QFrame(mProxyFrame);
|
|
|
|
|
setFrame_Noframe(mEnableFrame);
|
|
|
|
|
|
|
|
|
|
QHBoxLayout *enableLyt = new QHBoxLayout(mEnableFrame);
|
|
|
|
|
enableLyt->setContentsMargins(16, 0, 16, 0);
|
|
|
|
|
QLabel *enableLabel = new QLabel(tr("Start using"), mEnableFrame);
|
|
|
|
|
mEnableBtn = new KSwitchButton(mEnableFrame);
|
|
|
|
|
enableLyt->addWidget(enableLabel);
|
|
|
|
|
enableLyt->addStretch();
|
|
|
|
|
enableLyt->addWidget(mEnableBtn);
|
|
|
|
|
|
|
|
|
|
line_8 = setLine(mProxyFrame);
|
|
|
|
|
|
|
|
|
|
mSelectFrame = new QFrame(mProxyFrame);
|
|
|
|
|
setFrame_Noframe(mSelectFrame);
|
|
|
|
|
QHBoxLayout *selectLyt = new QHBoxLayout(mSelectFrame);
|
|
|
|
|
selectLyt->setContentsMargins(16, 0, 16, 0);
|
|
|
|
|
selectLyt->setSpacing(4);
|
|
|
|
|
QLabel *selectLabel = new QLabel(tr("Proxy mode"), mSelectFrame);
|
|
|
|
|
selectLabel->setFixedWidth(148);
|
|
|
|
|
mAutoBtn = new QRadioButton(mSelectFrame);
|
|
|
|
|
mProxyBtnGroup->addButton(mAutoBtn);
|
|
|
|
|
QLabel *autoLabel = new QLabel(tr("Auto"), mSelectFrame);
|
|
|
|
|
mManualBtn = new QRadioButton(mSelectFrame);
|
|
|
|
|
mProxyBtnGroup->addButton(mManualBtn);
|
|
|
|
|
QLabel *manualLabel = new QLabel(tr("Manual"), mSelectFrame);
|
|
|
|
|
selectLyt->addWidget(selectLabel);
|
|
|
|
|
selectLyt->addWidget(mAutoBtn);
|
|
|
|
|
selectLyt->addWidget(autoLabel);
|
|
|
|
|
selectLyt->addSpacing(100);
|
|
|
|
|
selectLyt->addWidget(mManualBtn);
|
|
|
|
|
selectLyt->addWidget(manualLabel);
|
|
|
|
|
selectLyt->addStretch();
|
|
|
|
|
|
|
|
|
|
line_1 = setLine(mProxyFrame);
|
|
|
|
|
|
|
|
|
|
mUrlFrame = new QFrame(mProxyFrame);
|
|
|
|
|
setFrame_Noframe(mUrlFrame);
|
|
|
|
|
|
|
|
|
|
QHBoxLayout *mUrlLayout = new QHBoxLayout(mUrlFrame);
|
|
|
|
|
mUrlLayout->setContentsMargins(16, 0, 16, 0);
|
|
|
|
|
mUrlLayout->setSpacing(8);
|
|
|
|
|
|
|
|
|
|
mUrlLabel = new QLabel(mUrlFrame);
|
|
|
|
|
mUrlLabel->setFixedWidth(136);
|
|
|
|
|
|
|
|
|
|
mUrlLineEdit = new QLineEdit(mUrlFrame);
|
|
|
|
|
mUrlLineEdit->setFixedHeight(36);
|
|
|
|
|
|
|
|
|
|
mUrlLayout->addWidget(mUrlLabel);
|
|
|
|
|
mUrlLayout->addWidget(mUrlLineEdit);
|
|
|
|
|
|
|
|
|
|
line_2 = setLine(mProxyFrame);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
mHTTPFrame = new QFrame(mProxyFrame);
|
|
|
|
|
setFrame_Noframe(mHTTPFrame);
|
|
|
|
|
|
|
|
|
|
QHBoxLayout *mHTTPLayout_1 = new QHBoxLayout(mHTTPFrame);
|
|
|
|
|
mHTTPLayout_1->setSpacing(8);
|
|
|
|
|
mHTTPLayout_1->setContentsMargins(16, 0, 16, 0);
|
|
|
|
|
mHTTPLabel = new QLabel(mHTTPFrame);
|
|
|
|
|
mHTTPLabel->setFixedWidth(136);
|
|
|
|
|
mHTTPPortLabel = new QLabel(mHTTPFrame);
|
|
|
|
|
mHTTPPortLabel->setFixedWidth(100);
|
|
|
|
|
mHTTPPortLabel->setAlignment(Qt::AlignRight | Qt::AlignVCenter);
|
|
|
|
|
mHTTPLineEdit_1 = new QLineEdit(mHTTPFrame);
|
|
|
|
|
mHTTPLineEdit_1->resize(300, 36);
|
|
|
|
|
mHTTPLineEdit_2 = new QLineEdit(mHTTPFrame);
|
|
|
|
|
mHTTPLineEdit_2->setFixedHeight(36);
|
|
|
|
|
mHTTPLineEdit_2->setValidator(new QRegExpValidator(QRegExp("[0-9]*") , this));
|
|
|
|
|
mHTTPLayout_1->addWidget(mHTTPLabel);
|
|
|
|
|
mHTTPLayout_1->addWidget(mHTTPLineEdit_1);
|
|
|
|
|
mHTTPLayout_1->addWidget(mHTTPPortLabel);
|
|
|
|
|
mHTTPLayout_1->addWidget(mHTTPLineEdit_2);
|
|
|
|
|
|
|
|
|
|
line_3 = setLine(mProxyFrame);
|
|
|
|
|
|
|
|
|
|
mHTTPSFrame = new QFrame(mProxyFrame);
|
|
|
|
|
setFrame_Noframe(mHTTPSFrame);
|
|
|
|
|
|
|
|
|
|
QHBoxLayout *mHTTPSLayout = new QHBoxLayout(mHTTPSFrame);
|
|
|
|
|
mHTTPSLayout->setSpacing(8);
|
|
|
|
|
mHTTPSLayout->setContentsMargins(16, 0, 16, 0);
|
|
|
|
|
mHTTPSLabel = new QLabel(mHTTPSFrame);
|
|
|
|
|
mHTTPSLabel->setFixedWidth(136);
|
|
|
|
|
mHTTPSPortLabel = new QLabel(mHTTPSFrame);
|
|
|
|
|
mHTTPSPortLabel->setFixedWidth(100);
|
|
|
|
|
mHTTPSPortLabel->setAlignment(Qt::AlignRight | Qt::AlignVCenter);
|
|
|
|
|
mHTTPSLineEdit_1 = new QLineEdit(mHTTPSFrame);
|
|
|
|
|
mHTTPSLineEdit_1->resize(300, 36);
|
|
|
|
|
mHTTPSLineEdit_2 = new QLineEdit(mHTTPSFrame);
|
|
|
|
|
mHTTPSLineEdit_2->setFixedHeight(36);
|
|
|
|
|
mHTTPSLineEdit_2->setValidator(new QRegExpValidator(QRegExp("[0-9]*") , this));
|
|
|
|
|
mHTTPSLayout->addWidget(mHTTPSLabel);
|
|
|
|
|
mHTTPSLayout->addWidget(mHTTPSLineEdit_1);
|
|
|
|
|
mHTTPSLayout->addWidget(mHTTPSPortLabel);
|
|
|
|
|
mHTTPSLayout->addWidget(mHTTPSLineEdit_2);
|
|
|
|
|
|
|
|
|
|
line_4 = setLine(mProxyFrame);
|
|
|
|
|
|
|
|
|
|
mFTPFrame = new QFrame(mProxyFrame);
|
|
|
|
|
setFrame_Noframe(mFTPFrame);
|
|
|
|
|
|
|
|
|
|
QHBoxLayout *mFTPLayout = new QHBoxLayout(mFTPFrame);
|
|
|
|
|
mFTPLayout->setSpacing(8);
|
|
|
|
|
mFTPLayout->setContentsMargins(16, 0, 16, 0);
|
|
|
|
|
mFTPLabel = new QLabel(mFTPFrame);
|
|
|
|
|
mFTPLabel->setFixedWidth(136);
|
|
|
|
|
mFTPPortLabel = new QLabel(mFTPFrame);
|
|
|
|
|
mFTPPortLabel->setFixedWidth(100);
|
|
|
|
|
mFTPPortLabel->setAlignment(Qt::AlignRight | Qt::AlignVCenter);
|
|
|
|
|
mFTPLineEdit_1 = new QLineEdit(mFTPFrame);
|
|
|
|
|
mFTPLineEdit_1->resize(300, 36);
|
|
|
|
|
mFTPLineEdit_2 = new QLineEdit(mFTPFrame);
|
|
|
|
|
mFTPLineEdit_2->setFixedHeight(36);
|
|
|
|
|
mFTPLineEdit_2->setValidator(new QRegExpValidator(QRegExp("[0-9]*") , this));
|
|
|
|
|
mFTPLayout->addWidget(mFTPLabel);
|
|
|
|
|
mFTPLayout->addWidget(mFTPLineEdit_1);
|
|
|
|
|
mFTPLayout->addWidget(mFTPPortLabel);
|
|
|
|
|
mFTPLayout->addWidget(mFTPLineEdit_2);
|
|
|
|
|
|
|
|
|
|
line_5 = setLine(mProxyFrame);
|
|
|
|
|
|
|
|
|
|
mSOCKSFrame = new QFrame(mProxyFrame);
|
|
|
|
|
setFrame_Noframe(mSOCKSFrame);
|
|
|
|
|
|
|
|
|
|
QHBoxLayout *mSOCKSLayout = new QHBoxLayout(mSOCKSFrame);
|
|
|
|
|
mSOCKSLayout->setSpacing(8);
|
|
|
|
|
mSOCKSLayout->setContentsMargins(16, 0, 16, 0);
|
|
|
|
|
mSOCKSLabel = new QLabel(mSOCKSFrame);
|
|
|
|
|
mSOCKSLabel->setFixedWidth(136);
|
|
|
|
|
mSOCKSPortLabel = new QLabel(mSOCKSFrame);
|
|
|
|
|
mSOCKSPortLabel->setFixedWidth(100);
|
|
|
|
|
mSOCKSPortLabel->setAlignment(Qt::AlignRight | Qt::AlignVCenter);
|
|
|
|
|
mSOCKSLineEdit_1 = new QLineEdit(mSOCKSFrame);
|
|
|
|
|
mSOCKSLineEdit_1->resize(300, 36);
|
|
|
|
|
mSOCKSLineEdit_2 = new QLineEdit(mSOCKSFrame);
|
|
|
|
|
mSOCKSLineEdit_2->setFixedHeight(36);
|
|
|
|
|
mSOCKSLineEdit_2->setValidator(new QRegExpValidator(QRegExp("[0-9]*") , this));
|
|
|
|
|
mSOCKSLayout->addWidget(mSOCKSLabel);
|
|
|
|
|
mSOCKSLayout->addWidget(mSOCKSLineEdit_1);
|
|
|
|
|
mSOCKSLayout->addWidget(mSOCKSPortLabel);
|
|
|
|
|
mSOCKSLayout->addWidget(mSOCKSLineEdit_2);
|
|
|
|
|
|
|
|
|
|
line_6 = setLine(mProxyFrame);
|
|
|
|
|
|
|
|
|
|
mIgnoreFrame = new QFrame(mProxyFrame);
|
|
|
|
|
mIgnoreFrame->setMinimumSize(QSize(550, 0));
|
|
|
|
|
mIgnoreFrame->setMaximumSize(QSize(16777215, 16777215));
|
|
|
|
|
mIgnoreFrame->setFrameShape(QFrame::NoFrame);
|
|
|
|
|
QVBoxLayout *mIgnoreLayout = new QVBoxLayout(mIgnoreFrame);
|
|
|
|
|
mIgnoreLayout->setSpacing(10);
|
|
|
|
|
mIgnoreLayout->setContentsMargins(16, 0, 16, 24);
|
|
|
|
|
mIgnoreLabel = new QLabel(mIgnoreFrame);
|
|
|
|
|
mIgnoreLabel->setFixedHeight(36);
|
|
|
|
|
mIgnoreLineEdit = new QTextEdit(mIgnoreFrame);
|
|
|
|
|
mIgnoreLineEdit->setFixedHeight(120);
|
|
|
|
|
mIgnoreLineEdit->setStyleSheet("border-radius:6px;background-color: palette(button)");
|
|
|
|
|
mIgnoreLayout->addWidget(mIgnoreLabel);
|
|
|
|
|
mIgnoreLayout->addWidget(mIgnoreLineEdit);
|
|
|
|
|
|
|
|
|
|
Lyt->addWidget(mEnableFrame);
|
|
|
|
|
Lyt->addWidget(line_8);
|
|
|
|
|
Lyt->addWidget(mSelectFrame);
|
|
|
|
|
Lyt->addWidget(line_1);
|
|
|
|
|
Lyt->addWidget(mUrlFrame);
|
|
|
|
|
Lyt->addWidget(line_2);
|
|
|
|
|
Lyt->addWidget(mHTTPFrame);
|
|
|
|
|
Lyt->addWidget(line_3);
|
|
|
|
|
Lyt->addWidget(mHTTPSFrame);
|
|
|
|
|
Lyt->addWidget(line_4);
|
|
|
|
|
Lyt->addWidget(mFTPFrame);
|
|
|
|
|
Lyt->addWidget(line_5);
|
|
|
|
|
Lyt->addWidget(mSOCKSFrame);
|
|
|
|
|
Lyt->addWidget(line_6);
|
|
|
|
|
Lyt->addWidget(mIgnoreFrame);
|
|
|
|
|
|
|
|
|
|
//应用代理模块
|
|
|
|
|
m_appProxyLabel = new TitleLabel(widget);
|
|
|
|
|
m_appProxyLabel->setText(tr("Application Proxy")); //应用代理
|
|
|
|
|
setAppProxyFrameUi(widget);
|
|
|
|
|
setAppListFrameUi(widget);
|
|
|
|
|
|
|
|
|
|
//APT代理模块
|
|
|
|
|
mAptProxyLabel = new TitleLabel(widget);
|
|
|
|
|
mAPTFrame = new QFrame(widget);
|
|
|
|
|
mAPTFrame->setMinimumSize(QSize(550, 0));
|
|
|
|
|
mAPTFrame->setMaximumSize(QSize(16777215, 16777215));
|
|
|
|
|
mAPTFrame->setFrameShape(QFrame::Box);
|
|
|
|
|
|
|
|
|
|
QVBoxLayout *AptLayout = new QVBoxLayout(mAPTFrame);
|
|
|
|
|
AptLayout->setContentsMargins(0, 0, 0, 0);
|
|
|
|
|
AptLayout->setSpacing(0);
|
|
|
|
|
|
|
|
|
|
mAPTFrame_1 = new QFrame(mAPTFrame);
|
|
|
|
|
setFrame_Noframe(mAPTFrame_1);
|
|
|
|
|
|
|
|
|
|
QHBoxLayout *mAptLayout_1 = new QHBoxLayout(mAPTFrame_1);
|
|
|
|
|
mAptLayout_1->setContentsMargins(16, 0, 16, 0);
|
|
|
|
|
mAptLayout_1->setSpacing(8);
|
|
|
|
|
|
|
|
|
|
mAptLabel = new QLabel(mAPTFrame_1);
|
|
|
|
|
mAptLabel->setFixedWidth(200);
|
|
|
|
|
mAptBtn = new KSwitchButton(mAPTFrame_1);
|
|
|
|
|
mAptLayout_1->addWidget(mAptLabel);
|
|
|
|
|
mAptLayout_1->addStretch();
|
|
|
|
|
mAptLayout_1->addWidget(mAptBtn);
|
|
|
|
|
|
|
|
|
|
mAPTFrame_2 = new QFrame(mAPTFrame);
|
|
|
|
|
setFrame_Noframe(mAPTFrame_2);
|
|
|
|
|
|
|
|
|
|
QHBoxLayout *mAptLayout_2 = new QHBoxLayout(mAPTFrame_2);
|
|
|
|
|
mAptLayout_2->setContentsMargins(16, 0, 16, 0);
|
|
|
|
|
mAptLayout_2->setSpacing(8);
|
|
|
|
|
|
|
|
|
|
mAPTHostLabel_1 = new QLabel(mAPTFrame_2);
|
|
|
|
|
mAPTHostLabel_2 = new QLabel(mAPTFrame_2);
|
|
|
|
|
mAPTPortLabel_1 = new QLabel(mAPTFrame_2);
|
|
|
|
|
mAPTPortLabel_2 = new QLabel(mAPTFrame_2);
|
|
|
|
|
mEditBtn = new QPushButton(mAPTFrame_2);
|
|
|
|
|
mEditBtn->setFixedWidth(80);
|
|
|
|
|
mAptLayout_2->addWidget(mAPTHostLabel_1);
|
|
|
|
|
mAptLayout_2->addWidget(mAPTHostLabel_2);
|
|
|
|
|
mAptLayout_2->addSpacing(100);
|
|
|
|
|
mAptLayout_2->addWidget(mAPTPortLabel_1);
|
|
|
|
|
mAptLayout_2->addWidget(mAPTPortLabel_2);
|
|
|
|
|
mAptLayout_2->addStretch();
|
|
|
|
|
mAptLayout_2->addWidget(mEditBtn,Qt::AlignRight);
|
|
|
|
|
|
|
|
|
|
line_7 = setLine(mAPTFrame);
|
|
|
|
|
|
|
|
|
|
AptLayout->addWidget(mAPTFrame_1);
|
|
|
|
|
AptLayout->addWidget(line_7);
|
|
|
|
|
AptLayout->addWidget(mAPTFrame_2);
|
|
|
|
|
|
|
|
|
|
mverticalLayout->addWidget(mTitleLabel);
|
|
|
|
|
mverticalLayout->addWidget(mProxyFrame);
|
|
|
|
|
mverticalLayout->addSpacing(32);
|
|
|
|
|
mverticalLayout->addWidget(m_appProxyLabel);
|
|
|
|
|
mverticalLayout->addWidget(m_appProxyFrame);
|
|
|
|
|
mverticalLayout->addSpacing(4);
|
|
|
|
|
mverticalLayout->addWidget(m_appListFrame);
|
|
|
|
|
mverticalLayout->addSpacing(32);
|
|
|
|
|
mverticalLayout->addWidget(mAptProxyLabel);
|
|
|
|
|
mverticalLayout->addWidget(mAPTFrame);
|
|
|
|
|
mverticalLayout->addStretch();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void Proxy::initSearchText() {
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void Proxy::retranslateUi()
|
|
|
|
|
{
|
|
|
|
|
mTitleLabel->setText(tr("System Proxy"));
|
|
|
|
|
//~ contents_path /Proxy/Auto url
|
|
|
|
|
mUrlLabel->setText(tr("Auto url"));
|
|
|
|
|
//~ contents_path /Proxy/Http Proxy
|
|
|
|
|
mHTTPLabel->setText(tr("Http Proxy"));
|
|
|
|
|
//~ contents_path /Proxy/Https Proxy
|
|
|
|
|
mHTTPSLabel->setText(tr("Https Proxy"));
|
|
|
|
|
//~ contents_path /Proxy/Ftp Proxy
|
|
|
|
|
mFTPLabel->setText(tr("Ftp Proxy"));
|
|
|
|
|
//~ contents_path /Proxy/Socks Proxy
|
|
|
|
|
mSOCKSLabel->setText(tr("Socks Proxy"));
|
|
|
|
|
mHTTPPortLabel->setText(tr("Port"));
|
|
|
|
|
mHTTPSPortLabel->setText(tr("Port"));
|
|
|
|
|
mFTPPortLabel->setText(tr("Port"));
|
|
|
|
|
mSOCKSPortLabel->setText(tr("Port"));
|
|
|
|
|
mIgnoreLabel->setText(tr("List of ignored hosts. more than one entry, please separate with english semicolon(;)"));
|
|
|
|
|
|
|
|
|
|
//~ contents_path /Proxy/Apt Proxy
|
|
|
|
|
mAptProxyLabel->setText(tr("Apt Proxy"));
|
|
|
|
|
mAptLabel->setText(tr("Open"));
|
|
|
|
|
mAPTHostLabel_1->setText(tr("Server Address : "));
|
|
|
|
|
mAPTPortLabel_1->setText(tr("Port : "));
|
|
|
|
|
mEditBtn->setText(tr("Edit"));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void Proxy::setupComponent(){
|
|
|
|
|
//QLineEdit 设置数据
|
|
|
|
|
GSData httpHostData;
|
|
|
|
|
httpHostData.schema = HTTP_PROXY_SCHEMA;
|
|
|
|
|
httpHostData.key = PROXY_HOST_KEY;
|
|
|
|
|
mHTTPLineEdit_1->setProperty("gData", QVariant::fromValue(httpHostData));
|
|
|
|
|
|
|
|
|
|
GSData httpsHostData;
|
|
|
|
|
httpsHostData.schema = HTTPS_PROXY_SCHEMA;
|
|
|
|
|
httpsHostData.key = PROXY_HOST_KEY;
|
|
|
|
|
mHTTPSLineEdit_1->setProperty("gData", QVariant::fromValue(httpsHostData));
|
|
|
|
|
|
|
|
|
|
GSData ftpHostData;
|
|
|
|
|
ftpHostData.schema = FTP_PROXY_SCHEMA;
|
|
|
|
|
ftpHostData.key = PROXY_HOST_KEY;
|
|
|
|
|
mFTPLineEdit_1->setProperty("gData", QVariant::fromValue(ftpHostData));
|
|
|
|
|
|
|
|
|
|
GSData socksHostData;
|
|
|
|
|
socksHostData.schema = SOCKS_PROXY_SCHEMA;
|
|
|
|
|
socksHostData.key = PROXY_HOST_KEY;
|
|
|
|
|
mSOCKSLineEdit_1->setProperty("gData", QVariant::fromValue(socksHostData));
|
|
|
|
|
|
|
|
|
|
GSData httpPortData;
|
|
|
|
|
httpPortData.schema = HTTP_PROXY_SCHEMA;
|
|
|
|
|
httpPortData.key = PROXY_PORT_KEY;
|
|
|
|
|
mHTTPLineEdit_2->setProperty("gData", QVariant::fromValue(httpPortData));
|
|
|
|
|
|
|
|
|
|
GSData httpsPortData;
|
|
|
|
|
httpsPortData.schema = HTTPS_PROXY_SCHEMA;
|
|
|
|
|
httpsPortData.key = PROXY_PORT_KEY;
|
|
|
|
|
mHTTPSLineEdit_2->setProperty("gData", QVariant::fromValue(httpsPortData));
|
|
|
|
|
|
|
|
|
|
GSData ftpPortData;
|
|
|
|
|
ftpPortData.schema = FTP_PROXY_SCHEMA;
|
|
|
|
|
ftpPortData.key = PROXY_PORT_KEY;
|
|
|
|
|
mFTPLineEdit_2->setProperty("gData", QVariant::fromValue(ftpPortData));
|
|
|
|
|
|
|
|
|
|
GSData socksPortData;
|
|
|
|
|
socksPortData.schema = SOCKS_PROXY_SCHEMA;
|
|
|
|
|
socksPortData.key = PROXY_PORT_KEY;
|
|
|
|
|
mSOCKSLineEdit_2->setProperty("gData", QVariant::fromValue(socksPortData));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void Proxy::setupConnect(){
|
|
|
|
|
connect(mEnableBtn, &KSwitchButton::stateChanged, this ,[=](bool checked) {
|
|
|
|
|
mSelectFrame->setVisible(checked);
|
|
|
|
|
line_8->setVisible(checked);
|
|
|
|
|
mAutoBtn->setChecked(checked);
|
|
|
|
|
mManualBtn->setChecked(false);
|
|
|
|
|
qDebug()<<mManualBtn->isChecked();
|
|
|
|
|
proxysettings->set(PROXY_MODE_KEY, checked ? "auto" : "none");
|
|
|
|
|
_setSensitivity();
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
connect(mEditBtn ,&QPushButton::clicked, this, &Proxy::setAptProxySlot);
|
|
|
|
|
|
|
|
|
|
connect(mProxyBtnGroup, QOverload<QAbstractButton *>::of(&QButtonGroup::buttonClicked), [=](QAbstractButton * eBtn){
|
|
|
|
|
if (eBtn == mAutoBtn) {
|
|
|
|
|
mManualBtn->setChecked(false);
|
|
|
|
|
proxysettings->set(PROXY_MODE_KEY,"auto");
|
|
|
|
|
} else if (eBtn == mManualBtn){
|
|
|
|
|
mAutoBtn->setChecked(false);
|
|
|
|
|
proxysettings->set(PROXY_MODE_KEY,"manual");
|
|
|
|
|
}
|
|
|
|
|
_setSensitivity();
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
connect(mUrlLineEdit, &QLineEdit::textChanged, this, [=](const QString &txt){proxysettings->set(PROXY_AUTOCONFIG_URL_KEY, QVariant(txt));});
|
|
|
|
|
|
|
|
|
|
connect(mHTTPLineEdit_1, &QLineEdit::textChanged, this, [=](const QString &txt){manualProxyTextChanged(txt);});
|
|
|
|
|
connect(mHTTPSLineEdit_1, &QLineEdit::textChanged, this, [=](const QString &txt){manualProxyTextChanged(txt);});
|
|
|
|
|
connect(mFTPLineEdit_1, &QLineEdit::textChanged, this, [=](const QString &txt){manualProxyTextChanged(txt);});
|
|
|
|
|
connect(mSOCKSLineEdit_1, &QLineEdit::textChanged, this, [=](const QString &txt){manualProxyTextChanged(txt);});
|
|
|
|
|
connect(mHTTPLineEdit_2, &QLineEdit::textChanged, this, [=](const QString &txt){manualProxyTextChanged(txt);});
|
|
|
|
|
connect(mHTTPSLineEdit_2, &QLineEdit::textChanged, this, [=](const QString &txt){manualProxyTextChanged(txt);});
|
|
|
|
|
connect(mFTPLineEdit_2, &QLineEdit::textChanged, this, [=](const QString &txt){manualProxyTextChanged(txt);});
|
|
|
|
|
connect(mSOCKSLineEdit_2, &QLineEdit::textChanged, this, [=](const QString &txt){manualProxyTextChanged(txt);});
|
|
|
|
|
|
|
|
|
|
connect(mIgnoreLineEdit, &QTextEdit::textChanged, this, [=](){
|
|
|
|
|
QString text = mIgnoreLineEdit->toPlainText();
|
|
|
|
|
QStringList hostStringList = text.split(";");
|
|
|
|
|
proxysettings->set(IGNORE_HOSTS_KEY, QVariant(hostStringList));
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
connect(mAptBtn , &KSwitchButton::stateChanged, this ,[=](bool checked){
|
|
|
|
|
if (checked) {
|
|
|
|
|
emit mEditBtn->click();
|
|
|
|
|
} else { // 关闭APT代理,删除对应的配置文件
|
|
|
|
|
if (QString(qgetenv("http_proxy").data()).isEmpty()) {
|
|
|
|
|
line_7->hide();
|
|
|
|
|
mAPTFrame_2->hide();
|
|
|
|
|
setAptProxy("" ,0 ,false);
|
|
|
|
|
} else {
|
|
|
|
|
QMessageBox *mReboot = new QMessageBox(pluginWidget->topLevelWidget());
|
|
|
|
|
mReboot->setIcon(QMessageBox::Warning);
|
|
|
|
|
mReboot->setText(tr("The apt proxy has been turned off and needs to be restarted to take effect"));
|
|
|
|
|
QPushButton *laterbtn = mReboot->addButton(tr("Reboot Later"), QMessageBox::RejectRole);
|
|
|
|
|
QPushButton *nowbtn = mReboot->addButton(tr("Reboot Now"), QMessageBox::AcceptRole);
|
|
|
|
|
mReboot->exec();
|
|
|
|
|
if (mReboot->clickedButton() == nowbtn) { //选择了立即重启,一秒后系统会重启
|
|
|
|
|
line_7->hide();
|
|
|
|
|
mAPTFrame_2->hide();
|
|
|
|
|
setAptProxy("" ,0 ,false);
|
|
|
|
|
sleep(1);
|
|
|
|
|
reboot();
|
|
|
|
|
} else { //选择了稍后重启,删掉对应文件,但删不了已生效的环境变量
|
|
|
|
|
line_7->hide();
|
|
|
|
|
mAPTFrame_2->hide();
|
|
|
|
|
setAptProxy("" ,0 ,false);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void Proxy::initProxyModeStatus(){
|
|
|
|
|
int mode = _getCurrentProxyMode();
|
|
|
|
|
QHash<QString, QVariant> mAptinfo = getAptProxy();
|
|
|
|
|
|
|
|
|
|
mAutoBtn->blockSignals(true);
|
|
|
|
|
mManualBtn->blockSignals(true);
|
|
|
|
|
mAptBtn->blockSignals(true);
|
|
|
|
|
mEnableBtn->blockSignals(true);
|
|
|
|
|
|
|
|
|
|
if (mode == AUTO){
|
|
|
|
|
mEnableBtn->setChecked(true);
|
|
|
|
|
mAutoBtn->setChecked(true);
|
|
|
|
|
} else if (mode == MANUAL){
|
|
|
|
|
mEnableBtn->setChecked(true);
|
|
|
|
|
mManualBtn->setChecked(true);
|
|
|
|
|
} else{
|
|
|
|
|
mEnableBtn->setChecked(false);
|
|
|
|
|
mAutoBtn->setChecked(false);
|
|
|
|
|
mManualBtn->setChecked(false);
|
|
|
|
|
mSelectFrame->setVisible(false);
|
|
|
|
|
line_8->setVisible(false);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (QFile::exists("/etc/apt/ota_version")) {
|
|
|
|
|
mAPTFrame->hide();
|
|
|
|
|
mAptProxyLabel->hide();
|
|
|
|
|
} else {
|
|
|
|
|
if (mAptinfo["open"].toBool()) {
|
|
|
|
|
mAptBtn->setChecked(true);
|
|
|
|
|
mAPTHostLabel_2->setText(mAptinfo["ip"].toString());
|
|
|
|
|
mAPTPortLabel_2->setText(mAptinfo["port"].toString());
|
|
|
|
|
} else {
|
|
|
|
|
mAptBtn->setChecked(false);
|
|
|
|
|
line_7->setVisible(false);
|
|
|
|
|
mAPTFrame_2->setVisible(false);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
mAutoBtn->blockSignals(false);
|
|
|
|
|
mManualBtn->blockSignals(false);
|
|
|
|
|
mAptBtn->blockSignals(false);
|
|
|
|
|
mEnableBtn->blockSignals(false);
|
|
|
|
|
|
|
|
|
|
_setSensitivity();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void Proxy::initAutoProxyStatus(){
|
|
|
|
|
|
|
|
|
|
mUrlLineEdit->blockSignals(true);
|
|
|
|
|
//设置当前url
|
|
|
|
|
QString urlString = proxysettings->get(PROXY_AUTOCONFIG_URL_KEY).toString();
|
|
|
|
|
mUrlLineEdit->setText(urlString);
|
|
|
|
|
|
|
|
|
|
mUrlLineEdit->blockSignals(false);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void Proxy::initManualProxyStatus(){
|
|
|
|
|
//信号阻塞
|
|
|
|
|
mHTTPLineEdit_1->blockSignals(true);
|
|
|
|
|
mHTTPSLineEdit_1->blockSignals(true);
|
|
|
|
|
mFTPLineEdit_1->blockSignals(true);
|
|
|
|
|
mSOCKSLineEdit_1->blockSignals(true);
|
|
|
|
|
|
|
|
|
|
mHTTPLineEdit_2->blockSignals(true);
|
|
|
|
|
mHTTPSLineEdit_2->blockSignals(true);
|
|
|
|
|
mFTPLineEdit_2->blockSignals(true);
|
|
|
|
|
mSOCKSLineEdit_2->blockSignals(true);
|
|
|
|
|
|
|
|
|
|
//HTTP
|
|
|
|
|
QString httphost = httpsettings->get(PROXY_HOST_KEY).toString();
|
|
|
|
|
mHTTPLineEdit_1->setText(httphost);
|
|
|
|
|
int httpport = httpsettings->get(PROXY_PORT_KEY).toInt();
|
|
|
|
|
mHTTPLineEdit_2->setText(QString::number(httpport));
|
|
|
|
|
|
|
|
|
|
//HTTPS
|
|
|
|
|
QString httpshost = securesettings->get(PROXY_HOST_KEY).toString();
|
|
|
|
|
mHTTPSLineEdit_1->setText(httpshost);
|
|
|
|
|
int httpsport = securesettings->get(PROXY_PORT_KEY).toInt();
|
|
|
|
|
mHTTPSLineEdit_2->setText(QString::number(httpsport));
|
|
|
|
|
|
|
|
|
|
//FTP
|
|
|
|
|
QString ftphost = ftpsettings->get(PROXY_HOST_KEY).toString();
|
|
|
|
|
mFTPLineEdit_1->setText(ftphost);
|
|
|
|
|
int ftppost = ftpsettings->get(PROXY_PORT_KEY).toInt();
|
|
|
|
|
mFTPLineEdit_2->setText(QString::number(ftppost));
|
|
|
|
|
|
|
|
|
|
//SOCKS
|
|
|
|
|
QString sockshost = sockssettings->get(PROXY_HOST_KEY).toString();
|
|
|
|
|
mSOCKSLineEdit_1->setText(sockshost);
|
|
|
|
|
int socksport = sockssettings->get(PROXY_PORT_KEY).toInt();
|
|
|
|
|
mSOCKSLineEdit_2->setText(QString::number(socksport));
|
|
|
|
|
|
|
|
|
|
//解除信号阻塞
|
|
|
|
|
mHTTPLineEdit_1->blockSignals(false);
|
|
|
|
|
mHTTPSLineEdit_1->blockSignals(false);
|
|
|
|
|
mFTPLineEdit_1->blockSignals(false);
|
|
|
|
|
mSOCKSLineEdit_1->blockSignals(false);
|
|
|
|
|
|
|
|
|
|
mHTTPLineEdit_2->blockSignals(false);
|
|
|
|
|
mHTTPSLineEdit_2->blockSignals(false);
|
|
|
|
|
mFTPLineEdit_2->blockSignals(false);
|
|
|
|
|
mSOCKSLineEdit_2->blockSignals(false);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void Proxy::initIgnoreHostStatus(){
|
|
|
|
|
mIgnoreLineEdit->blockSignals(true);
|
|
|
|
|
|
|
|
|
|
//设置当前ignore host
|
|
|
|
|
QStringList ignorehost = proxysettings->get(IGNORE_HOSTS_KEY).toStringList();
|
|
|
|
|
mIgnoreLineEdit->setPlainText(ignorehost.join(";"));
|
|
|
|
|
|
|
|
|
|
mIgnoreLineEdit->blockSignals(false);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void Proxy::initDbus()
|
|
|
|
|
{
|
|
|
|
|
m_appProxyDbus = new QDBusInterface("org.ukui.SettingsDaemon",
|
|
|
|
|
"/org/ukui/SettingsDaemon/AppProxy",
|
|
|
|
|
"org.ukui.SettingsDaemon.AppProxy",
|
|
|
|
|
QDBusConnection::sessionBus());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void Proxy::initAppProxyStatus()
|
|
|
|
|
{
|
|
|
|
|
bool state = getAppProxyState();
|
|
|
|
|
m_appEnableBtn->setChecked(state);
|
|
|
|
|
onappProxyEnableChanged(state);
|
|
|
|
|
|
|
|
|
|
appProxyInfoPadding();
|
|
|
|
|
// m_cancelBtn->setEnabled(false);
|
|
|
|
|
// m_saveBtn->setEnabled(false);
|
|
|
|
|
appListPadding();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
int Proxy::_getCurrentProxyMode(){
|
|
|
|
|
GSettings * proxygsettings;
|
|
|
|
|
proxygsettings = g_settings_new(PROXY_SCHEMA);
|
|
|
|
|
int mode = g_settings_get_enum(proxygsettings, PROXY_MODE_KEY);
|
|
|
|
|
g_object_unref(proxygsettings);
|
|
|
|
|
|
|
|
|
|
return mode;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void Proxy::_setSensitivity(){
|
|
|
|
|
//自动配置代理界面敏感性
|
|
|
|
|
bool autoChecked = mAutoBtn->isChecked();
|
|
|
|
|
mUrlFrame->setVisible(autoChecked);
|
|
|
|
|
line_1->setVisible(autoChecked);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//手动配置代理界面敏感性
|
|
|
|
|
bool manualChecked = mManualBtn->isChecked();
|
|
|
|
|
mHTTPFrame->setVisible(manualChecked);
|
|
|
|
|
mHTTPSFrame->setVisible(manualChecked);
|
|
|
|
|
mFTPFrame->setVisible(manualChecked);
|
|
|
|
|
mSOCKSFrame->setVisible(manualChecked);
|
|
|
|
|
mIgnoreFrame->setVisible(manualChecked);
|
|
|
|
|
line_2->setVisible(manualChecked);
|
|
|
|
|
line_3->setVisible(manualChecked);
|
|
|
|
|
line_4->setVisible(manualChecked);
|
|
|
|
|
line_5->setVisible(manualChecked);
|
|
|
|
|
line_6->setVisible(manualChecked);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void Proxy::setAptProxy(QString host, QString port, bool status)
|
|
|
|
|
{
|
|
|
|
|
QDBusInterface *mAptproxyDbus = new QDBusInterface("com.control.center.qt.systemdbus",
|
|
|
|
|
"/",
|
|
|
|
|
"com.control.center.interface",
|
|
|
|
|
QDBusConnection::systemBus());
|
|
|
|
|
if (mAptproxyDbus->isValid())
|
|
|
|
|
QDBusReply<bool> reply = mAptproxyDbus->call("setaptproxy", host, port , status);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
QHash<QString, QVariant> Proxy::getAptProxy()
|
|
|
|
|
{
|
|
|
|
|
QHash<QString, QVariant> mAptInfo;
|
|
|
|
|
QDBusInterface *mAptproxyDbus = new QDBusInterface("com.control.center.qt.systemdbus",
|
|
|
|
|
"/",
|
|
|
|
|
"com.control.center.interface",
|
|
|
|
|
QDBusConnection::systemBus());
|
|
|
|
|
if (mAptproxyDbus->isValid()) {
|
|
|
|
|
QDBusMessage result = mAptproxyDbus->call("getaptproxy");
|
|
|
|
|
|
|
|
|
|
QList<QVariant> outArgs = result.arguments();
|
|
|
|
|
QVariant first = outArgs.at(0);
|
|
|
|
|
QDBusArgument dbvFirst = first.value<QDBusArgument>();
|
|
|
|
|
QVariant vFirst = dbvFirst.asVariant();
|
|
|
|
|
const QDBusArgument &dbusArgs = vFirst.value<QDBusArgument>();
|
|
|
|
|
|
|
|
|
|
QVector<AptInfo> aptinfo;
|
|
|
|
|
|
|
|
|
|
dbusArgs.beginArray();
|
|
|
|
|
while (!dbusArgs.atEnd()) {
|
|
|
|
|
AptInfo info;
|
|
|
|
|
dbusArgs >> info;
|
|
|
|
|
aptinfo.push_back(info);
|
|
|
|
|
}
|
|
|
|
|
dbusArgs.endArray();
|
|
|
|
|
|
|
|
|
|
for (AptInfo it : aptinfo) {
|
|
|
|
|
mAptInfo.insert(it.arg, it.out.variant());
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return mAptInfo;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void Proxy::setAptInfo()
|
|
|
|
|
{
|
|
|
|
|
QMessageBox *mReboot = new QMessageBox(pluginWidget->topLevelWidget());
|
|
|
|
|
mReboot->setIcon(QMessageBox::Warning);
|
|
|
|
|
mReboot->setText(tr("The system needs to be restarted to set the Apt proxy, whether to reboot"));
|
|
|
|
|
QPushButton *laterbtn = mReboot->addButton(tr("Reboot Later"), QMessageBox::RejectRole);
|
|
|
|
|
QPushButton *nowbtn = mReboot->addButton(tr("Reboot Now"), QMessageBox::AcceptRole);
|
|
|
|
|
mReboot->exec();
|
|
|
|
|
if (mReboot->clickedButton() == nowbtn) { //选择了立即重启,一秒后系统会重启
|
|
|
|
|
sleep(1);
|
|
|
|
|
reboot();
|
|
|
|
|
} else { //选择了稍后重启或点击了关闭按钮,配置文件已写入,但是/etc/profile.d目录下新增的脚本文件未执行
|
|
|
|
|
line_7->show();
|
|
|
|
|
mAPTFrame_2->show();
|
|
|
|
|
mAPTHostLabel_2->setText(getAptProxy()["ip"].toString());
|
|
|
|
|
mAPTPortLabel_2->setText(getAptProxy()["port"].toString());
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void Proxy::reboot()
|
|
|
|
|
{
|
|
|
|
|
QDBusInterface *rebootDbus = new QDBusInterface("org.gnome.SessionManager",
|
|
|
|
|
"/org/gnome/SessionManager",
|
|
|
|
|
"org.gnome.SessionManager",
|
|
|
|
|
QDBusConnection::sessionBus());
|
|
|
|
|
|
|
|
|
|
rebootDbus->call("reboot");
|
|
|
|
|
delete rebootDbus;
|
|
|
|
|
rebootDbus = nullptr;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void Proxy::setFrame_Noframe(QFrame *frame)
|
|
|
|
|
{
|
|
|
|
|
frame->setMinimumSize(QSize(550, 60));
|
|
|
|
|
frame->setMaximumSize(QSize(16777215, 60));
|
|
|
|
|
frame->setFrameShape(QFrame::NoFrame);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
QFrame *Proxy::setLine(QFrame *frame)
|
|
|
|
|
{
|
|
|
|
|
QFrame *line = new QFrame(frame);
|
|
|
|
|
line->setMinimumSize(QSize(0, 1));
|
|
|
|
|
line->setMaximumSize(QSize(16777215, 1));
|
|
|
|
|
line->setLineWidth(0);
|
|
|
|
|
line->setFrameShape(QFrame::HLine);
|
|
|
|
|
line->setFrameShadow(QFrame::Sunken);
|
|
|
|
|
return line;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
bool Proxy::getAppProxyState()
|
|
|
|
|
{
|
|
|
|
|
bool state = true;
|
|
|
|
|
if(!m_appProxyDbus->isValid()) {
|
|
|
|
|
qWarning ()<< "init AppProxy dbus error";
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//获取应用代理开启状态
|
|
|
|
|
qDebug() << "call QDBusInterface getProxyStateDbus";
|
2022-09-26 17:31:00 +08:00
|
|
|
|
QDBusReply<bool> reply = m_appProxyDbus->call("getProxyStateDbus");
|
2022-10-13 11:41:56 +08:00
|
|
|
|
|
|
|
|
|
if (!reply.isValid()) {
|
|
|
|
|
return -1;
|
|
|
|
|
}
|
2022-09-26 17:31:00 +08:00
|
|
|
|
state = reply;
|
2022-10-13 11:41:56 +08:00
|
|
|
|
|
2022-09-24 17:08:28 +08:00
|
|
|
|
return state;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void Proxy::setAppProxyState(bool state)
|
|
|
|
|
{
|
|
|
|
|
if(!m_appProxyDbus->isValid()) {
|
|
|
|
|
qWarning ()<< "init AppProxy dbus error";
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//设置应用代理开启状态
|
|
|
|
|
qDebug() << "call QDBusInterface setProxyStateDbus" << state;
|
2022-09-26 17:31:00 +08:00
|
|
|
|
m_appProxyDbus->call("setProxyStateDbus", state);
|
2022-09-24 17:08:28 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
QStringList Proxy::getAppProxyConf()
|
|
|
|
|
{
|
|
|
|
|
QStringList info;
|
|
|
|
|
info.clear();
|
|
|
|
|
|
|
|
|
|
QDBusInterface dbusInterface("org.ukui.SettingsDaemon",
|
|
|
|
|
"/org/ukui/SettingsDaemon/AppProxy",
|
|
|
|
|
"org.ukui.SettingsDaemon.AppProxy",
|
|
|
|
|
QDBusConnection::sessionBus());
|
|
|
|
|
|
|
|
|
|
if(!dbusInterface.isValid()) {
|
|
|
|
|
qWarning ()<< "init AppProxy dbus error";
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//获取应用代理配置信息
|
|
|
|
|
qDebug() << "call QDBusInterface getProxyConfig";
|
|
|
|
|
QDBusReply<QStringList> reply = dbusInterface.call("getProxyConfig");
|
2022-10-13 11:41:56 +08:00
|
|
|
|
|
|
|
|
|
if (!reply.isValid()) {
|
|
|
|
|
qWarning ()<< "Return empty app proxy information, getProxyConfig reply is invalid";
|
|
|
|
|
return info;
|
|
|
|
|
}
|
|
|
|
|
|
2022-09-24 17:08:28 +08:00
|
|
|
|
info = reply.value();
|
|
|
|
|
|
|
|
|
|
if (info.isEmpty()) {
|
|
|
|
|
qWarning() << "getAppProxyConf reply is empty";
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return info;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void Proxy::setAppProxyConf(QStringList list)
|
|
|
|
|
{
|
|
|
|
|
if (list.count() < 3) {
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if(!m_appProxyDbus->isValid()) {
|
|
|
|
|
qWarning ()<< "init AppProxy dbus error";
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//写入应用代理配置信息
|
|
|
|
|
qDebug() << "call QDBusInterface setProxyConfig";
|
|
|
|
|
m_appProxyDbus->call("setProxyConfig", list);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
QMap<QString, QStringList> Proxy::getAppListProxy()
|
|
|
|
|
{
|
|
|
|
|
QMap<QString, QStringList> appList;
|
|
|
|
|
appList.clear();
|
|
|
|
|
|
2022-10-13 11:41:56 +08:00
|
|
|
|
QDBusInterface dbusInterface("org.ukui.SettingsDaemon",
|
2022-09-24 17:08:28 +08:00
|
|
|
|
"/org/ukui/SettingsDaemon/AppProxy",
|
|
|
|
|
"org.ukui.SettingsDaemon.AppProxy",
|
|
|
|
|
QDBusConnection::sessionBus());
|
|
|
|
|
|
2022-10-13 11:41:56 +08:00
|
|
|
|
if(!dbusInterface.isValid()) {
|
2022-09-24 17:08:28 +08:00
|
|
|
|
qWarning ()<< "init AppProxy dbus error";
|
2022-10-13 11:41:56 +08:00
|
|
|
|
return appList;
|
2022-09-24 17:08:28 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//获取可以配置应用代理的应用信息
|
|
|
|
|
qDebug() << "call QDBusInterface getAppProxy";
|
2022-10-13 11:41:56 +08:00
|
|
|
|
QDBusReply<QMap<QString, QStringList>> reply = dbusInterface.call("getAppProxy");
|
|
|
|
|
|
|
|
|
|
if (!reply.isValid()) {
|
|
|
|
|
qWarning ()<< "Return empty app list, getAppProxy reply is invalid";
|
|
|
|
|
return appList;
|
|
|
|
|
}
|
|
|
|
|
|
2022-09-24 17:08:28 +08:00
|
|
|
|
appList = reply.value();
|
|
|
|
|
if (appList.isEmpty()) {
|
|
|
|
|
qWarning() << "getAppProxy reply appList is empty";
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return appList;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#if 0
|
|
|
|
|
bool Proxy::checkIsChanged(QStringList info)
|
|
|
|
|
{
|
|
|
|
|
bool isChanged = false;
|
|
|
|
|
info = getAppProxyConf();
|
|
|
|
|
if (info.value(0) != m_proxyTypeComboBox->currentText()
|
|
|
|
|
|| info.value(1) != m_ipAddressLineEdit->text()
|
|
|
|
|
|| info.value(2) != m_portLineEdit->text()
|
|
|
|
|
|| info.value(3) != m_userNameLineEdit->text()
|
|
|
|
|
|| info.value(4) != m_pwdLineEdit->text()) {
|
|
|
|
|
|
|
|
|
|
isChanged = true; //如果在代理界面相关信息已修改,则返回true
|
|
|
|
|
}
|
|
|
|
|
return isChanged;
|
|
|
|
|
}
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
void Proxy::setAppProxyFrameUi(QWidget *widget)
|
|
|
|
|
{
|
|
|
|
|
//应用代理模块
|
|
|
|
|
m_appProxyFrame = new QFrame(widget);
|
|
|
|
|
m_appProxyFrame->setMinimumSize(QSize(550, 0));
|
|
|
|
|
m_appProxyFrame->setMaximumSize(QSize(16777215, 16777215));
|
|
|
|
|
m_appProxyFrame->setFrameShape(QFrame::Box);
|
|
|
|
|
|
|
|
|
|
QVBoxLayout *appProxyLayout = new QVBoxLayout(m_appProxyFrame);
|
|
|
|
|
appProxyLayout->setContentsMargins(0, 0, 0, 0);
|
|
|
|
|
appProxyLayout->setSpacing(0);
|
|
|
|
|
|
|
|
|
|
//开启ui布局
|
|
|
|
|
m_appEnableFrame = new QFrame(m_appProxyFrame);
|
|
|
|
|
setFrame_Noframe(m_appEnableFrame);
|
|
|
|
|
m_appEnableLabel = new QLabel(tr("Open"), m_appEnableFrame);
|
|
|
|
|
m_appEnableBtn = new KSwitchButton(m_appEnableFrame);
|
|
|
|
|
m_appEnableBtn->setCheckable(true);
|
|
|
|
|
QHBoxLayout *appEnableLayout = new QHBoxLayout(m_appEnableFrame);
|
|
|
|
|
appEnableLayout->setContentsMargins(FRAME_LAYOUT_MARGINS);
|
|
|
|
|
appEnableLayout->addWidget(m_appEnableLabel);
|
|
|
|
|
appEnableLayout->addStretch();
|
|
|
|
|
appEnableLayout->addWidget(m_appEnableBtn);
|
|
|
|
|
|
|
|
|
|
//代理类型ui布局
|
|
|
|
|
m_proxyTypeFrame = new QFrame(m_appProxyFrame);
|
|
|
|
|
setFrame_Noframe(m_proxyTypeFrame);
|
|
|
|
|
m_proxyTypeLabel = new QLabel(tr("Proxy type"), m_proxyTypeFrame);
|
|
|
|
|
m_proxyTypeLabel->setFixedWidth(LABEL_WIDTH);
|
|
|
|
|
m_proxyTypeComboBox = new QComboBox(m_proxyTypeFrame);
|
|
|
|
|
QHBoxLayout *proxyTypeLayout = new QHBoxLayout(m_proxyTypeFrame);
|
|
|
|
|
proxyTypeLayout->setContentsMargins(FRAME_LAYOUT_MARGINS);
|
|
|
|
|
proxyTypeLayout->setSpacing(FRAME_LAYOUT_SPACING);
|
|
|
|
|
proxyTypeLayout->addWidget(m_proxyTypeLabel);
|
|
|
|
|
proxyTypeLayout->addWidget(m_proxyTypeComboBox);
|
|
|
|
|
m_proxyTypeComboBox->addItem(tr("http")); //http
|
|
|
|
|
m_proxyTypeComboBox->addItem(tr("socks4")); //socks4
|
|
|
|
|
m_proxyTypeComboBox->addItem(tr("socks5")); //socks4
|
|
|
|
|
|
|
|
|
|
//IP地址ui布局
|
|
|
|
|
m_ipAddressFrame = new QFrame(m_appProxyFrame);
|
|
|
|
|
m_ipAddressFrame->setMinimumSize(QSize(550, 60));
|
|
|
|
|
m_ipAddressFrame->setMaximumSize(QSize(16777215, 88));
|
|
|
|
|
m_ipAddressFrame->setFrameShape(QFrame::NoFrame);
|
|
|
|
|
m_ipAddressLabel = new QLabel(tr("IP address"), m_ipAddressFrame);
|
|
|
|
|
m_ipAddressLabel->setFixedWidth(LABEL_WIDTH);
|
|
|
|
|
m_ipHintsLabel = new QLabel(m_ipAddressFrame);
|
|
|
|
|
m_ipHintsLabel->setContentsMargins(8, 0, 0, 0);
|
|
|
|
|
m_ipAddressLineEdit = new QLineEdit(m_ipAddressFrame);
|
|
|
|
|
m_ipAddressLineEdit->setFixedHeight(LINE_EDIT_HEIGHT);
|
|
|
|
|
m_ipAddressLineEdit->setPlaceholderText(tr("Required")); //必填
|
|
|
|
|
|
|
|
|
|
QWidget *ipInputWidget = new QWidget(m_ipAddressFrame);
|
|
|
|
|
QVBoxLayout *ipVLayout = new QVBoxLayout(ipInputWidget);
|
|
|
|
|
ipVLayout->setContentsMargins(0, 0, 0, 0);
|
|
|
|
|
ipVLayout->setSpacing(3);
|
|
|
|
|
ipVLayout->addWidget(m_ipAddressLineEdit);
|
|
|
|
|
ipVLayout->addWidget(m_ipHintsLabel);
|
|
|
|
|
|
|
|
|
|
QFormLayout *ipAddressLayout = new QFormLayout(m_ipAddressFrame);
|
|
|
|
|
ipAddressLayout->setContentsMargins(16, 12, 16, 12);
|
|
|
|
|
ipAddressLayout->setSpacing(FRAME_LAYOUT_SPACING);
|
|
|
|
|
ipAddressLayout->addRow(m_ipAddressLabel, ipInputWidget);
|
|
|
|
|
|
|
|
|
|
// IP的正则格式限制
|
|
|
|
|
QRegExp rx("\\b(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\b");
|
|
|
|
|
m_ipAddressLineEdit->setValidator(new QRegExpValidator(rx, this));
|
|
|
|
|
//无效的IP地址提示
|
|
|
|
|
QPalette hintTextColor;
|
|
|
|
|
hintTextColor.setColor(QPalette::WindowText, Qt::red);
|
|
|
|
|
m_ipHintsLabel->setPalette(hintTextColor);
|
|
|
|
|
m_ipHintsLabel->setText(tr("Invalid IP Address"));
|
|
|
|
|
m_ipHintsLabel->hide();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//端口ui布局
|
|
|
|
|
m_portFrame = new QFrame(m_appProxyFrame);
|
|
|
|
|
setFrame_Noframe(m_portFrame);
|
|
|
|
|
m_portLabel = new QLabel(tr("Port"), m_portFrame);
|
|
|
|
|
m_portLabel->setFixedWidth(LABEL_WIDTH);
|
|
|
|
|
m_portLineEdit = new QLineEdit(m_portFrame);
|
|
|
|
|
m_portLineEdit->setPlaceholderText(tr("Required")); //必填
|
|
|
|
|
m_portLineEdit->setValidator(new QRegExpValidator(QRegExp("[0-9]*") , this));
|
|
|
|
|
QHBoxLayout *portLayout = new QHBoxLayout(m_portFrame);
|
|
|
|
|
portLayout->setContentsMargins(FRAME_LAYOUT_MARGINS);
|
|
|
|
|
portLayout->setSpacing(FRAME_LAYOUT_SPACING);
|
|
|
|
|
portLayout->addWidget(m_portLabel);
|
|
|
|
|
portLayout->addWidget(m_portLineEdit);
|
|
|
|
|
|
|
|
|
|
//用户名ui布局
|
|
|
|
|
m_userNameFrame = new QFrame(m_appProxyFrame);
|
|
|
|
|
setFrame_Noframe(m_userNameFrame);
|
|
|
|
|
m_userNameLabel = new QLabel(tr("Username"), m_userNameFrame);
|
|
|
|
|
m_userNameLabel->setFixedWidth(LABEL_WIDTH);
|
|
|
|
|
m_userNameLineEdit = new QLineEdit(m_userNameFrame);
|
|
|
|
|
m_userNameLineEdit->setPlaceholderText(tr("Optional")); //选填
|
|
|
|
|
QHBoxLayout *userNameLayout = new QHBoxLayout(m_userNameFrame);
|
|
|
|
|
userNameLayout->setContentsMargins(FRAME_LAYOUT_MARGINS);
|
|
|
|
|
userNameLayout->setSpacing(FRAME_LAYOUT_SPACING);
|
|
|
|
|
userNameLayout->addWidget(m_userNameLabel);
|
|
|
|
|
userNameLayout->addWidget(m_userNameLineEdit);
|
|
|
|
|
|
|
|
|
|
//密码ui布局
|
|
|
|
|
m_pwdFrame = new QFrame(m_appProxyFrame);
|
|
|
|
|
setFrame_Noframe(m_pwdFrame);
|
|
|
|
|
m_pwdLabel = new QLabel(tr("Password"), m_pwdFrame);
|
|
|
|
|
m_pwdLabel->setFixedWidth(LABEL_WIDTH);
|
|
|
|
|
m_pwdLineEdit = new KPasswordEdit(m_pwdFrame);
|
|
|
|
|
m_pwdLineEdit->setClearButtonEnabled(false);
|
|
|
|
|
QString str = tr("Optional");
|
|
|
|
|
m_pwdLineEdit->setPlaceholderText(str); //选填
|
|
|
|
|
|
|
|
|
|
QHBoxLayout *pwdLayout = new QHBoxLayout(m_pwdFrame);
|
|
|
|
|
pwdLayout->setContentsMargins(FRAME_LAYOUT_MARGINS);
|
|
|
|
|
pwdLayout->setSpacing(FRAME_LAYOUT_SPACING);
|
|
|
|
|
pwdLayout->addWidget(m_pwdLabel);
|
|
|
|
|
pwdLayout->addWidget(m_pwdLineEdit);
|
|
|
|
|
|
|
|
|
|
QRegExp rxPwd("^[A-Za-z0-9`~!@#$%^&*()_-+=<>,.\\\/]+$");
|
|
|
|
|
QRegExpValidator *latitude = new QRegExpValidator(rxPwd, this);
|
|
|
|
|
m_pwdLineEdit->setValidator(latitude);
|
|
|
|
|
|
|
|
|
|
#if 0
|
|
|
|
|
//按钮ui布局
|
|
|
|
|
m_appBtnFrame = new QFrame(m_appProxyFrame);
|
|
|
|
|
setFrame_Noframe(m_appBtnFrame);
|
|
|
|
|
m_cancelBtn = new QPushButton(m_appBtnFrame);
|
|
|
|
|
m_saveBtn = new QPushButton(m_appBtnFrame);
|
|
|
|
|
m_cancelBtn->setText(tr("Cancel"));
|
|
|
|
|
m_saveBtn->setText(tr("Save"));
|
|
|
|
|
|
|
|
|
|
QHBoxLayout *btnLayout = new QHBoxLayout(m_appBtnFrame);
|
|
|
|
|
btnLayout->setContentsMargins(FRAME_LAYOUT_MARGINS);
|
|
|
|
|
btnLayout->setSpacing(16);
|
|
|
|
|
btnLayout->addStretch();
|
|
|
|
|
btnLayout->addWidget(m_cancelBtn);
|
|
|
|
|
btnLayout->addWidget(m_saveBtn);
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
//分隔线
|
|
|
|
|
m_appLine1 = setLine(m_appProxyFrame);
|
|
|
|
|
m_appLine2 = setLine(m_appProxyFrame);
|
|
|
|
|
m_appLine3 = setLine(m_appProxyFrame);
|
|
|
|
|
m_appLine4 = setLine(m_appProxyFrame);
|
|
|
|
|
m_appLine5 = setLine(m_appProxyFrame);
|
|
|
|
|
|
|
|
|
|
appProxyLayout->addWidget(m_appEnableFrame);
|
|
|
|
|
appProxyLayout->addWidget(m_appLine1);
|
|
|
|
|
appProxyLayout->addWidget(m_proxyTypeFrame);
|
|
|
|
|
appProxyLayout->addWidget(m_appLine2);
|
|
|
|
|
appProxyLayout->addWidget(m_ipAddressFrame);
|
|
|
|
|
appProxyLayout->addWidget(m_appLine3);
|
|
|
|
|
appProxyLayout->addWidget(m_portFrame);
|
|
|
|
|
appProxyLayout->addWidget(m_appLine4);
|
|
|
|
|
appProxyLayout->addWidget(m_userNameFrame);
|
|
|
|
|
appProxyLayout->addWidget(m_appLine5);
|
|
|
|
|
appProxyLayout->addWidget(m_pwdFrame);
|
|
|
|
|
// appProxyLayout->addWidget(line5);
|
|
|
|
|
// appProxyLayout->addWidget(m_appBtnFrame);
|
|
|
|
|
|
|
|
|
|
connect(m_appEnableBtn, &KSwitchButton::stateChanged, this, &Proxy::onappProxyEnableChanged);
|
|
|
|
|
connect(m_appEnableBtn, &KSwitchButton::stateChanged, this, &Proxy::setAppProxyState);
|
|
|
|
|
connect(m_proxyTypeComboBox, SIGNAL(currentTextChanged(QString)), this, SLOT(onAppProxyConfChanged()));
|
|
|
|
|
connect(m_ipAddressLineEdit, SIGNAL(textChanged(QString)), this, SLOT(onipEditStateChanged()));
|
|
|
|
|
connect(m_ipAddressLineEdit, SIGNAL(textChanged(QString)), this, SLOT(onAppProxyConfChanged()));
|
|
|
|
|
connect(m_portLineEdit, SIGNAL(textChanged(QString)), this, SLOT(onAppProxyConfChanged()));
|
|
|
|
|
connect(m_userNameLineEdit, SIGNAL(textChanged(QString)), this, SLOT(onAppProxyConfChanged()));
|
|
|
|
|
connect(m_pwdLineEdit, SIGNAL(textChanged(QString)), this, SLOT(onAppProxyConfChanged()));
|
|
|
|
|
connect(m_ipAddressLineEdit, SIGNAL(textChanged(QString)), this, SLOT(onAppProxyConfChanged()));
|
|
|
|
|
|
|
|
|
|
connect(m_proxyTypeComboBox, SIGNAL(currentTextChanged(QString)), this, SLOT(onAppProxyConfEditFinished()));
|
|
|
|
|
connect(m_ipAddressLineEdit, SIGNAL(editingFinished()), this, SLOT(onAppProxyConfEditFinished()));
|
|
|
|
|
connect(m_portLineEdit, SIGNAL(editingFinished()), this, SLOT(onAppProxyConfEditFinished()));
|
|
|
|
|
connect(m_userNameLineEdit, SIGNAL(editingFinished()), this, SLOT(onAppProxyConfEditFinished()));
|
|
|
|
|
connect(m_pwdLineEdit, SIGNAL(editingFinished()), this, SLOT(onAppProxyConfEditFinished()));
|
|
|
|
|
// connect(m_cancelBtn, SIGNAL(clicked()), this, SLOT(onCancelBtnClicked()));
|
|
|
|
|
// connect(m_saveBtn, SIGNAL(clicked()), this, SLOT(onSaveBtnClicked()));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void Proxy::setAppListFrameUi(QWidget *widget)
|
|
|
|
|
{
|
|
|
|
|
//应用列表
|
|
|
|
|
m_appListFrame = new QFrame(widget);
|
|
|
|
|
m_appListFrame->setMinimumSize(QSize(550, 0));
|
|
|
|
|
m_appListFrame->setMaximumSize(QSize(16777215, 336));
|
|
|
|
|
m_appListFrame->setFrameShape(QFrame::Box);
|
|
|
|
|
QVBoxLayout *appListLayout = new QVBoxLayout(m_appListFrame);
|
|
|
|
|
appListLayout->setContentsMargins(16, 23, 16, 16);
|
|
|
|
|
appListLayout->setSpacing(16);
|
|
|
|
|
|
|
|
|
|
m_allowAppProxyLabel = new QLabel(m_appListFrame);
|
|
|
|
|
m_allowAppProxyLabel->setText(tr("The following applications are allowed to use this configuration:")); //允许以下应用使用该配置:
|
|
|
|
|
m_appListWidget = new QListWidget(m_appListFrame);
|
|
|
|
|
m_appListWidget->setMinimumHeight(240);
|
|
|
|
|
m_appListWidget->setBackgroundRole(QPalette::Base);
|
|
|
|
|
m_appListWidget->setFocusPolicy(Qt::FocusPolicy::NoFocus);
|
|
|
|
|
m_appListWidget->setFrameShape(QFrame::Shape::Panel);
|
|
|
|
|
|
|
|
|
|
appListLayout->addWidget(m_allowAppProxyLabel);
|
|
|
|
|
appListLayout->addWidget(m_appListWidget);
|
|
|
|
|
|
|
|
|
|
QPalette mpal(m_appListWidget->palette());
|
|
|
|
|
mpal.setColor(QPalette::Base, qApp->palette().base().color());
|
|
|
|
|
mpal.setColor(QPalette::AlternateBase, qApp->palette().alternateBase().color());
|
|
|
|
|
m_appListWidget->setAlternatingRowColors(true);
|
|
|
|
|
m_appListWidget->setPalette(mpal);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void Proxy::appProxyInfoPadding()
|
|
|
|
|
{
|
|
|
|
|
QStringList proxyInfo;
|
|
|
|
|
proxyInfo.clear();
|
|
|
|
|
proxyInfo = getAppProxyConf();
|
|
|
|
|
|
|
|
|
|
m_proxyTypeComboBox->setCurrentText(proxyInfo.value(0));
|
|
|
|
|
m_ipAddressLineEdit->setText(proxyInfo.value(1));
|
|
|
|
|
m_portLineEdit->setText(proxyInfo.value(2));
|
|
|
|
|
m_userNameLineEdit->setText(proxyInfo.value(3));
|
|
|
|
|
m_pwdLineEdit->setText(proxyInfo.value(4));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void Proxy::appListPadding()
|
|
|
|
|
{
|
|
|
|
|
QMap<QString, QStringList> appList ;
|
|
|
|
|
appList.clear();
|
|
|
|
|
appList = getAppListProxy(); //获取应用代理配置
|
|
|
|
|
|
|
|
|
|
//遍历应用列表
|
|
|
|
|
for (auto index : appList.keys()) {
|
|
|
|
|
QStringList appInfo = appList.value(index);
|
|
|
|
|
QVariant isChecked = appInfo.value(2);
|
|
|
|
|
bool flag = isChecked.toBool();
|
|
|
|
|
|
|
|
|
|
AppListWidget *appWidget = new AppListWidget(index, m_appListWidget);
|
|
|
|
|
appWidget->setAppName(appInfo.value(0));
|
|
|
|
|
appWidget->setAppIcon(QIcon::fromTheme(appInfo.value(1)).pixmap(24, 24));
|
|
|
|
|
appWidget->setAppChecked(flag);
|
|
|
|
|
|
|
|
|
|
QListWidgetItem *appListWidgetItem = new QListWidgetItem(m_appListWidget);
|
|
|
|
|
appListWidgetItem->setSizeHint(QSize(m_appListWidget->width(),36));
|
|
|
|
|
appListWidgetItem->setFlags(Qt::NoItemFlags);
|
|
|
|
|
m_appListWidget->addItem(appListWidgetItem);
|
|
|
|
|
m_appListWidget->setItemWidget(appListWidgetItem, appWidget);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
bool Proxy::getipEditState(QString text)
|
|
|
|
|
{
|
|
|
|
|
if (text.isEmpty()) {
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
QRegExp rx("\\b(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\b");
|
|
|
|
|
|
|
|
|
|
bool match = false;
|
|
|
|
|
match = rx.exactMatch(text);
|
|
|
|
|
|
|
|
|
|
return match;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void Proxy::onipEditStateChanged()
|
|
|
|
|
{
|
|
|
|
|
if (!getipEditState(m_ipAddressLineEdit->text())) {
|
|
|
|
|
m_ipAddressFrame->setFixedHeight(88);
|
|
|
|
|
m_ipHintsLabel->show();
|
|
|
|
|
} else {
|
|
|
|
|
m_ipHintsLabel->hide();
|
|
|
|
|
m_ipAddressFrame->setFixedHeight(60);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void Proxy::onAppProxyConfChanged()
|
|
|
|
|
{
|
|
|
|
|
if (!getipEditState(m_ipAddressLineEdit->text()) || m_portLineEdit->text().isEmpty()) {
|
|
|
|
|
return;
|
|
|
|
|
qDebug() << "onAppProxyConfChanged return";
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (m_ipAddressLineEdit->text().isEmpty()) {
|
|
|
|
|
return;
|
|
|
|
|
} else {
|
|
|
|
|
m_appProxyInfo.clear();
|
|
|
|
|
m_appProxyInfo.append(m_proxyTypeComboBox->currentText());
|
|
|
|
|
m_appProxyInfo.append(m_ipAddressLineEdit->text());
|
|
|
|
|
m_appProxyInfo.append(m_portLineEdit->text());
|
|
|
|
|
if (!m_userNameLineEdit->text().isEmpty() && !m_pwdLineEdit->text().isEmpty()) {
|
|
|
|
|
m_appProxyInfo.append(m_userNameLineEdit->text());
|
|
|
|
|
m_appProxyInfo.append(m_pwdLineEdit->text());
|
|
|
|
|
} else {
|
|
|
|
|
m_appProxyInfo.append("");
|
|
|
|
|
m_appProxyInfo.append("");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
qDebug() << m_appProxyInfo << Q_FUNC_INFO << __LINE__;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void Proxy::onAppProxyConfEditFinished()
|
|
|
|
|
{
|
|
|
|
|
if (!m_ipAddressLineEdit->hasFocus() && !m_portLineEdit->hasFocus()) {
|
|
|
|
|
setAppProxyConf(m_appProxyInfo);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void Proxy::onappProxyEnableChanged(bool enable)
|
|
|
|
|
{
|
|
|
|
|
m_proxyTypeFrame->setVisible(enable);
|
|
|
|
|
m_ipAddressFrame->setVisible(enable);
|
|
|
|
|
m_portFrame->setVisible(enable);
|
|
|
|
|
m_userNameFrame->setVisible(enable);
|
|
|
|
|
m_pwdFrame->setVisible(enable);
|
|
|
|
|
m_appListFrame->setVisible(enable);
|
|
|
|
|
m_appLine1->setVisible(enable);
|
|
|
|
|
m_appLine2->setVisible(enable);
|
|
|
|
|
m_appLine3->setVisible(enable);
|
|
|
|
|
m_appLine4->setVisible(enable);
|
|
|
|
|
m_appLine5->setVisible(enable);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#if 0
|
|
|
|
|
void Proxy::onCancelBtnClicked()
|
|
|
|
|
{
|
|
|
|
|
appProxyInfoPadding();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void Proxy::onSaveBtnClicked()
|
|
|
|
|
{
|
|
|
|
|
if (!checkIsChanged(m_appProxyInfo)) {
|
|
|
|
|
return;
|
|
|
|
|
} else {
|
|
|
|
|
QStringList conf;
|
|
|
|
|
conf.clear();
|
|
|
|
|
conf.append(m_proxyTypeComboBox->currentText());
|
|
|
|
|
conf.append(m_ipAddressLineEdit->text());
|
|
|
|
|
conf.append(m_portLineEdit->text());
|
|
|
|
|
conf.append(m_userNameLineEdit->text());
|
|
|
|
|
conf.append(m_pwdLineEdit->text());
|
|
|
|
|
setAppProxyConf(conf);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void Proxy::setBtnEnable()
|
|
|
|
|
{
|
|
|
|
|
m_cancelBtn->setEnabled(true);
|
|
|
|
|
|
|
|
|
|
if (getipEditState(m_ipAddressLineEdit->text()) && !m_portLineEdit->text().isEmpty()) {
|
|
|
|
|
if (!m_ipAddressLineEdit->text().isEmpty()) {
|
|
|
|
|
m_saveBtn->setEnabled(true);
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
m_saveBtn->setEnabled(false);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
void Proxy::setAptProxySlot()
|
|
|
|
|
{
|
|
|
|
|
mAptBtn->blockSignals(true);
|
|
|
|
|
QHash<QString, QVariant> preaptinfo = getAptProxy();
|
|
|
|
|
bool prestatus = preaptinfo["open"].toBool();
|
|
|
|
|
AptProxyDialog *mwindow = new AptProxyDialog(pluginWidget);
|
|
|
|
|
mwindow->exec();
|
|
|
|
|
if (getAptProxy()["open"].toBool() && !prestatus) { // open值为true,用户点击了确定按钮,进行配置文件的写入,提示用户重启系统
|
|
|
|
|
setAptInfo();
|
|
|
|
|
}
|
|
|
|
|
if (getAptProxy()["open"].toBool() && prestatus) {
|
|
|
|
|
if (getAptProxy()["ip"].toString() == preaptinfo["ip"].toString() && getAptProxy()["port"].toString() == preaptinfo["port"].toString() && prestatus){ //点击了编辑按钮,且在设置IP和端口号的弹窗中,点击了取消或者关闭按钮
|
|
|
|
|
line_7->show();
|
|
|
|
|
mAPTFrame_2->show();
|
|
|
|
|
} else {
|
|
|
|
|
setAptInfo();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if(!getAptProxy()["open"].toBool() && !prestatus){ // 点击了APT开关按钮,但是在设置IP和端口号的弹窗中,点击了取消或者关闭按钮
|
|
|
|
|
mAptBtn->setChecked(false);
|
|
|
|
|
}
|
|
|
|
|
mAptBtn->blockSignals(false);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void Proxy::manualProxyTextChanged(QString txt){
|
|
|
|
|
//获取被修改控件
|
|
|
|
|
QObject * pobject = this->sender();
|
|
|
|
|
QLineEdit * who = dynamic_cast<QLineEdit *>(pobject);
|
|
|
|
|
|
|
|
|
|
//获取控件保存的用户数据
|
|
|
|
|
GSData currentData = who->property("gData").value<GSData>();
|
|
|
|
|
QString schema = currentData.schema;
|
|
|
|
|
qDebug()<<schema;
|
|
|
|
|
QString key = currentData.key;
|
|
|
|
|
|
|
|
|
|
//构建临时QGSettings
|
|
|
|
|
const QByteArray id = schema.toUtf8();
|
|
|
|
|
const QByteArray iidd(id.data());
|
|
|
|
|
QGSettings * setting = new QGSettings(iidd);
|
|
|
|
|
|
|
|
|
|
setting->set(key, QVariant(txt));
|
|
|
|
|
|
|
|
|
|
delete setting;
|
|
|
|
|
setting = nullptr;
|
|
|
|
|
}
|