xref: /OK3568_Linux_fs/app/forlinx/flapp/src/plugins/network/networkwidget.cpp (revision 4882a59341e53eb6f0b4789bf948001014eff981)
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