This commit is contained in:
2018-06-11 21:03:14 +08:00
parent cb572f4f10
commit 629b3c803d
5 changed files with 71 additions and 112 deletions
+56 -52
View File
@@ -25,51 +25,7 @@ MainTray::MainTray(QByteArray username, QByteArray password, QObject *parent): Q
connect(&opWindow, OptionsWindow::saveSettings, this, updateUserInfo);
//连接controller状态改变信号
connect(netctrl, NetController::stateChanged, this, [this](NetController::State state){
switch (state) {
case NetController::Online:
isForceLogin = false;
setIcon(QIcon(tr(":/icon/favicon.ico")));
if(!muteAction->isChecked())
showMessage(tr("网络已连接"),tr("校园网登陆成功"), this->icon(), msgDur);
loginAction->setEnabled(true);
logoutAction->setEnabled(true);
break;
case NetController::Offline:
setIcon(QIcon(tr(":/icon/offline.ico")));
if(!muteAction->isChecked())
showMessage(tr("网络已断开"),tr("校园网已注销"), this->icon(), msgDur);
loginAction->setEnabled(true);
logoutAction->setEnabled(true);
//自动登陆
if(autoLogin->isChecked() && !isForceLogout){
loginAction->trigger();
}
break;
case NetController::Disconnected:
setIcon(QIcon(tr(":/icon/offline.ico")));
if(!muteAction->isChecked())
showMessage(tr("网络已断开"),tr("无法连接至校园网"), this->icon(), msgDur);
loginAction->setDisabled(true);
logoutAction->setDisabled(true);
break;
case NetController::WrongPass:
setIcon(QIcon(tr(":/icon/offline.ico")));
if(!muteAction->isChecked())
showMessage(tr("登陆失败"),tr("密码错误"), this->icon(), msgDur);
break;
case NetController::Owed:
setIcon(QIcon(tr(":/icon/offline.ico")));
if(!muteAction->isChecked())
showMessage(tr("登陆失败"),tr("已欠费"), this->icon(), msgDur);
break;
default:
break;
}
currentState = state;
showToolTip(state);
});
connect(netctrl, NetController::sendState, this, handleState);
connect(this, QSystemTrayIcon::messageClicked, this, [this](){
@@ -161,10 +117,6 @@ MainTray::MainTray(QByteArray username, QByteArray password, QObject *parent): Q
autoLoginTimer->start();
connect(autoLoginTimer,QTimer::timeout, this, [this](){
netctrl->checkState();
// //Offline状态下自动重连
// if(currentState == NetController::Offline && autoLogin->isChecked() && !isForceLogout){
// loginAction->trigger();
// }
});
showToolTip(currentState);
@@ -178,6 +130,7 @@ MainTray::~MainTray()
{
delete menu;
delete infoMenu;
delete autoLoginTimer;
}
void MainTray::showToolTip(NetController::State state)
@@ -287,9 +240,60 @@ void MainTray::updateUserInfo(QByteArray id, QByteArray pass, int traffic)
settings.setValue("total traffic", traffic);
}
void MainTray::handleState(NetController::State state)
{
if(state!=currentState){
switch (state) {
case NetController::Online:
isForceLogin = false;
setIcon(QIcon(tr(":/icon/favicon.ico")));
if(!muteAction->isChecked())
showMessage(tr("网络已连接"),tr("校园网登陆成功"), this->icon(), msgDur);
loginAction->setEnabled(true);
logoutAction->setEnabled(true);
break;
case NetController::Offline:
if(currentState == NetController::WrongPass || currentState == NetController::Owed)
return;
setIcon(QIcon(tr(":/icon/offline.ico")));
if(!muteAction->isChecked())
showMessage(tr("网络已断开"),tr("校园网已注销"), this->icon(), msgDur);
loginAction->setEnabled(true);
logoutAction->setEnabled(true);
//自动登陆
if(autoLogin->isChecked() && !isForceLogout){
loginAction->trigger();
}
break;
case NetController::Disconnected:
setIcon(QIcon(tr(":/icon/offline.ico")));
if(!muteAction->isChecked())
showMessage(tr("网络已断开"),tr("无法连接至校园网"), this->icon(), msgDur);
loginAction->setDisabled(true);
logoutAction->setDisabled(true);
break;
case NetController::WrongPass:
setIcon(QIcon(tr(":/icon/offline.ico")));
if(!muteAction->isChecked())
showMessage(tr("登陆失败"),tr("密码错误"), this->icon(), msgDur);
break;
case NetController::Owed:
setIcon(QIcon(tr(":/icon/offline.ico")));
if(!muteAction->isChecked())
showMessage(tr("登陆失败"),tr("已欠费"), this->icon(), msgDur);
break;
default:
break;
}
currentState = state;
showToolTip(state);
}
}
void MainTray::handleInfo(QString byte, QString sec, QString balance, QString ip)
{
QString mbString = QString::number(byte.toDouble()/1000000.0, 'f', 2);
QString mbString = QString::number(byte.toDouble()/1048576.0, 'f', 2);
QString gbString = QString::number(byte.toDouble()/1000000000.0, 'f', 2);
QString leftoverString = QString::number(totalTraffic - byte.toDouble()/1000000000.0, 'f',2 );
int totalSec = sec.toInt();
@@ -302,12 +306,12 @@ void MainTray::handleInfo(QString byte, QString sec, QString balance, QString ip
ipAction->setText(tr("IP地址:\t") + ip);
if(!hasWarned){
hasWarned = true;
if(byte.toDouble() / 1000000.0 > totalTraffic * 1024){//流量已超
if(byte.toDouble() / 1048576.0 > totalTraffic * 1024){//流量已超
trafficstate = Over;
if(!muteAction->isChecked())
showMessage(tr("流量警告"), tr("本月流量已超"), QSystemTrayIcon::Warning);
}
else if(byte.toDouble() / 1000000.0 + 5000 > totalTraffic * 1024){//流量将超
else if(byte.toDouble() / 1048576.0 + 5000 > totalTraffic * 1024){//流量将超
trafficstate = Nearly;
if(!muteAction->isChecked())
showMessage(tr("流量预警"), tr("剩余流量:") + leftoverString + tr("G"));
+2
View File
@@ -29,6 +29,7 @@ private:
OptionsWindow opWindow;
QTimer *autoLoginTimer; //自动重连定时器
bool isForceLogout = false;
bool isForceLogin = false;
bool hasWarned = false;
@@ -53,6 +54,7 @@ signals:
private slots:
void updateUserInfo(QByteArray id, QByteArray pass, int traffic);
void handleState(NetController::State state);
void handleInfo(QString mb, QString sec, QString balance, QString ip);
};
+10 -58
View File
@@ -1,8 +1,7 @@
#include "netcontroller.h"
NetController::NetController(QByteArray id, QByteArray passwd, QObject *parent) : QObject(parent),
username(id), password(passwd), NEUState(Unknown), lastState(Unknown),
manager(this)
username(id), password(passwd), manager(this)
{
checkParam.append("action=get_online_info");
@@ -24,31 +23,6 @@ NetController::NetController(QByteArray id, QByteArray passwd, QObject *parent)
void NetController::checkState()
{
sendCheckRequest();
if(NEUState == Offline && lastState != Offline/* && offlineCount++ > 1*/)
{
lastState = Offline;
emit stateChanged(NEUState);
}
else if(NEUState == Online && lastState != Online)
{
lastState = Online;
emit stateChanged(NEUState);
}
else if(NEUState == Disconnected && lastState != Disconnected)
{
lastState = Disconnected;
emit stateChanged(NEUState);
}
else if(NEUState == WrongPass && lastState != WrongPass)
{
lastState = WrongPass;
emit stateChanged(NEUState);
}
else if(NEUState == Owed && lastState != Owed)
{
lastState = Owed;
emit stateChanged(NEUState);
}
}
void NetController::sendCheckRequest()
@@ -93,7 +67,6 @@ void NetController::sendLogoutRequest()
void NetController::handleResponse(QNetworkReply *reply)
{
// qDebug()<<reply->url();
QString url = reply->url().toString();
reply->deleteLater();
if(url==checkUrl)
@@ -103,52 +76,31 @@ void NetController::handleResponse(QNetworkReply *reply)
QString status = reply->readAll();
if(status==offlineString)
{
if(NEUState!=WrongPass && NEUState!=Owed && offlineCount++ > 1)
{
onlineCount = 0;
offlineCount = 0;
disconnectCount = 0;
lastState = NEUState;
NEUState = Offline;
}
emit sendState(Offline);
}
else
{
if(onlineCount++ > 1)
{
onlineCount = 0;
offlineCount = 0;
disconnectCount = 0;
lastState = NEUState;
NEUState = Online;
QStringList infoList = status.split(',');
emit sendInfo(infoList[0], infoList[1], infoList[2], infoList[5]);
}
emit sendState(Online);
QStringList infoList = status.split(',');
emit sendInfo(infoList[0], infoList[1], infoList[2], infoList[5]);
}
}
else if(disconnectCount++ > 1)
else
{
onlineCount = 0;
offlineCount = 0;
disconnectCount = 0;
lastState = NEUState;
NEUState = Disconnected;
emit sendState(Disconnected);
}
}
else if(url==loginUrl)
{
QString loginPage(reply->readAll());
if(loginPage.contains(QString("已欠费"))){//欠费
lastState = NEUState;
NEUState = Owed;
emit sendState(Owed);
}
else if(loginPage.contains("Password is error")){//密码错误
lastState = NEUState;
NEUState = WrongPass;
emit sendState(WrongPass);
}
else if(loginPage.contains("网络已连接")){//登陆成功
lastState = NEUState;
NEUState = Online;
emit sendState(Online);
}
}
}
+2 -2
View File
@@ -29,14 +29,14 @@ private:
QString offlineString = "not_online";
QByteArray checkParam, username, password;
int traffic;
State NEUState = Unknown, lastState = Unknown;
// State NEUState = Unknown, lastState = Unknown;
int onlineCount = 0, offlineCount = 0, disconnectCount = 0;
QNetworkAccessManager manager;
QNetworkRequest request;
signals:
void stateChanged(State newState);
void sendState(State newState);
void sendInfo(QString mb, QString sec, QString balance, QString ip);
public slots:
+1
View File
@@ -15,6 +15,7 @@ OptionsWindow::OptionsWindow(QByteArray id, QByteArray pass, int traffic, QWidg
idEdit->setText(id);
passwordEdit = new QLineEdit(this);
passwordEdit->setEchoMode(QLineEdit::Password);
passwordEdit->setContextMenuPolicy(Qt::NoContextMenu);
passwordEdit->setText(pass);
trafficSpin = new QSpinBox(this);