QR code lib added

ShadowSocks export
ui stylesheet fixes
ip:port regexp fixed
dns settings reset bug fixed
This commit is contained in:
pokamest 2021-03-17 03:45:38 +03:00
parent 54fca5bebc
commit f9e1b2c6dc
10 changed files with 2469 additions and 199 deletions

View file

@ -12,6 +12,8 @@
#include <QThread>
#include <QTimer>
#include <protocols/shadowsocksvpnprotocol.h>
#include "core/errorstrings.h"
#include "core/openvpnconfigurator.h"
#include "core/servercontroller.h"
@ -104,8 +106,9 @@ MainWindow::MainWindow(QWidget *parent) :
qDebug().noquote() << QString("Default config: %1").arg(Utils::defaultVpnConfigFileName());
m_ipAddressValidator.setRegExp(Utils::ipAddressRegExp());
m_ipAddressPortValidator.setRegExp(Utils::ipAddressPortRegExp());
ui->lineEdit_new_server_ip->setValidator(&m_ipAddressValidator);
ui->lineEdit_new_server_ip->setValidator(&m_ipAddressPortValidator);
ui->lineEdit_network_settings_dns1->setValidator(&m_ipAddressValidator);
ui->lineEdit_network_settings_dns2->setValidator(&m_ipAddressValidator);
}
@ -147,6 +150,24 @@ void MainWindow::goToPage(Page page, bool reset, bool slide)
.arg(m_settings.serverName())
.arg(m_settings.serverPort()));
}
if (page == Page::ShareConnection) {
QJsonObject ssConfig = ShadowSocksVpnProtocol::genShadowSocksConfig(m_settings.serverCredentials());
QString ssString = QString("%1:%2@%3:%4")
.arg(ssConfig.value("method").toString())
.arg(ssConfig.value("password").toString())
.arg(ssConfig.value("server").toString())
.arg(QString::number(ssConfig.value("server_port").toInt()));
ssString = "ss://" + ssString.toUtf8().toBase64();
ui->lineEdit_share_ss_string->setText(ssString);
updateQRCodeImage(ssString, ui->label_share_ss_qr_code);
ui->label_share_ss_server->setText(ssConfig.value("server").toString());
ui->label_share_ss_port->setText(QString::number(ssConfig.value("server_port").toInt()));
ui->label_share_ss_method->setText(ssConfig.value("method").toString());
ui->label_share_ss_password->setText(ssConfig.value("password").toString());
}
ui->pushButton_new_server_connect_key->setChecked(false);
}
@ -632,7 +653,7 @@ void MainWindow::setupUiConnections()
updateSettings();
});
connect(ui->pushButton_network_settings_resetdns2, &QPushButton::clicked, this, [this](){
m_settings.setPrimaryDns(m_settings.cloudFlareNs2());
m_settings.setSecondaryDns(m_settings.cloudFlareNs2());
updateSettings();
});
@ -654,6 +675,10 @@ void MainWindow::setupUiConnections()
ui->textEdit_new_server_ssh_key->setVisible(checked);
});
connect(ui->pushButton_check_for_updates, &QPushButton::clicked, this, [this](){
QDesktopServices::openUrl(QUrl("https://github.com/amnezia-vpn/desktop-client/releases"));
});
}
void MainWindow::setTrayState(VpnProtocol::ConnectionState state)
@ -873,3 +898,27 @@ void MainWindow::makeSitesListItem(QListWidget *listWidget, const QString &addre
widget->setStyleSheet(styleSheet());
}
void MainWindow::updateQRCodeImage(const QString &text, QLabel *label)
{
int levelIndex = 1;
int versionIndex = 0;
bool bExtent = true;
int maskIndex = -1;
m_qrEncode.EncodeData( levelIndex, versionIndex, bExtent, maskIndex, text.toUtf8().data() );
int qrImageSize = m_qrEncode.m_nSymbleSize;
int encodeImageSize = qrImageSize + ( QR_MARGIN * 2 );
QImage encodeImage( encodeImageSize, encodeImageSize, QImage::Format_Mono );
encodeImage.fill( 1 );
for ( int i = 0; i < qrImageSize; i++ )
for ( int j = 0; j < qrImageSize; j++ )
if ( m_qrEncode.m_byModuleData[i][j] )
encodeImage.setPixel( i + QR_MARGIN, j + QR_MARGIN, 0 );
label->setPixmap(QPixmap::fromImage(encodeImage.scaledToWidth(label->width())));
}