Merge pull request #1 from c-my/master

new
This commit is contained in:
Mingjian W
2018-07-05 22:05:16 +08:00
committed by GitHub
4 changed files with 112 additions and 52 deletions
+44 -22
View File
@@ -46,6 +46,7 @@ MainTray::MainTray(QObject *parent) : QSystemTrayIcon(parent),
optionsAction = new QAction(tr("选项"), this);
bootAction = new QAction(tr("开机启动"), this);
muteAction = new QAction(tr("勿扰模式"), this);
mobileAction = new QAction(tr("作为移动端"), this);
aboutAction = new QAction(tr("关于"), this);
quitAction = new QAction(tr("退出"), this);
@@ -61,26 +62,30 @@ MainTray::MainTray(QObject *parent) : QSystemTrayIcon(parent),
QClipboard *clipBoard = QApplication::clipboard();
clipBoard->setText(ipList.at(1));
}
showMessage(tr("复制成功"), tr("IP地址已复制到剪切板"));
if(!muteAction->isChecked())
{
showMessage(tr("复制成功"), tr("IP地址已复制到剪切板"));
}
});
autoLogin->setCheckable(true);
bootAction->setCheckable(true);
muteAction->setCheckable(true);
mobileAction->setCheckable(true);
muteAction->setToolTip(tr("勿扰模式下不会发出通知"));
connect(loginAction, &QAction::triggered, this, [this]() {
writeLog(tr("Login triggered."));
isForceLogin = true;
netctrl->sendLogoutRequest();
netctrl->sendLogoutRequest(true, mobileAction->isChecked());
hasWarned = false;
netctrl->sendLoginRequest();
netctrl->sendLoginRequest(mobileAction->isChecked());
isForceLogout = false;
});
connect(logoutAction, &QAction::triggered, this, [this]() {
writeLog(tr("Logout triggered."));
netctrl->sendLogoutRequest();
netctrl->sendLogoutRequest(false, mobileAction->isChecked());
isForceLogout = true;
});
connect(autoLogin, &QAction::toggled, this, [this](bool set) {
@@ -107,9 +112,11 @@ MainTray::MainTray(QObject *parent) : QSystemTrayIcon(parent),
autoLogin->setChecked(settings.value("isAutoLogin", true).toBool());
bootAction->setChecked(settings.value("isOnBoot", false).toBool());
muteAction->setChecked(settings.value("isMute", false).toBool());
mobileAction->setChecked(settings.value("isMobile", false).toBool());
settingsMenu->setTitle(tr("设置"));
settingsMenu->addAction(optionsAction);
settingsMenu->addAction(mobileAction);
settingsMenu->addAction(muteAction);
settingsMenu->addAction(bootAction);
@@ -204,6 +211,7 @@ void MainTray::handleActivated(QSystemTrayIcon::ActivationReason reason)
switch (reason)
{
case QSystemTrayIcon::DoubleClick:
case QSystemTrayIcon::MiddleClick:
writeLog(tr("Double click TrayIcon."));
if (currentState == NetController::Offline)
{
@@ -268,22 +276,29 @@ void MainTray::setAutoStart(bool set)
#ifdef Q_OS_LINUX
QString path = QStandardPaths::writableLocation(QStandardPaths::HomeLocation) + "/.config/autostart";
QFile file(path + "/ipgw.desktop");
if(!file.open(QIODevice::ReadWrite | QIODevice::Text)) {
showMessage(tr("设置失败"), tr("读写/home/.config/autostart/失败"), this->icon(), msgDur);
return;
if (!file.open(QIODevice::ReadWrite | QIODevice::Text))
{
if(!muteAction->isChecked())
{
showMessage(tr("设置失败"), tr("读写/home/.config/autostart/失败"), this->icon(), msgDur);
return;
}
}
if (set) {
if (set)
{
QTextStream in(&file);
in << "[Desktop Entry]\n" <<
"Type=Application\n" <<
"Version=1.0\n" <<
"Name=NEU-Monitor\n" <<
"Comment=NEU-Monitor startup script\n"<<
"Exec=" << qApp->applicationFilePath() << " --hidden\n"<<
"StartupNotify=false\n"<<
"Terminal=false\n";
in << "[Desktop Entry]\n"
<< "Type=Application\n"
<< "Version=1.0\n"
<< "Name=NEU-Monitor\n"
<< "Comment=NEU-Monitor startup script\n"
<< "Exec=" << qApp->applicationFilePath() << " --hidden\n"
<< "StartupNotify=false\n"
<< "Terminal=false\n";
file.close();
} else {
}
else
{
file.remove();
}
#endif
@@ -293,7 +308,10 @@ void MainTray::openLogFile()
{
if (!logFile.open(QIODevice::Append | QIODevice::Text))
{
showMessage(tr("警告"), tr("日志文件打开失败"));
if(!muteAction->isChecked())
{
showMessage(tr("警告"), tr("日志文件打开失败"));
}
// return;
}
writeLog(tr("\n=================================================="), false);
@@ -343,7 +361,7 @@ void MainTray::handleState(NetController::State state)
if (autoLogin->isChecked() && !isForceLogout)
{
QTimer::singleShot(1000, loginAction, SLOT(trigger()));
// loginAction->trigger();
// loginAction->trigger();
}
currentState = state;
break;
@@ -389,20 +407,24 @@ void MainTray::handleInfo(QString byte, QString sec, QString balance, QString ip
timeAction->setText(tr("已用时长:\t") + QString::number(hour, 'f', 2) + tr(" 小时") /*+ ":" +QString::number(min) + ":" + second*/);
balanceAction->setText(tr("账户余额:\t") + balance + tr(" 元"));
ipAction->setText(tr("IP地址:\t") + ip);
if (!hasWarned && totalTraffic <= 0)
if (!hasWarned && totalTraffic > 0)
{
hasWarned = true;
if (byte.toDouble() / 1048576.0 > totalTraffic * 1024)
{ //流量已超
trafficstate = Over;
if (!muteAction->isChecked())
showMessage(tr("流量警告"), tr("本月流量已超"), QSystemTrayIcon::Warning);
QTimer::singleShot(5000, this, [this]{
showMessage(tr("流量警告"), tr("本月流量已超"), QSystemTrayIcon::Warning);
});
}
else if (byte.toDouble() / 1048576.0 + 5000 > totalTraffic * 1024)
{ //流量将超
trafficstate = Nearly;
if (!muteAction->isChecked())
showMessage(tr("流量预警"), tr("剩余流量:") + leftoverString + tr("G"));
QTimer::singleShot(5000, this, [this, leftoverString]{
showMessage(tr("流量预警"), tr("剩余流量:") + leftoverString + tr("G"));
});
}
showToolTip(currentState);
}
+1 -2
View File
@@ -15,7 +15,6 @@
#include <QtGlobal>
#include <QClipboard>
#include <QStandardPaths>
#include <QDebug>
class MainTray : public QSystemTrayIcon
{
@@ -33,7 +32,7 @@ class MainTray : public QSystemTrayIcon
private:
QMenu *menu, *infoMenu, *settingsMenu;
QAction *loginAction, *logoutAction, *autoLogin, *optionsAction, *aboutAction, *quitAction;
QAction *mbAction, *timeAction, *balanceAction, *ipAction, *bootAction, *muteAction;
QAction *mbAction, *timeAction, *balanceAction, *ipAction, *bootAction, *muteAction, *mobileAction;
NetController *netctrl;
QSettings settings;
OptionsWindow opWindow;
+62 -24
View File
@@ -5,17 +5,32 @@ NetController::NetController(QByteArray id, QByteArray passwd, QObject *parent)
{
checkParam.append("action=get_online_info");
request.setHeader(QNetworkRequest::ContentTypeHeader, "application/x-www-form-urlencoded");
request.setHeader(QNetworkRequest::ContentLengthHeader, "100");
request.setRawHeader("Host", "ipgw.neu.edu.cn");
request.setRawHeader("Cache-Control", "max-age=0");
request.setRawHeader("Origin", "http://ipgw.neu.edu.cn");
request.setRawHeader("Upgrade-Insecure-Requests", "1");
request.setRawHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.162 Safari/537.36");
request.setRawHeader("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8");
request.setRawHeader("Referer", "http://ipgw.neu.edu.cn/srun_portal_pc.php?ac_id=1&");
request.setRawHeader("Accept-Encoding", "gzip, deflate");
request.setRawHeader("Accept-Language", "zh-CN,zh;q=0.9");
desktopRequest.setHeader(QNetworkRequest::ContentTypeHeader, "application/x-www-form-urlencoded");
desktopRequest.setHeader(QNetworkRequest::ContentLengthHeader, "100");
desktopRequest.setRawHeader("Host", "ipgw.neu.edu.cn");
desktopRequest.setRawHeader("Cache-Control", "max-age=0");
desktopRequest.setRawHeader("Origin", "http://ipgw.neu.edu.cn");
desktopRequest.setRawHeader("Upgrade-Insecure-Requests", "1");
desktopRequest.setRawHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.162 Safari/537.36");
desktopRequest.setRawHeader("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8");
desktopRequest.setRawHeader("Referer", "http://ipgw.neu.edu.cn/srun_portal_pc.php?ac_id=1&");
desktopRequest.setRawHeader("Accept-Encoding", "gzip, deflate");
desktopRequest.setRawHeader("Accept-Language", "zh-CN,zh;q=0.9");
mobileRequest.setRawHeader("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8");
mobileRequest.setRawHeader("Accept-Encoding", "gzip, deflate");
mobileRequest.setRawHeader("Accept-Language", "en-US,en;q=0.9,zh-CN;q=0.8,zh;q=0.7");
mobileRequest.setRawHeader("Cache-Control", "max-age=0");
// mobileRequest.setHeader(QNetworkRequest::ContentLengthHeader, "85"); //XXX:这行一定不能有
mobileRequest.setHeader(QNetworkRequest::ContentTypeHeader, "application/x-www-form-urlencoded");
mobileRequest.setRawHeader("Host", "ipgw.neu.edu.cn");
mobileRequest.setRawHeader("Origin", "http://ipgw.neu.edu.cn");
mobileRequest.setRawHeader("Proxy-Connection", "keep-alive");
mobileRequest.setRawHeader("Referer", "http://ipgw.neu.edu.cn/srun_portal_phone.php?ac_id=1&");
mobileRequest.setRawHeader("Upgrade-Insecure-Requests", "1");
mobileRequest.setRawHeader("User-Agent", "Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Mobile Safari/537.36");
connect(&manager, &QNetworkAccessManager::finished, this, &NetController::handleResponse);
}
@@ -27,14 +42,13 @@ void NetController::checkState()
void NetController::sendCheckRequest()
{
request.setUrl(QUrl(checkUrl));
manager.post(request, checkParam);
desktopRequest.setUrl(QUrl(checkUrl));
manager.post(desktopRequest, checkParam);
}
void NetController::sendLoginRequest()
void NetController::sendLoginRequest(bool isMobile)
{
sendLog(tr("Send login request. [") + username + tr("]"));
request.setUrl(QUrl(loginUrl));
QByteArray loginParam;
loginParam.append("action=login&");
@@ -48,23 +62,43 @@ void NetController::sendLoginRequest()
loginParam.append("username=");
loginParam.append(username);
manager.post(request, loginParam);
if(!isMobile)
{
desktopRequest.setUrl(QUrl(desktopLoginUrl));
manager.post(desktopRequest, loginParam);
}
else
{
mobileRequest.setUrl(QUrl(mobileLoginUrl));
manager.post(mobileRequest, loginParam);
}
}
void NetController::sendLogoutRequest()
void NetController::sendLogoutRequest(bool isAll, bool isMobile)
{
sendLog(tr("Send logout request. [") + username + tr("]"));
request.setUrl(QUrl(loginUrl));
QByteArray logoutParam;
logoutParam.append("action=logout&");
logoutParam.append("ajax=1&");
logoutParam.append("password=");
logoutParam.append(password);
logoutParam.append("&username=");
if(isAll)
{
logoutParam.append("password=");//有password是全部断开
logoutParam.append(password);
logoutParam.append("&");
}
logoutParam.append("username=");
logoutParam.append(username);
manager.post(request, logoutParam);
if(!isMobile)
{
desktopRequest.setUrl(QUrl(desktopLoginUrl));
manager.post(desktopRequest, logoutParam);
}
else
{
mobileRequest.setUrl(QUrl(mobileLoginUrl));//TODO:测试这样logout是否会影响pc端
manager.post(mobileRequest, logoutParam);
}
}
void NetController::handleResponse(QNetworkReply *reply)
@@ -92,7 +126,7 @@ void NetController::handleResponse(QNetworkReply *reply)
emit sendState(Disconnected);
}
}
else if (url == loginUrl)
else if (url == desktopLoginUrl)
{
QString loginPage(reply->readAll());
if (loginPage.contains(QString("已欠费")))
@@ -111,4 +145,8 @@ void NetController::handleResponse(QNetworkReply *reply)
emit sendState(Online);
}
}
// else if (url == mobileLoginUrl)
// {
// qDebug()<<reply->readAll().toStdString();
// }
}
+5 -4
View File
@@ -14,8 +14,8 @@ class NetController : public QObject
explicit NetController(QByteArray username, QByteArray password, QObject *parent = nullptr);
void checkState();
void sendCheckRequest();
void sendLoginRequest();
void sendLogoutRequest();
void sendLoginRequest(bool isMobile=false);
void sendLogoutRequest(bool isAll=false, bool isMobile=false);
void setUsername(QByteArray newName) { username = newName; }
void setPassword(QByteArray newPass) { password = newPass; }
@@ -33,14 +33,15 @@ class NetController : public QObject
private:
QString checkUrl = "http://ipgw.neu.edu.cn/include/auth_action.php";
QString loginUrl = "http://ipgw.neu.edu.cn/srun_portal_pc.php?ac_id=1&";
QString desktopLoginUrl = "http://ipgw.neu.edu.cn/srun_portal_pc.php?ac_id=1&";
QString mobileLoginUrl = "http://ipgw.neu.edu.cn/srun_portal_phone.php?ac_id=1&";
QString offlineString = "not_online";
QByteArray checkParam, username, password;
int traffic;
int onlineCount = 0, offlineCount = 0, disconnectCount = 0;
QNetworkAccessManager manager;
QNetworkRequest request;
QNetworkRequest desktopRequest, mobileRequest;
signals:
void sendState(State newState);