Various fixes

This commit is contained in:
pokamest 2022-01-23 19:16:40 +03:00
parent 02acbecef5
commit 2b9e615e51
14 changed files with 122 additions and 89 deletions

View file

@ -102,8 +102,8 @@ android {
resConfig "en" resConfig "en"
minSdkVersion = 24 minSdkVersion = 24
targetSdkVersion = 30 targetSdkVersion = 30
versionCode 7 // Change to a higher number versionCode 8 // Change to a higher number
versionName "2.0.7" // Change to a higher number versionName "2.0.8" // Change to a higher number
} }
buildTypes { buildTypes {

View file

@ -4,7 +4,7 @@
#define APPLICATION_NAME "AmneziaVPN" #define APPLICATION_NAME "AmneziaVPN"
#define SERVICE_NAME "AmneziaVPN-service" #define SERVICE_NAME "AmneziaVPN-service"
#define ORGANIZATION_NAME "AmneziaVPN.ORG" #define ORGANIZATION_NAME "AmneziaVPN.ORG"
#define APP_MAJOR_VERSION "2.0.7" #define APP_MAJOR_VERSION "2.0.8"
#define APP_VERSION "2.0.7.0" #define APP_VERSION "2.0.8.0"
#endif // DEFINES_H #endif // DEFINES_H

View file

@ -196,13 +196,12 @@ int main(int argc, char *argv[])
uiLogic->setQmlRoot(engine->rootObjects().at(0)); uiLogic->setQmlRoot(engine->rootObjects().at(0));
} }
// TODO - fix #ifdef Q_OS_WIN
//#ifdef Q_OS_WIN if (parser.isSet("a")) uiLogic->showOnStartup();
// if (parser.isSet("a")) mainWindow.showOnStartup(); else emit uiLogic->show();
// else mainWindow.show(); #else
//#else uiLogic->showOnStartup();
// mainWindow.showOnStartup(); #endif
//#endif
// TODO - fix // TODO - fix

View file

@ -228,6 +228,21 @@ void Settings::addVpnSite(RouteMode mode, const QString &site, const QString &ip
setVpnSites(mode, sites); setVpnSites(mode, sites);
} }
void Settings::addVpnSites(RouteMode mode, const QMap<QString, QString> &sites)
{
QVariantMap allSites = vpnSites(mode);
for (auto i = sites.constBegin(); i != sites.constEnd(); ++i) {
const QString &site = i.key();
const QString &ip = i.value();
if (allSites.contains(site) && allSites.value(site) == ip) continue;
allSites.insert(site, ip);
}
setVpnSites(mode, allSites);
}
QStringList Settings::getVpnIps(RouteMode mode) const QStringList Settings::getVpnIps(RouteMode mode) const
{ {
QStringList ips; QStringList ips;

View file

@ -82,6 +82,7 @@ public:
QVariantMap vpnSites(RouteMode mode) const { return m_settings.value("Conf/" + routeModeString(mode)).toMap(); } QVariantMap vpnSites(RouteMode mode) const { return m_settings.value("Conf/" + routeModeString(mode)).toMap(); }
void setVpnSites(RouteMode mode, const QVariantMap &sites) { m_settings.setValue("Conf/"+ routeModeString(mode), sites); m_settings.sync(); } void setVpnSites(RouteMode mode, const QVariantMap &sites) { m_settings.setValue("Conf/"+ routeModeString(mode), sites); m_settings.sync(); }
void addVpnSite(RouteMode mode, const QString &site, const QString &ip= ""); void addVpnSite(RouteMode mode, const QString &site, const QString &ip= "");
void addVpnSites(RouteMode mode, const QMap<QString, QString> &sites); // map <site, ip>
QStringList getVpnIps(RouteMode mode) const; QStringList getVpnIps(RouteMode mode) const;
void removeVpnSite(RouteMode mode, const QString &site); void removeVpnSite(RouteMode mode, const QString &site);

View file

@ -142,18 +142,53 @@ void SitesLogic::onPushButtonSitesImportClicked(const QString& fileName)
Settings::RouteMode mode = m_settings.routeMode(); Settings::RouteMode mode = m_settings.routeMode();
QStringList ips; QStringList ips;
QMap<QString, QString> sites;
while (!file.atEnd()) { while (!file.atEnd()) {
QString line = file.readLine(); QString line = file.readLine();
QStringList line_ips;
QStringList line_sites;
int pos = 0; int posDomain = 0;
QRegExp rx = Utils::ipAddressWithSubnetRegExp(); QRegExp domainRx = Utils::domainRegExp();
while ((pos = rx.indexIn(line, pos)) != -1) { while ((posDomain = domainRx.indexIn(line, posDomain)) != -1) {
ips << rx.cap(0); line_sites.append(domainRx.cap(0));
pos += rx.matchedLength(); posDomain += domainRx.matchedLength();
} }
int posIp = 0;
QRegExp ipRx = Utils::ipAddressWithSubnetRegExp();
while ((posIp = ipRx.indexIn(line, posIp)) != -1) {
line_ips.append(ipRx.cap(0));
posIp += ipRx.matchedLength();
}
// domain regex cover ip regex, so remove ips from sites
for (const QString& ip: line_ips) {
line_sites.removeAll(ip);
}
if (line_sites.size() == 1 && line_ips.size() == 1) {
sites.insert(line_sites.at(0), line_ips.at(0));
}
else if (line_sites.size() > 0 && line_ips.size() == 0) {
for (const QString& site: line_sites) {
sites.insert(site, "");
}
}
else {
for (const QString& site: line_sites) {
sites.insert(site, "");
}
for (const QString& ip: line_ips) {
ips.append(ip);
}
}
} }
m_settings.addVpnIps(mode, ips); m_settings.addVpnIps(mode, ips);
m_settings.addVpnSites(mode, sites);
uiLogic()->m_vpnConnection->addRoutes(QStringList() << ips); uiLogic()->m_vpnConnection->addRoutes(QStringList() << ips);
uiLogic()->m_vpnConnection->flushDns(); uiLogic()->m_vpnConnection->flushDns();

View file

@ -33,15 +33,24 @@ VpnLogic::VpnLogic(UiLogic *logic, QObject *parent):
onConnect(); onConnect();
}); });
} }
else {
onConnectionStateChanged(VpnProtocol::Disconnected);
}
} }
void VpnLogic::onUpdatePage() void VpnLogic::onUpdatePage()
{ {
Settings::RouteMode mode = m_settings.routeMode(); Settings::RouteMode mode = m_settings.routeMode();
set_radioButtonVpnModeAllSitesChecked(mode == Settings::VpnAllSites); DockerContainer selectedContainer = m_settings.defaultContainer(m_settings.defaultServerIndex());
set_radioButtonVpnModeForwardSitesChecked(mode == Settings::VpnOnlyForwardSites);
set_radioButtonVpnModeExceptSitesChecked(mode == Settings::VpnAllExceptSites); set_isCustomRoutesSupported (selectedContainer == DockerContainer::OpenVpn ||
selectedContainer == DockerContainer::ShadowSocks||
selectedContainer == DockerContainer::Cloak);
set_radioButtonVpnModeAllSitesChecked(mode == Settings::VpnAllSites || !isCustomRoutesSupported());
set_radioButtonVpnModeForwardSitesChecked(mode == Settings::VpnOnlyForwardSites && isCustomRoutesSupported());
set_radioButtonVpnModeExceptSitesChecked(mode == Settings::VpnAllExceptSites && isCustomRoutesSupported());
const QJsonObject &server = uiLogic()->m_settings.defaultServer(); const QJsonObject &server = uiLogic()->m_settings.defaultServer();
QString serverString = QString("%2 (%3)") QString serverString = QString("%2 (%3)")
@ -49,7 +58,6 @@ void VpnLogic::onUpdatePage()
.arg(server.value(config_key::hostName).toString()); .arg(server.value(config_key::hostName).toString());
set_labelCurrentServer(serverString); set_labelCurrentServer(serverString);
DockerContainer selectedContainer = m_settings.defaultContainer(m_settings.defaultServerIndex());
QString selectedContainerName = ContainerProps::containerHumanNames().value(selectedContainer); QString selectedContainerName = ContainerProps::containerHumanNames().value(selectedContainer);
set_labelCurrentService(selectedContainerName); set_labelCurrentService(selectedContainerName);

View file

@ -24,6 +24,8 @@ class VpnLogic : public PageLogicBase
AUTO_PROPERTY(QString, labelErrorText) AUTO_PROPERTY(QString, labelErrorText)
AUTO_PROPERTY(QString, labelVersionText) AUTO_PROPERTY(QString, labelVersionText)
AUTO_PROPERTY(bool, isCustomRoutesSupported)
AUTO_PROPERTY(bool, radioButtonVpnModeAllSitesChecked) AUTO_PROPERTY(bool, radioButtonVpnModeAllSitesChecked)
AUTO_PROPERTY(bool, radioButtonVpnModeForwardSitesChecked) AUTO_PROPERTY(bool, radioButtonVpnModeForwardSitesChecked)
AUTO_PROPERTY(bool, radioButtonVpnModeExceptSitesChecked) AUTO_PROPERTY(bool, radioButtonVpnModeExceptSitesChecked)

View file

@ -28,7 +28,7 @@ RadioButton {
font.family: "Lato" font.family: "Lato"
font.styleName: "normal" font.styleName: "normal"
font.pixelSize: 16 font.pixelSize: 16
color: "#181922" color: enabled ? "#181922" : "#686972"
verticalAlignment: Text.AlignVCenter verticalAlignment: Text.AlignVCenter
leftPadding: root.indicator.width + root.spacing leftPadding: root.indicator.width + root.spacing
} }

View file

@ -213,6 +213,35 @@ PageBase {
} }
} }
Keys.onPressed: {
if (event.key == Qt.Key_PageUp) {
let idx = tb.indexAt(1, tb.contentY)
tb.positionViewAtIndex(idx-20, ListView.Beginning)
event.accepted = true
}
else if (event.key == Qt.Key_PageDown) {
let idx = tb.indexAt(1, tb.contentY)
tb.positionViewAtIndex(idx+20, ListView.Beginning)
event.accepted = true
}
else if (event.key == Qt.Key_Home) {
tb.positionViewAtBeginning()
event.accepted = true
}
else if (event.key == Qt.Key_End) {
tb.positionViewAtEnd()
event.accepted = true
}
else if (event.key == Qt.Key_Delete) {
let items = []
for(let i = 0; i < visualModel.count; i++){
if (visualModel.items.get(i).inMultiSelect) items.push(i)
}
SitesLogic.onPushButtonSitesDeleteClicked(items)
event.accepted = true
}
}
ListView { ListView {
id: tb id: tb
x: 20 x: 20
@ -241,12 +270,11 @@ PageBase {
font.pixelSize: 16 font.pixelSize: 16
text: qsTr("Delete selected") text: qsTr("Delete selected")
onClicked: { onClicked: {
var items = [] let items = []
for(var i = 0; i < visualModel.count; i++){ for(let i = 0; i < visualModel.count; i++){
if (visualModel.items.get(i).inMultiSelect) items.push(i) if (visualModel.items.get(i).inMultiSelect) items.push(i)
} }
console.debug(items)
SitesLogic.onPushButtonSitesDeleteClicked(items) SitesLogic.onPushButtonSitesDeleteClicked(items)
} }
} }

View file

@ -259,6 +259,7 @@ PageBase {
onClicked: VpnLogic.onRadioButtonVpnModeAllSitesClicked(true) onClicked: VpnLogic.onRadioButtonVpnModeAllSitesClicked(true)
} }
RadioButtonType { RadioButtonType {
enabled: VpnLogic.isCustomRoutesSupported
x: 0 x: 0
y: 60 y: 60
width: 341 width: 341
@ -268,6 +269,7 @@ PageBase {
onClicked: VpnLogic.onRadioButtonVpnModeExceptSitesClicked(true) onClicked: VpnLogic.onRadioButtonVpnModeExceptSitesClicked(true)
} }
RadioButtonType { RadioButtonType {
enabled: VpnLogic.isCustomRoutesSupported
x: 0 x: 0
y: 30 y: 30
width: 341 width: 341

View file

@ -149,24 +149,6 @@ void UiLogic::initalizeUiLogic()
connect(m_notificationHandler, &NotificationHandler::connectRequested, vpnLogic(), &VpnLogic::onConnect); connect(m_notificationHandler, &NotificationHandler::connectRequested, vpnLogic(), &VpnLogic::onConnect);
connect(m_notificationHandler, &NotificationHandler::disconnectRequested, vpnLogic(), &VpnLogic::onDisconnect); connect(m_notificationHandler, &NotificationHandler::disconnectRequested, vpnLogic(), &VpnLogic::onDisconnect);
// if (QOperatingSystemVersion::current() <= QOperatingSystemVersion::Windows7) {
// needToHideCustomTitlebar = true;
// }
//#if defined Q_OS_MAC
// fixWidget(this);
// needToHideCustomTitlebar = true;
//#endif
// if (needToHideCustomTitlebar) {
// ui->widget_tittlebar->hide();
// resize(width(), 640);
// ui->stackedWidget_main->move(0,0);
// }
// Post initialization
//emit goToPage(Page::Start, true, false);
if (m_settings.serversCount() > 0) { if (m_settings.serversCount() > 0) {
if (m_settings.defaultServerIndex() < 0) m_settings.setDefaultServer(0); if (m_settings.defaultServerIndex() < 0) m_settings.setDefaultServer(0);
emit goToPage(Page::Vpn, true, false); emit goToPage(Page::Vpn, true, false);
@ -176,37 +158,9 @@ void UiLogic::initalizeUiLogic()
} }
selectedServerIndex = m_settings.defaultServerIndex(); selectedServerIndex = m_settings.defaultServerIndex();
//goToPage(Page::ServerContainers, true, false);
//goToPage(Page::NewServerProtocols, true, false);
//onGotoProtocolPage(Proto::OpenVpn);
//ui->pushButton_general_settings_exit->hide();
qInfo().noquote() << QString("Started %1 version %2").arg(APPLICATION_NAME).arg(APP_VERSION); qInfo().noquote() << QString("Started %1 version %2").arg(APPLICATION_NAME).arg(APP_VERSION);
qInfo().noquote() << QString("%1 (%2)").arg(QSysInfo::prettyProductName()).arg(QSysInfo::currentCpuArchitecture()); qInfo().noquote() << QString("%1 (%2)").arg(QSysInfo::prettyProductName()).arg(QSysInfo::currentCpuArchitecture());
vpnLogic()->onConnectionStateChanged(VpnProtocol::Disconnected);
// m_ipAddressValidator.setRegExp(Utils::ipAddressRegExp());
// m_ipAddressPortValidator.setRegExp(Utils::ipAddressPortRegExp());
// m_ipNetwok24Validator.setRegExp(Utils::ipNetwork24RegExp());
// m_ipPortValidator.setRegExp(Utils::ipPortRegExp());
// ui->lineEdit_new_server_ip->setValidator(&m_ipAddressPortValidator);
// ui->lineEdit_network_settings_dns1->setValidator(&m_ipAddressValidator);
// ui->lineEdit_network_settings_dns2->setValidator(&m_ipAddressValidator);
// ui->lineEdit_proto_openvpn_subnet->setValidator(&m_ipNetwok24Validator);
// ui->lineEdit_proto_openvpn_port->setValidator(&m_ipPortValidator);
// ui->lineEdit_proto_shadowsocks_port->setValidator(&m_ipPortValidator);
// ui->lineEdit_proto_cloak_port->setValidator(&m_ipPortValidator);
} }
QString UiLogic::getDialogConnectErrorText() const QString UiLogic::getDialogConnectErrorText() const
@ -225,10 +179,13 @@ void UiLogic::setDialogConnectErrorText(const QString &dialogConnectErrorText)
void UiLogic::showOnStartup() void UiLogic::showOnStartup()
{ {
if (! m_settings.isStartMinimized()) { if (! m_settings.isStartMinimized()) {
show(); emit show();
} else { }
#if defined Q_OS_MACX else {
setDockIconVisible(false); #ifdef Q_OS_WIN
emit hide();
#elif defined Q_OS_MACX
// TODO: fix: setDockIconVisible(false);
#endif #endif
} }
} }
@ -302,7 +259,6 @@ void UiLogic::keyPressEvent(Qt::Key key)
// break; // break;
// } // }
//if (! ui->stackedWidget_main->isAnimationRunning() && ui->stackedWidget_main->currentWidget()->isEnabled()) {
emit closePage(); emit closePage();
//} //}
default: default:

View file

@ -213,20 +213,6 @@ private:
NotificationHandler* m_notificationHandler; NotificationHandler* m_notificationHandler;
// QRegExpValidator m_ipAddressValidator;
// QRegExpValidator m_ipAddressPortValidator;
// QRegExpValidator m_ipNetwok24Validator;
// QRegExpValidator m_ipPortValidator;
// QPoint offset;
// bool needToHideCustomTitlebar = false;
// void showEvent(QShowEvent *event) override;
// void hideEvent(QHideEvent *event) override;
// QStack<Page> pagesStack;
int selectedServerIndex = -1; // server index to use when proto settings page opened int selectedServerIndex = -1; // server index to use when proto settings page opened
DockerContainer selectedDockerContainer; // same DockerContainer selectedDockerContainer; // same
ServerCredentials installCredentials; // used to save cred between pages new_server and new_server_protocols and wizard ServerCredentials installCredentials; // used to save cred between pages new_server and new_server_protocols and wizard

View file

@ -35,6 +35,7 @@ public:
static QRegExp ipPortRegExp() { return QRegExp("^()([1-9]|[1-5]?[0-9]{2,4}|6[1-4][0-9]{3}|65[1-4][0-9]{2}|655[1-2][0-9]|6553[1-5])$"); } static QRegExp ipPortRegExp() { return QRegExp("^()([1-9]|[1-5]?[0-9]{2,4}|6[1-4][0-9]{3}|65[1-4][0-9]{2}|655[1-2][0-9]|6553[1-5])$"); }
static QRegExp domainRegExp() { return QRegExp("(((?!\\-))(xn\\-\\-)?[a-z0-9\\-_]{0,61}[a-z0-9]{1,1}\\.)*(xn\\-\\-)?([a-z0-9\\-]{1,61}|[a-z0-9\\-]{1,30})\\.[a-z]{2,}"); }
static bool processIsRunning(const QString& fileName); static bool processIsRunning(const QString& fileName);
static void killProcessByName(const QString &name); static void killProcessByName(const QString &name);