add login as mobile

This commit is contained in:
2018-07-05 22:01:03 +08:00
parent 9a13f8e1f3
commit c219a05a63
4 changed files with 95 additions and 40 deletions
+27 -10
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);
@@ -271,8 +278,11 @@ void MainTray::setAutoStart(bool set)
QFile file(path + "/ipgw.desktop");
if (!file.open(QIODevice::ReadWrite | QIODevice::Text))
{
showMessage(tr("设置失败"), tr("读写/home/.config/autostart/失败"), this->icon(), msgDur);
return;
if(!muteAction->isChecked())
{
showMessage(tr("设置失败"), tr("读写/home/.config/autostart/失败"), this->icon(), msgDur);
return;
}
}
if (set)
{
@@ -298,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);
@@ -394,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);