/* -*- 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 #include #include #include #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>(); qDBusRegisterMetaType(); 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()<isChecked(); proxysettings->set(PROXY_MODE_KEY, checked ? "auto" : "none"); _setSensitivity(); }); connect(mEditBtn ,&QPushButton::clicked, this, &Proxy::setAptProxySlot); connect(mProxyBtnGroup, QOverload::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 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 reply = mAptproxyDbus->call("setaptproxy", host, port , status); } QHash Proxy::getAptProxy() { QHash 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 outArgs = result.arguments(); QVariant first = outArgs.at(0); QDBusArgument dbvFirst = first.value(); QVariant vFirst = dbvFirst.asVariant(); const QDBusArgument &dbusArgs = vFirst.value(); QVector 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"; QDBusReply reply = m_appProxyDbus->call("getProxyStateDbus"); if (!reply.isValid()) { return false; } state = reply; return state; } void Proxy::setAppProxyState(bool state) { if(!m_appProxyDbus->isValid()) { qWarning ()<< "init AppProxy dbus error"; return; } //设置应用代理开启状态 qDebug() << "call QDBusInterface setProxyStateDbus" << state; m_appProxyDbus->call("setProxyStateDbus", state); } 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 reply = dbusInterface.call("getProxyConfig"); if (!reply.isValid()) { qWarning ()<< "Return empty app proxy information, getProxyConfig reply is invalid"; return info; } 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 Proxy::getAppListProxy() { QMap appList; appList.clear(); QDBusInterface dbusInterface("org.ukui.SettingsDaemon", "/org/ukui/SettingsDaemon/AppProxy", "org.ukui.SettingsDaemon.AppProxy", QDBusConnection::sessionBus()); if(!dbusInterface.isValid()) { qWarning ()<< "init AppProxy dbus error"; return appList; } //获取可以配置应用代理的应用信息 qDebug() << "call QDBusInterface getAppProxy"; QDBusReply> reply = dbusInterface.call("getAppProxy"); if (!reply.isValid()) { qWarning ()<< "Return empty app list, getAppProxy reply is invalid"; return appList; } 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("http"); //http m_proxyTypeComboBox->addItem("socks4"); //socks4 m_proxyTypeComboBox->addItem("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 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 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(pobject); //获取控件保存的用户数据 GSData currentData = who->property("gData").value(); QString schema = currentData.schema; qDebug()<set(key, QVariant(txt)); delete setting; setting = nullptr; }