From 7aac9f9d0e1a6971cf4acc178e810d3d04fda30f Mon Sep 17 00:00:00 2001 From: "vladimir.kuznetsov" Date: Thu, 21 Dec 2023 17:47:34 +0700 Subject: [PATCH] fixed hang after creating configuration on connection - config created on connection is displayed as admin (platform name) on the client management page - added config creation time on the client management page --- client/amnezia_application.cpp | 1 + client/configurators/vpn_configurator.h | 1 + client/ui/models/clientManagementModel.cpp | 15 +++++++++++---- client/ui/models/clientManagementModel.h | 3 ++- client/ui/qml/Pages2/PageShare.qml | 2 +- client/vpnconnection.cpp | 6 +++++- 6 files changed, 21 insertions(+), 7 deletions(-) diff --git a/client/amnezia_application.cpp b/client/amnezia_application.cpp index 40aab515..34c0862b 100644 --- a/client/amnezia_application.cpp +++ b/client/amnezia_application.cpp @@ -330,6 +330,7 @@ void AmneziaApplication::initModels() ServerCredentials credentials) { m_serversModel->reloadContainerConfig(); m_clientManagementModel->appendClient(clientId, clientName, container, credentials); + emit m_configurator->clientModelUpdated(); }); } diff --git a/client/configurators/vpn_configurator.h b/client/configurators/vpn_configurator.h index 61dc2ac6..7164bd8e 100644 --- a/client/configurators/vpn_configurator.h +++ b/client/configurators/vpn_configurator.h @@ -46,6 +46,7 @@ public: signals: void newVpnConfigCreated(const QString &clientId, const QString &clientName, const DockerContainer container, ServerCredentials credentials); + void clientModelUpdated(); }; #endif // VPN_CONFIGURATOR_H diff --git a/client/ui/models/clientManagementModel.cpp b/client/ui/models/clientManagementModel.cpp index 8ec31d02..45495836 100644 --- a/client/ui/models/clientManagementModel.cpp +++ b/client/ui/models/clientManagementModel.cpp @@ -15,6 +15,7 @@ namespace constexpr char clientName[] = "clientName"; constexpr char container[] = "container"; constexpr char userData[] = "userData"; + constexpr char creationDate[] = "creationDate"; } } @@ -40,6 +41,7 @@ QVariant ClientManagementModel::data(const QModelIndex &index, int role) const switch (role) { case ClientNameRole: return userData.value(configKey::clientName).toString(); + case CreationDateRole: return userData.value(configKey::creationDate).toString(); } return QVariant(); @@ -200,19 +202,20 @@ ErrorCode ClientManagementModel::appendClient(const QString &clientId, const QSt for (int i = 0; i < m_clientsTable.size(); i++) { if (m_clientsTable.at(i).toObject().value(configKey::clientId) == clientId) { - return renameClient(i, clientName, container, credentials); + return renameClient(i, clientName, container, credentials, true); } } - beginResetModel(); + beginInsertRows(QModelIndex(), rowCount(), 1); QJsonObject client; client[configKey::clientId] = clientId; QJsonObject userData; userData[configKey::clientName] = clientName; + userData[configKey::creationDate] = QDateTime::currentDateTime().toString(); client[configKey::userData] = userData; m_clientsTable.push_back(client); - endResetModel(); + endInsertRows(); const QByteArray clientsTableString = QJsonDocument(m_clientsTable).toJson(); @@ -229,11 +232,14 @@ ErrorCode ClientManagementModel::appendClient(const QString &clientId, const QSt } ErrorCode ClientManagementModel::renameClient(const int row, const QString &clientName, const DockerContainer container, - ServerCredentials credentials) + ServerCredentials credentials, bool addTimeStamp) { auto client = m_clientsTable.at(row).toObject(); auto userData = client[configKey::userData].toObject(); userData[configKey::clientName] = clientName; + if (addTimeStamp) { + userData[configKey::creationDate] = QDateTime::currentDateTime().toString(); + } client[configKey::userData] = userData; m_clientsTable.replace(row, client); @@ -369,5 +375,6 @@ QHash ClientManagementModel::roleNames() const { QHash roles; roles[ClientNameRole] = "clientName"; + roles[CreationDateRole] = "creationDate"; return roles; } diff --git a/client/ui/models/clientManagementModel.h b/client/ui/models/clientManagementModel.h index 6b6adf68..6df7f802 100644 --- a/client/ui/models/clientManagementModel.h +++ b/client/ui/models/clientManagementModel.h @@ -14,6 +14,7 @@ class ClientManagementModel : public QAbstractListModel public: enum Roles { ClientNameRole = Qt::UserRole + 1, + CreationDateRole }; ClientManagementModel(std::shared_ptr settings, QObject *parent = nullptr); @@ -26,7 +27,7 @@ public slots: ErrorCode appendClient(const QString &clientId, const QString &clientName, const DockerContainer container, ServerCredentials credentials); ErrorCode renameClient(const int row, const QString &userName, const DockerContainer container, - ServerCredentials credentials); + ServerCredentials credentials, bool addTimeStamp = false); ErrorCode revokeClient(const int index, const DockerContainer container, ServerCredentials credentials); protected: diff --git a/client/ui/qml/Pages2/PageShare.qml b/client/ui/qml/Pages2/PageShare.qml index 38010b8f..41e9497a 100644 --- a/client/ui/qml/Pages2/PageShare.qml +++ b/client/ui/qml/Pages2/PageShare.qml @@ -578,7 +578,7 @@ PageType { Layout.bottomMargin: 24 headerText: clientName - descriptionText: serverSelector.text + descriptionText: qsTr("Creation date: ") + creationDate } BasicButtonType { diff --git a/client/vpnconnection.cpp b/client/vpnconnection.cpp index 80163ef1..d67767bd 100644 --- a/client/vpnconnection.cpp +++ b/client/vpnconnection.cpp @@ -4,6 +4,7 @@ #include #include #include +#include #include #include @@ -246,7 +247,10 @@ QString VpnConnection::createVpnConfigurationForProto(int serverIndex, const Ser m_settings->setProtocolConfig(serverIndex, container, proto, protoObject); } - emit m_configurator->newVpnConfigCreated(clientId, "unnamed client", container, credentials); + QEventLoop wait; + emit m_configurator->newVpnConfigCreated(clientId, QString("Admin [%1]").arg(QSysInfo::prettyProductName()), container, credentials); + QObject::connect(m_configurator.get(), &VpnConfigurator::clientModelUpdated, &wait, &QEventLoop::quit); + wait.exec(); } return configData;