add traffic warning
This commit is contained in:
+55
-12
@@ -8,7 +8,7 @@ MainTray::MainTray(QByteArray username, QByteArray password, QObject *parent): Q
|
||||
//初始化settings
|
||||
settings(QSettings::IniFormat, QSettings::UserScope, "Cai.MY", "NEU-Monitor"),
|
||||
//初始化optionswindow
|
||||
opWindow(settings.value("id", "").toByteArray(), settings.value("password", "").toByteArray()),
|
||||
opWindow(settings.value("id", "").toByteArray(), settings.value("password", "").toByteArray(), settings.value("total traffic", 60).toInt()),
|
||||
user(username),
|
||||
passwd(password)
|
||||
{
|
||||
@@ -16,8 +16,12 @@ MainTray::MainTray(QByteArray username, QByteArray password, QObject *parent): Q
|
||||
setIcon(QIcon(tr(":/icon/favicon.ico")));
|
||||
|
||||
netctrl = new NetController(user,passwd,this);
|
||||
netctrl->setUsername(settings.value("id",0).toByteArray());
|
||||
netctrl->setPassword(settings.value("password", 0).toByteArray());
|
||||
user = settings.value("id",0).toByteArray();
|
||||
passwd = settings.value("password", 0).toByteArray();
|
||||
totalTraffic = settings.value("total traffic", 60).toInt();
|
||||
netctrl->setUsername(user);
|
||||
netctrl->setPassword(passwd);
|
||||
netctrl->setTotalTraffic(totalTraffic);
|
||||
|
||||
connect(&opWindow, OptionsWindow::saveSettings, this, updateUserInfo);
|
||||
//连接controller状态改变信号
|
||||
@@ -96,6 +100,7 @@ MainTray::MainTray(QByteArray username, QByteArray password, QObject *parent): Q
|
||||
connect(loginAction, QAction::triggered, this,[this](){
|
||||
isForceLogin = true;
|
||||
netctrl->sendLogoutRequest();
|
||||
hasWarned = false;
|
||||
netctrl->sendLoginRequest();
|
||||
isForceLogout = false;
|
||||
});
|
||||
@@ -174,28 +179,44 @@ MainTray::~MainTray()
|
||||
|
||||
void MainTray::showToolTip(NetController::State state)
|
||||
{
|
||||
QString tooltipString;
|
||||
switch (state) {
|
||||
case NetController::Online:
|
||||
setToolTip(tr("当前状态:连接\n自动重连:") + (autoLogin->isChecked()? tr("开启"):tr("关闭")));
|
||||
tooltipString += tr("当前状态:连接");
|
||||
break;
|
||||
case NetController::Offline:
|
||||
setToolTip(tr("当前状态:断开\n自动重连:") + (autoLogin->isChecked()? tr("开启"):tr("关闭"))+tr("\n双击以登陆"));
|
||||
tooltipString += tr("当前状态:断开 (双击登陆)");
|
||||
break;
|
||||
case NetController::Disconnected:
|
||||
setToolTip(tr("当前状态:无法连接\n自动重连:") + (autoLogin->isChecked()? tr("开启"):tr("关闭")));
|
||||
tooltipString += tr("当前状态:无法连接");
|
||||
break;
|
||||
case NetController::Unknown:
|
||||
setToolTip(tr("当前状态:正在识别\n自动重连:") + (autoLogin->isChecked()? tr("开启"):tr("关闭")));
|
||||
tooltipString += tr("当前状态:正在识别");
|
||||
break;
|
||||
case NetController::Owed:
|
||||
setToolTip(tr("当前状态:已欠费\n自动重连:") + (autoLogin->isChecked()? tr("开启"):tr("关闭")));
|
||||
tooltipString += tr("当前状态:已欠费");
|
||||
break;
|
||||
case NetController::WrongPass:
|
||||
setToolTip(tr("当前状态:密码错误\n自动重连:") + (autoLogin->isChecked()? tr("开启"):tr("关闭")));
|
||||
tooltipString += tr("当前状态:密码错误");
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
tooltipString += tr("\n自动重连:");
|
||||
tooltipString += autoLogin->isChecked()? tr("开启"):tr("关闭");
|
||||
if(state == NetController::Online){
|
||||
switch (trafficstate) {
|
||||
case Over:
|
||||
tooltipString += tr("\n流量已超额");
|
||||
break;
|
||||
case Nearly:
|
||||
tooltipString += tr("\n剩余流量不足");
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
setToolTip(tooltipString);
|
||||
}
|
||||
|
||||
void MainTray::handleActivated(QSystemTrayIcon::ActivationReason reason)
|
||||
@@ -247,19 +268,27 @@ void MainTray::setAutoStart(bool set)
|
||||
delete settings;
|
||||
}
|
||||
|
||||
void MainTray::updateUserInfo(QByteArray id, QByteArray pass)
|
||||
void MainTray::updateUserInfo(QByteArray id, QByteArray pass, int traffic)
|
||||
{
|
||||
netctrl->setUsername(id);
|
||||
netctrl->setPassword(pass);
|
||||
netctrl->setTotalTraffic(traffic);
|
||||
user = id;
|
||||
passwd = pass;
|
||||
totalTraffic = traffic;
|
||||
opWindow.hide();
|
||||
netctrl->sendLoginRequest();
|
||||
hasWarned = false;
|
||||
settings.setValue("id", id);
|
||||
settings.setValue("password", pass);
|
||||
settings.setValue("total traffic", traffic);
|
||||
}
|
||||
|
||||
void MainTray::handleInfo(QString mb, QString sec, QString balance, QString ip)
|
||||
void MainTray::handleInfo(QString byte, QString sec, QString balance, QString ip)
|
||||
{
|
||||
QString mbString = QString::number(mb.toDouble()/1000000.0, 'f', 2);
|
||||
QString mbString = QString::number(byte.toDouble()/1000000.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();
|
||||
int hour = (totalSec/3600);
|
||||
int min = ((totalSec-hour*3600)/60);
|
||||
@@ -268,5 +297,19 @@ void MainTray::handleInfo(QString mb, QString sec, QString balance, QString ip)
|
||||
timeAction->setText(tr("已用时长:\t") + QString::number(hour) + ":" +QString::number(min) + ":" + second);
|
||||
balanceAction->setText(tr("账户余额:\t") + balance);
|
||||
ipAction->setText(tr("IP地址:\t") + ip);
|
||||
if(!hasWarned){
|
||||
hasWarned = true;
|
||||
if(byte.toDouble() / 1000000.0 > totalTraffic * 1024){//流量已超
|
||||
trafficstate = Over;
|
||||
if(!muteAction->isChecked())
|
||||
showMessage(tr("流量警告"), tr("本月流量已超"), QSystemTrayIcon::Warning);
|
||||
}
|
||||
else if(byte.toDouble() / 1000000.0 + 5000 > totalTraffic * 1024){//流量将超
|
||||
trafficstate = Nearly;
|
||||
if(!muteAction->isChecked())
|
||||
showMessage(tr("流量预警"), tr("剩余流量:") + leftoverString + tr("G"));
|
||||
}
|
||||
showToolTip(currentState);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+5
-1
@@ -18,6 +18,7 @@ class MainTray: public QSystemTrayIcon
|
||||
public:
|
||||
MainTray(QByteArray username, QByteArray password, QObject *parent = Q_NULLPTR);
|
||||
~MainTray();
|
||||
enum TrafficState{Normal, Over, Nearly };
|
||||
|
||||
private:
|
||||
QMenu *menu, *infoMenu, *settingsMenu;
|
||||
@@ -30,8 +31,10 @@ private:
|
||||
|
||||
bool isForceLogout = false;
|
||||
bool isForceLogin = false;
|
||||
bool hasWarned = false;
|
||||
|
||||
NetController::State currentState = NetController::Unknown; //当前状态
|
||||
TrafficState trafficstate = Normal;
|
||||
|
||||
void showToolTip(NetController::State state);
|
||||
void handleActivated(QSystemTrayIcon::ActivationReason reason);//处理左键单击、双击
|
||||
@@ -40,6 +43,7 @@ private:
|
||||
void setAutoStart(bool set);
|
||||
|
||||
QByteArray user, passwd;
|
||||
int totalTraffic;
|
||||
int msgDur = 500; //通知持续时间
|
||||
int checkInterval = 1000; //查询状态定时器周期
|
||||
|
||||
@@ -48,7 +52,7 @@ signals:
|
||||
void exit();
|
||||
|
||||
private slots:
|
||||
void updateUserInfo(QByteArray id, QByteArray pass);
|
||||
void updateUserInfo(QByteArray id, QByteArray pass, int traffic);
|
||||
void handleInfo(QString mb, QString sec, QString balance, QString ip);
|
||||
|
||||
};
|
||||
|
||||
@@ -19,6 +19,7 @@ public:
|
||||
|
||||
void setUsername(QByteArray newName) { username = newName; }
|
||||
void setPassword(QByteArray newPass) { password = newPass; }
|
||||
void setTotalTraffic(int newTraffic) { traffic = newTraffic; }
|
||||
|
||||
enum State {Unknown, Offline, Online, Disconnected, Owed, WrongPass};
|
||||
|
||||
@@ -27,6 +28,7 @@ private:
|
||||
QString loginUrl = "http://ipgw.neu.edu.cn/srun_portal_pc.php?ac_id=1&";
|
||||
QString offlineString = "not_online";
|
||||
QByteArray checkParam, username, password;
|
||||
int traffic;
|
||||
State NEUState = Unknown, lastState = Unknown;
|
||||
int offlineCount = 0, disconnectCount = 0;
|
||||
|
||||
|
||||
+10
-2
@@ -1,6 +1,6 @@
|
||||
#include "optionswindow.h"
|
||||
|
||||
OptionsWindow::OptionsWindow(QByteArray id, QByteArray pass, QWidget *parent) : QMainWindow(parent)
|
||||
OptionsWindow::OptionsWindow(QByteArray id, QByteArray pass, int traffic, QWidget *parent) : QMainWindow(parent)
|
||||
{
|
||||
setWindowTitle(tr("选项"));
|
||||
|
||||
@@ -17,8 +17,13 @@ OptionsWindow::OptionsWindow(QByteArray id, QByteArray pass, QWidget *parent) :
|
||||
passwordEdit->setEchoMode(QLineEdit::Password);
|
||||
passwordEdit->setText(pass);
|
||||
|
||||
trafficSpin = new QSpinBox(this);
|
||||
trafficSpin->setValue(traffic);
|
||||
trafficSpin->setToolTip(tr("在流量将要用尽时进行提醒"));
|
||||
|
||||
layout->addRow(tr("用户名"), idEdit);
|
||||
layout->addRow(tr("密码"), passwordEdit);
|
||||
layout->addRow(tr("流量(G)"), trafficSpin);
|
||||
layout->setSpacing(20);
|
||||
|
||||
saveButton = new QPushButton("确定", this);
|
||||
@@ -35,6 +40,9 @@ OptionsWindow::OptionsWindow(QByteArray id, QByteArray pass, QWidget *parent) :
|
||||
tabWidget->addTab(page1, tr("常规"));
|
||||
setCentralWidget(tabWidget);
|
||||
|
||||
connect(saveButton, QPushButton::clicked, this, [this](){emit saveSettings(idEdit->text().toUtf8(), passwordEdit->text().toUtf8());});
|
||||
connect(saveButton, QPushButton::clicked, this, [this](){emit saveSettings(idEdit->text().toUtf8(),
|
||||
passwordEdit->text().toUtf8(),
|
||||
trafficSpin->value());
|
||||
});
|
||||
connect(cancleButton, QPushButton::clicked, this, hide);
|
||||
}
|
||||
|
||||
+4
-2
@@ -5,6 +5,7 @@
|
||||
#include <QWidget>
|
||||
#include <QTabWidget>
|
||||
#include <QLineEdit>
|
||||
#include <QSpinBox>
|
||||
#include <QPushButton>
|
||||
#include <QFormLayout>
|
||||
#include <QVBoxLayout>
|
||||
@@ -14,19 +15,20 @@ class OptionsWindow : public QMainWindow
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
explicit OptionsWindow(QByteArray id, QByteArray pass, QWidget *parent = nullptr);
|
||||
explicit OptionsWindow(QByteArray id, QByteArray pass, int traffic, QWidget *parent = nullptr);
|
||||
|
||||
private:
|
||||
QTabWidget *tabWidget;
|
||||
QWidget *page1;
|
||||
QLineEdit *idEdit, *passwordEdit;
|
||||
QSpinBox *trafficSpin;
|
||||
QPushButton *saveButton, *cancleButton;
|
||||
QFormLayout *layout;
|
||||
QVBoxLayout *vlayout;
|
||||
QHBoxLayout *hlayout;
|
||||
|
||||
signals:
|
||||
void saveSettings(QByteArray id, QByteArray pass);
|
||||
void saveSettings(QByteArray id, QByteArray pass, int traffic);
|
||||
public slots:
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user