1 #include "networkwidget.h"
2 #include "ui_networkwidget.h"
3 #include "inetwork.h"
4 #include <QDebug>
5 #include "terminal.h"
6 #include <QRegExpValidator>
7 #include "systemmanager.h"
8 #include <QCompleter>
9 #include <QStringListModel>
10 #include <QFile>
11 #include <QTimer>
12 #include "messagebox.h"
13
NetworkWidget(QWidget * parent)14 NetworkWidget::NetworkWidget(QWidget *parent) :
15 IWidget(parent),
16 ui(new Ui::NetworkWidget),
17 m_pNetWork(INetwork::guessCreate())
18 {
19 ui->setupUi(this);
20 }
21
~NetworkWidget()22 NetworkWidget::~NetworkWidget()
23 {
24 if(m_pNetWork != Q_NULLPTR)
25 {
26 delete m_pNetWork;
27 }
28 delete ui;
29 }
30
initUi()31 void NetworkWidget::initUi()
32 {
33 if(m_config.isEmpty())
34 {
35 QString s = Terminal::execCmd("ifconfig -a | grep ens | grep -v grep");
36 s +=Terminal::execCmd("ifconfig -a | grep eth | grep -v grep");
37 QStringList list= SystemManager::instance()->getMatch(s, "(ens\\d+)|(eth\\d+)");
38 m_config = list.toVector().toList();
39 }
40
41 connect(ui->staticRadioBtn, &QRadioButton::toggled, this, [=](bool bCheck){
42 if(bCheck)
43 {
44 ui->IPEdt->setEnabled(bCheck);
45 ui->maskEdt->setEnabled(bCheck);
46 ui->dnsEdt->setEnabled(bCheck);
47 ui->gatawayEdt->setEnabled(bCheck);
48 }else{
49 ui->IPEdt->setEnabled(bCheck);
50 ui->maskEdt->setEnabled(bCheck);
51 ui->dnsEdt->setEnabled(bCheck);
52 ui->gatawayEdt->setEnabled(bCheck);
53 }
54
55 readNetwork();
56 });
57
58 connect(ui->cardCombo, &QComboBox::currentTextChanged, this, [=](){
59 ui->textBrowser->clear();
60 });
61
62 foreach (QString cardName, m_config) {
63 ui->cardCombo->addItem(cardName);
64 }
65
66 ui->staticRadioBtn->click();
67
68 if(m_config.isEmpty())
69 {
70 ui->ApplyBtn->setEnabled(false);
71 ui->textBrowser->append("Network card config not find");
72 }
73
74 QRegExp regExp("((2[0-4]\\d|25[0-5]|[01]?\\d\\d?)\\.){3}(2[0-4]\\d|25[0-5]|[01]?\\d\\d?)");
75 QRegExpValidator *pValidator= new QRegExpValidator(regExp, this);
76 ui->IPEdt->setValidator(pValidator);
77 ui->IPEdt->setPlaceholderText("输入IP(192.168.0.1)");
78 ui->maskEdt->setValidator(pValidator);
79 ui->maskEdt->setPlaceholderText("输入掩码(255.255.255.0)");
80 ui->dnsEdt->setValidator(pValidator);
81 ui->dnsEdt->setPlaceholderText("输入DNS如(114.114.114.114)");
82 ui->gatawayEdt->setValidator(pValidator);
83 ui->gatawayEdt->setPlaceholderText("输入网关(192.168.0.1)");
84 }
85
loadData(const QDomElement & head,const QDomElement & body)86 void NetworkWidget::loadData(const QDomElement &head, const QDomElement &body)
87 {
88 Q_UNUSED(body)
89 if(head.hasAttribute("cardName")){
90 QStringList list = head.attribute("cardName").split(":");
91 list.removeAll("");
92 m_config = list.toVector().toList();
93 }
94 }
95
processMessage(const QString & info)96 void NetworkWidget::processMessage(const QString &info)
97 {
98 ui->textBrowser->append(info);
99 }
100
readNetwork()101 void NetworkWidget::readNetwork()
102 {
103 QStringList list = SystemManager::instance()->getDNS();
104 QString gateway =SystemManager::instance()->getGateway();
105 QString ip;
106 QString mask;
107 QString cardName = ui->cardCombo->currentText();
108 SystemManager::instance()->getNetwork(cardName, ip, mask);
109 if(list.size()>0)
110 {
111 ui->dnsEdt->setText(list[list.size()-1]);
112 }
113 ui->IPEdt->setText(ip);
114 ui->maskEdt->setText(mask);
115 ui->gatawayEdt->setText(gateway);
116 }
117
id()118 QString NetworkWidget::id()
119 {
120 return "network";
121 }
122
on_ApplyBtn_clicked()123 void NetworkWidget::on_ApplyBtn_clicked()
124 {
125 QString cardName = ui->cardCombo->currentText();
126 QString result = Terminal::execCmd(QString("ifconfig -a | grep -v grep | grep %1").arg(cardName));
127 qDebug()<<cardName;
128 if(!result.contains(cardName))
129 {
130 ui->textBrowser->append(QString("device: %1 not find").arg(cardName));
131 return;
132 }
133
134 //更新网络配置.
135 if(ui->staticRadioBtn->isChecked())
136 {
137 if(ui->cardCombo->currentText().isEmpty() ||
138 ui->IPEdt->text().isEmpty()|
139 ui->maskEdt->text().isEmpty()||
140 ui->gatawayEdt->text().isEmpty()||
141 ui->dnsEdt->text().isEmpty())
142 {
143 ui->textBrowser->append("输入信息有误");
144 return;
145 }
146
147 m_pNetWork->setStatic(ui->cardCombo->currentText(),
148 ui->IPEdt->text(),
149 ui->maskEdt->text(),
150 ui->gatawayEdt->text(),
151 ui->dnsEdt->text());
152 }else{
153 m_pNetWork->setAuto(ui->cardCombo->currentText());
154 }
155
156 //重启网络。
157 QString info = m_pNetWork->exec();
158 if(!info.isEmpty())
159 {
160 ui->textBrowser->append(info +"\n");
161 }
162
163 MessageBox::showDuringMessage(this, "Set Network Ok!");
164
165 }
166
on_testBtn_clicked()167 void NetworkWidget::on_testBtn_clicked()
168 {
169 QString s=ui->pingEdt->text();
170 if(s.isEmpty())
171 {
172 s = "www.forlinx.com";
173 }
174
175 s = QString("ping %1 -c 5 -I %2").arg(s).arg(ui->cardCombo->currentText());
176 qDebug()<<s;
177 ui->textBrowser->append(s);
178 this->start(s);
179
180 }
181