WIP: main

This commit is contained in:
driftingsun 2020-12-26 15:03:51 +03:00
parent f25f34565a
commit 15730b470e
52 changed files with 2438 additions and 208 deletions

View file

@ -1,12 +1,20 @@
#include <QKeyEvent>
#include <QMessageBox>
#include <QSysInfo>
#include <QThread>
#include "communicator.h"
#include "debug.h"
#include "defines.h"
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "utils.h"
#include "vpnconnection.h"
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow)
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow),
m_vpnConnection(nullptr)
{
ui->setupUi(this);
@ -15,7 +23,7 @@ MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWi
ui->stackedWidget_main->setCurrentIndex(2);
connect(ui->pushButton_blocked_list, SIGNAL(clicked(bool)), this, SLOT(onPushButtonBlockedListClicked(bool)));
connect(ui->pushButton_connect, SIGNAL(clicked(bool)), this, SLOT(onPushButtonConnectClicked(bool)));
connect(ui->pushButton_connect, SIGNAL(toggled(bool)), this, SLOT(onPushButtonConnectToggled(bool)));
connect(ui->pushButton_settings, SIGNAL(clicked(bool)), this, SLOT(onPushButtonSettingsClicked(bool)));
connect(ui->pushButton_back_from_sites, SIGNAL(clicked(bool)), this, SLOT(onPushButtonBackFromSitesClicked(bool)));
@ -23,14 +31,37 @@ MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWi
setFixedSize(width(),height());
qDebug() << APPLICATION_NAME;
qDebug() << "Started";
qInfo().noquote() << QString("Started %1 version %2").arg(APPLICATION_NAME).arg(APP_VERSION);
qInfo().noquote() << QString("%1 (%2)").arg(QSysInfo::prettyProductName()).arg(QSysInfo::currentCpuArchitecture());
QDir dir;
QString configPath = Utils::systemConfigPath();
if (!dir.mkpath(configPath)) {
qWarning() << "Cannot initialize config path:" << configPath;
}
m_vpnConnection = new VpnConnection;
connect(m_vpnConnection, SIGNAL(bytesChanged(quint64, quint64)), this, SLOT(onBytesChanged(quint64, quint64)));
connect(m_vpnConnection, SIGNAL(connectionStateChanged(VpnProtocol::ConnectionState)), this, SLOT(onConnectionStateChanged(VpnProtocol::ConnectionState)));
onConnectionStateChanged(VpnProtocol::ConnectionState::Disconnected);
}
MainWindow::~MainWindow()
{
delete ui;
hide();
m_vpnConnection->disconnectFromVpn();
for (int i = 0; i < 50; i++) {
qApp->processEvents(QEventLoop::ExcludeUserInputEvents);
QThread::msleep(100);
if (m_vpnConnection->disconnected()) {
break;
}
}
qDebug() << "Closed";
}
@ -42,16 +73,22 @@ void MainWindow::goToIndex(int index)
void MainWindow::keyPressEvent(QKeyEvent *event)
{
switch (event->key()) {
case Qt::Key_L:
if (!Debug::openLogsFolder()) {
QMessageBox::warning(this, APPLICATION_NAME, tr("Cannot open logs folder!"));
}
case Qt::Key_L:
if (!Debug::openLogsFolder()) {
QMessageBox::warning(this, APPLICATION_NAME, tr("Cannot open logs folder!"));
}
break;
default:
default:
;
}
}
void MainWindow::onBytesChanged(quint64 receivedData, quint64 sentData)
{
ui->label_speed_received->setText(VpnConnection::bytesToText(receivedData));
ui->label_speed_sent->setText(VpnConnection::bytesToText(sentData));
}
void MainWindow::onPushButtonBackFromSettingsClicked(bool)
{
goToIndex(2);
@ -72,9 +109,52 @@ void MainWindow::onPushButtonSettingsClicked(bool)
goToIndex(4);
}
void MainWindow::onPushButtonConnectClicked(bool)
void MainWindow::onConnectionStateChanged(VpnProtocol::ConnectionState state)
{
qDebug() << "onPushButtonConnectClicked";
bool pushButtonConnectEnabled = false;
ui->label_state->setText(VpnProtocol::textConnectionState(state));
switch (state) {
case VpnProtocol::ConnectionState::Disconnected:
onBytesChanged(0,0);
ui->pushButton_connect->setChecked(false);
pushButtonConnectEnabled = true;
break;
case VpnProtocol::ConnectionState::Preparing:
pushButtonConnectEnabled = false;
break;
case VpnProtocol::ConnectionState::Connecting:
pushButtonConnectEnabled = false;
break;
case VpnProtocol::ConnectionState::Connected:
pushButtonConnectEnabled = true;
break;
case VpnProtocol::ConnectionState::Disconnecting:
pushButtonConnectEnabled = false;
break;
case VpnProtocol::ConnectionState::TunnelReconnecting:
pushButtonConnectEnabled = false;
break;
case VpnProtocol::ConnectionState::Error:
pushButtonConnectEnabled = true;
break;
case VpnProtocol::ConnectionState::Unknown:
default:
pushButtonConnectEnabled = true;
;
}
ui->pushButton_connect->setEnabled(pushButtonConnectEnabled);
}
void MainWindow::onPushButtonConnectToggled(bool checked)
{
if (checked) {
m_vpnConnection->connectToVpn();
ui->pushButton_connect->setEnabled(false);
} else {
m_vpnConnection->disconnectFromVpn();
}
}

View file

@ -3,6 +3,10 @@
#include <QMainWindow>
#include "vpnprotocol.h"
class VpnConnection;
namespace Ui {
class MainWindow;
}
@ -23,12 +27,15 @@ public slots:
private slots:
void onPushButtonBlockedListClicked(bool clicked);
void onPushButtonConnectClicked(bool clicked);
void onPushButtonConnectToggled(bool checked);
void onPushButtonSettingsClicked(bool clicked);
void onPushButtonBackFromSettingsClicked(bool clicked);
void onPushButtonBackFromSitesClicked(bool clicked);
void onBytesChanged(quint64 receivedBytes, quint64 sentBytes);
void onConnectionStateChanged(VpnProtocol::ConnectionState state);
protected:
void keyPressEvent(QKeyEvent* event);
@ -36,6 +43,7 @@ private:
void goToIndex(int index);
Ui::MainWindow *ui;
VpnConnection* m_vpnConnection;
};
#endif // MAINWINDOW_H

View file

@ -861,7 +861,7 @@ QPushButton:hover {
<string/>
</property>
</widget>
<widget class="QLabel" name="label_speed_upload_2">
<widget class="QLabel" name="label_speed_sent">
<property name="geometry">
<rect>
<x>260</x>
@ -890,7 +890,7 @@ font: 63 12pt &quot;Lato&quot;;</string>
<set>Qt::AlignCenter</set>
</property>
</widget>
<widget class="QLabel" name="label_speed_download_2">
<widget class="QLabel" name="label_speed_received">
<property name="geometry">
<rect>
<x>0</x>
@ -951,7 +951,7 @@ line-height: 21px;
</string>
</property>
<property name="text">
<string>Добавить сайт</string>
<string>Add site</string>
</property>
</widget>
<widget class="QPushButton" name="pushButton_settings">
@ -1001,7 +1001,7 @@ image: url(:/images/connect_button_connected.png);
<bool>false</bool>
</property>
</widget>
<widget class="QLabel" name="label_status_2">
<widget class="QLabel" name="label_state">
<property name="geometry">
<rect>
<x>0</x>
@ -1021,7 +1021,7 @@ color: #181922;
</string>
</property>
<property name="text">
<string>Подключено</string>
<string>Connected</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
@ -1043,7 +1043,7 @@ color: #181922;
<string/>
</property>
</widget>
<widget class="QLabel" name="label_status_3">
<widget class="QLabel" name="label_description">
<property name="geometry">
<rect>
<x>20</x>
@ -1064,7 +1064,7 @@ color: #181922;
</string>
</property>
<property name="text">
<string>Как использовать VPN</string>
<string>How to use VPN</string>
</property>
<property name="alignment">
<set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set>
@ -1083,7 +1083,7 @@ color: #181922;
</rect>
</property>
<property name="text">
<string>Для всех соеднинений</string>
<string>For all connections</string>
</property>
</widget>
<widget class="QRadioButton" name="radioButton_2">
@ -1099,7 +1099,7 @@ color: #181922;
</rect>
</property>
<property name="text">
<string>Для определённых сайтов</string>
<string>For selected sites</string>
</property>
<property name="checked">
<bool>true</bool>