This commit is contained in:
Pokamest Nikak 2021-09-03 22:15:05 +03:00
parent 135b96a280
commit 84ca7e8879
11 changed files with 446 additions and 425 deletions

View file

@ -38,9 +38,7 @@
#include "vpnconnection.h"
#include <functional>
#if defined Q_OS_MAC || defined Q_OS_LINUX
#include "ui/macos_util.h"
#endif
#include "../uilogic.h"
using namespace amnezia;
using namespace PageEnumNS;
@ -48,7 +46,44 @@ using namespace PageEnumNS;
ServerListLogic::ServerListLogic(UiLogic *uiLogic, QObject *parent):
QObject(parent),
m_uiLogic(uiLogic)
m_uiLogic(uiLogic),
m_serverListModel{new ServersModel(this)}
{
}
QObject* ServerListLogic::getServerListModel() const
{
return m_serverListModel;
}
void ServerListLogic::onServerListPushbuttonDefaultClicked(int index)
{
m_settings.setDefaultServer(index);
updateServersListPage();
}
void ServerListLogic::onServerListPushbuttonSettingsClicked(int index)
{
m_uiLogic->selectedServerIndex = index;
m_uiLogic->goToPage(Page::ServerSettings);
}
void ServerListLogic::updateServersListPage()
{
const QJsonArray &servers = m_settings.serversArray();
int defaultServer = m_settings.defaultServerIndex();
std::vector<ServerModelContent> serverListContent;
for(int i = 0; i < servers.size(); i++) {
ServerModelContent c;
auto server = servers.at(i).toObject();
c.desc = server.value(config_key::description).toString();
c.address = server.value(config_key::hostName).toString();
if (c.desc.isEmpty()) {
c.desc = c.address;
}
c.isDefault = (i == defaultServer);
serverListContent.push_back(c);
}
m_serverListModel->setContent(serverListContent);
}

View file

@ -3,6 +3,7 @@
#include "../pages.h"
#include "settings.h"
#include "../serversmodel.h"
class UiLogic;
@ -10,10 +11,20 @@ class ServerListLogic : public QObject
{
Q_OBJECT
public:
Q_INVOKABLE void updateServersListPage();
Q_PROPERTY(QObject* serverListModel READ getServerListModel CONSTANT)
Q_INVOKABLE void onServerListPushbuttonDefaultClicked(int index);
Q_INVOKABLE void onServerListPushbuttonSettingsClicked(int index);
public:
explicit ServerListLogic(UiLogic *uiLogic, QObject *parent = nullptr);
~ServerListLogic() = default;
QObject* getServerListModel() const;
signals:
@ -29,6 +40,7 @@ private:
Settings m_settings;
UiLogic *m_uiLogic;
ServersModel* m_serverListModel;
};
#endif // SERVER_LIST_LOGIC_H

View file

@ -1,46 +1,34 @@
#include <QApplication>
#include <QClipboard>
#include <QDebug>
#include <QDesktopServices>
#include <QFileDialog>
#include <QHBoxLayout>
#include <QHostInfo>
#include <QItemSelectionModel>
#include <QJsonDocument>
#include <QJsonObject>
#include <QKeyEvent>
#include <QMenu>
#include <QMessageBox>
#include <QMetaEnum>
#include <QSysInfo>
#include <QThread>
#include <QTimer>
#include <QRegularExpression>
#include <QSaveFile>
//#include <QApplication>
//#include <QClipboard>
//#include <QDebug>
//#include <QDesktopServices>
//#include <QFileDialog>
//#include <QHBoxLayout>
//#include <QHostInfo>
//#include <QItemSelectionModel>
//#include <QJsonDocument>
//#include <QJsonObject>
//#include <QKeyEvent>
//#include <QMenu>
//#include <QMessageBox>
//#include <QMetaEnum>
//#include <QSysInfo>
//#include <QThread>
//#include <QTimer>
//#include <QRegularExpression>
//#include <QSaveFile>
//#include "configurators/cloak_configurator.h"
//#include "configurators/vpn_configurator.h"
//#include "configurators/openvpn_configurator.h"
//#include "configurators/shadowsocks_configurator.h"
//#include "configurators/ssh_configurator.h"
//#include "core/servercontroller.h"
//#include "core/server_defs.h"
//#include "core/errorstrings.h"
//#include "protocols/protocols_defs.h"
//#include "protocols/shadowsocksvpnprotocol.h"
#include "debug.h"
#include "defines.h"
#include "ServerSettingsLogic.h"
#include "utils.h"
#include "vpnconnection.h"
#include <functional>
#if defined Q_OS_MAC || defined Q_OS_LINUX
#include "ui/macos_util.h"
#endif
#include "../uilogic.h"
#include "core/errorstrings.h"
#include <core/servercontroller.h>
using namespace amnezia;
using namespace PageEnumNS;
@ -48,7 +36,269 @@ using namespace PageEnumNS;
ServerSettingsLogic::ServerSettingsLogic(UiLogic *uiLogic, QObject *parent):
QObject(parent),
m_uiLogic(uiLogic)
m_uiLogic(uiLogic),
m_pageServerSettingsEnabled{true},
m_labelServerSettingsWaitInfoVisible{true},
m_pushButtonServerSettingsClearVisible{true},
m_pushButtonServerSettingsClearClientCacheVisible{true},
m_pushButtonServerSettingsShareFullVisible{true},
m_pushButtonServerSettingsClearText{tr("Clear server from Amnezia software")},
m_pushButtonServerSettingsClearClientCacheText{tr("Clear client cached profile")}
{
}
void ServerSettingsLogic::updateServerSettingsPage()
{
setLabelServerSettingsWaitInfoVisible(false);
setLabelServerSettingsWaitInfoText("");
setPushButtonServerSettingsClearVisible(m_settings.haveAuthData(m_uiLogic->selectedServerIndex));
setPushButtonServerSettingsClearClientCacheVisible(m_settings.haveAuthData(m_uiLogic->selectedServerIndex));
setPushButtonServerSettingsShareFullVisible(m_settings.haveAuthData(m_uiLogic->selectedServerIndex));
QJsonObject server = m_settings.server(m_uiLogic->selectedServerIndex);
QString port = server.value(config_key::port).toString();
setLabelServerSettingsServerText(QString("%1@%2%3%4")
.arg(server.value(config_key::userName).toString())
.arg(server.value(config_key::hostName).toString())
.arg(port.isEmpty() ? "" : ":")
.arg(port));
setLineEditServerSettingsDescriptionText(server.value(config_key::description).toString());
QString selectedContainerName = m_settings.defaultContainerName(m_uiLogic->selectedServerIndex);
setLabelServerSettingsCurrentVpnProtocolText(tr("Protocol: ") + selectedContainerName);
}
bool ServerSettingsLogic::getPageServerSettingsEnabled() const
{
return m_pageServerSettingsEnabled;
}
void ServerSettingsLogic::setPageServerSettingsEnabled(bool pageServerSettingsEnabled)
{
if (m_pageServerSettingsEnabled != pageServerSettingsEnabled) {
m_pageServerSettingsEnabled = pageServerSettingsEnabled;
emit pageServerSettingsEnabledChanged();
}
}
void ServerSettingsLogic::onPushButtonServerSettingsClearServer()
{
setPageServerSettingsEnabled(false);
setPushButtonServerSettingsClearText(tr("Uninstalling Amnezia software..."));
if (m_settings.defaultServerIndex() == m_uiLogic->selectedServerIndex) {
m_uiLogic->onDisconnect();
}
ErrorCode e = ServerController::removeAllContainers(m_settings.serverCredentials(m_uiLogic->selectedServerIndex));
ServerController::disconnectFromHost(m_settings.serverCredentials(m_uiLogic->selectedServerIndex));
if (e) {
m_uiLogic->setDialogConnectErrorText(
tr("Error occurred while configuring server.") + "\n" +
errorString(e) + "\n" +
tr("See logs for details."));
emit m_uiLogic->showConnectErrorDialog();
}
else {
setLabelServerSettingsWaitInfoVisible(true);
setLabelServerSettingsWaitInfoText(tr("Amnezia server successfully uninstalled"));
}
m_settings.setContainers(m_uiLogic->selectedServerIndex, {});
m_settings.setDefaultContainer(m_uiLogic->selectedServerIndex, DockerContainer::None);
setPageServerSettingsEnabled(true);
setPushButtonServerSettingsClearText(tr("Clear server from Amnezia software"));
}
void ServerSettingsLogic::onPushButtonServerSettingsForgetServer()
{
if (m_settings.defaultServerIndex() == m_uiLogic->selectedServerIndex && m_uiLogic->m_vpnConnection->isConnected()) {
m_uiLogic->onDisconnect();
}
m_settings.removeServer(m_uiLogic->selectedServerIndex);
if (m_settings.defaultServerIndex() == m_uiLogic->selectedServerIndex) {
m_settings.setDefaultServer(0);
}
else if (m_settings.defaultServerIndex() > m_uiLogic->selectedServerIndex) {
m_settings.setDefaultServer(m_settings.defaultServerIndex() - 1);
}
if (m_settings.serversCount() == 0) {
m_settings.setDefaultServer(-1);
}
m_uiLogic->selectedServerIndex = -1;
// TODO_REFACT updateServersListPage();
if (m_settings.serversCount() == 0) {
m_uiLogic->setStartPage(Page::Start);
}
else {
m_uiLogic->closePage();
}
}
bool ServerSettingsLogic::getLabelServerSettingsWaitInfoVisible() const
{
return m_labelServerSettingsWaitInfoVisible;
}
void ServerSettingsLogic::setLabelServerSettingsWaitInfoVisible(bool labelServerSettingsWaitInfoVisible)
{
if (m_labelServerSettingsWaitInfoVisible != labelServerSettingsWaitInfoVisible) {
m_labelServerSettingsWaitInfoVisible = labelServerSettingsWaitInfoVisible;
emit labelServerSettingsWaitInfoVisibleChanged();
}
}
QString ServerSettingsLogic::getLabelServerSettingsWaitInfoText() const
{
return m_labelServerSettingsWaitInfoText;
}
void ServerSettingsLogic::setLabelServerSettingsWaitInfoText(const QString &labelServerSettingsWaitInfoText)
{
if (m_labelServerSettingsWaitInfoText != labelServerSettingsWaitInfoText) {
m_labelServerSettingsWaitInfoText = labelServerSettingsWaitInfoText;
emit labelServerSettingsWaitInfoTextChanged();
}
}
bool ServerSettingsLogic::getPushButtonServerSettingsClearVisible() const
{
return m_pushButtonServerSettingsClearVisible;
}
void ServerSettingsLogic::setPushButtonServerSettingsClearVisible(bool pushButtonServerSettingsClearVisible)
{
if (m_pushButtonServerSettingsClearVisible != pushButtonServerSettingsClearVisible) {
m_pushButtonServerSettingsClearVisible = pushButtonServerSettingsClearVisible;
emit pushButtonServerSettingsClearVisibleChanged();
}
}
bool ServerSettingsLogic::getPushButtonServerSettingsClearClientCacheVisible() const
{
return m_pushButtonServerSettingsClearClientCacheVisible;
}
void ServerSettingsLogic::setPushButtonServerSettingsClearClientCacheVisible(bool pushButtonServerSettingsClearClientCacheVisible)
{
if (m_pushButtonServerSettingsClearClientCacheVisible != pushButtonServerSettingsClearClientCacheVisible) {
m_pushButtonServerSettingsClearClientCacheVisible = pushButtonServerSettingsClearClientCacheVisible;
emit pushButtonServerSettingsClearClientCacheVisibleChanged();
}
}
bool ServerSettingsLogic::getPushButtonServerSettingsShareFullVisible() const
{
return m_pushButtonServerSettingsShareFullVisible;
}
void ServerSettingsLogic::setPushButtonServerSettingsShareFullVisible(bool pushButtonServerSettingsShareFullVisible)
{
if (m_pushButtonServerSettingsShareFullVisible != pushButtonServerSettingsShareFullVisible) {
m_pushButtonServerSettingsShareFullVisible = pushButtonServerSettingsShareFullVisible;
emit pushButtonServerSettingsShareFullVisibleChanged();
}
}
QString ServerSettingsLogic::getLabelServerSettingsServerText() const
{
return m_labelServerSettingsServerText;
}
void ServerSettingsLogic::setLabelServerSettingsServerText(const QString &labelServerSettingsServerText)
{
if (m_labelServerSettingsServerText != labelServerSettingsServerText) {
m_labelServerSettingsServerText = labelServerSettingsServerText;
emit labelServerSettingsServerTextChanged();
}
}
QString ServerSettingsLogic::getLineEditServerSettingsDescriptionText() const
{
return m_lineEditServerSettingsDescriptionText;
}
void ServerSettingsLogic::setLineEditServerSettingsDescriptionText(const QString &lineEditServerSettingsDescriptionText)
{
if (m_lineEditServerSettingsDescriptionText != lineEditServerSettingsDescriptionText) {
m_lineEditServerSettingsDescriptionText = lineEditServerSettingsDescriptionText;
emit lineEditServerSettingsDescriptionTextChanged();
}
}
QString ServerSettingsLogic::getLabelServerSettingsCurrentVpnProtocolText() const
{
return m_labelServerSettingsCurrentVpnProtocolText;
}
void ServerSettingsLogic::setLabelServerSettingsCurrentVpnProtocolText(const QString &labelServerSettingsCurrentVpnProtocolText)
{
if (m_labelServerSettingsCurrentVpnProtocolText != labelServerSettingsCurrentVpnProtocolText) {
m_labelServerSettingsCurrentVpnProtocolText = labelServerSettingsCurrentVpnProtocolText;
emit labelServerSettingsCurrentVpnProtocolTextChanged();
}
}
QString ServerSettingsLogic::getPushButtonServerSettingsClearText() const
{
return m_pushButtonServerSettingsClearText;
}
void ServerSettingsLogic::setPushButtonServerSettingsClearText(const QString &pushButtonServerSettingsClearText)
{
if (m_pushButtonServerSettingsClearText != pushButtonServerSettingsClearText) {
m_pushButtonServerSettingsClearText = pushButtonServerSettingsClearText;
emit pushButtonServerSettingsClearTextChanged();
}
}
void ServerSettingsLogic::onPushButtonServerSettingsClearClientCacheClicked()
{
setPushButtonServerSettingsClearClientCacheText(tr("Cache cleared"));
const auto &containers = m_settings.containers(m_uiLogic->selectedServerIndex);
for (DockerContainer container: containers.keys()) {
m_settings.clearLastConnectionConfig(m_uiLogic->selectedServerIndex, container);
}
QTimer::singleShot(3000, this, [this]() {
setPushButtonServerSettingsClearClientCacheText(tr("Clear client cached profile"));
});
}
void ServerSettingsLogic::onLineEditServerSettingsDescriptionEditingFinished()
{
const QString &newText = getLineEditServerSettingsDescriptionText();
QJsonObject server = m_settings.server(m_uiLogic->selectedServerIndex);
server.insert(config_key::description, newText);
m_settings.editServer(m_uiLogic->selectedServerIndex, server);
// TODO_REFACT updateServersListPage();
}
QString ServerSettingsLogic::getPushButtonServerSettingsClearClientCacheText() const
{
return m_pushButtonServerSettingsClearClientCacheText;
}
void ServerSettingsLogic::setPushButtonServerSettingsClearClientCacheText(const QString &pushButtonServerSettingsClearClientCacheText)
{
if (m_pushButtonServerSettingsClearClientCacheText != pushButtonServerSettingsClearClientCacheText) {
m_pushButtonServerSettingsClearClientCacheText = pushButtonServerSettingsClearClientCacheText;
emit pushButtonServerSettingsClearClientCacheTextChanged();
}
}
void ServerSettingsLogic::onPushButtonServerSettingsShareFullClicked()
{
m_uiLogic->updateSharingPage(m_uiLogic->selectedServerIndex, m_settings.serverCredentials(m_uiLogic->selectedServerIndex), DockerContainer::None);
m_uiLogic->goToPage(Page::ShareConnection);
}

View file

@ -10,13 +10,69 @@ class ServerSettingsLogic : public QObject
{
Q_OBJECT
Q_INVOKABLE void updateServerSettingsPage();
Q_PROPERTY(bool pageServerSettingsEnabled READ getPageServerSettingsEnabled WRITE setPageServerSettingsEnabled NOTIFY pageServerSettingsEnabledChanged)
Q_PROPERTY(bool labelServerSettingsWaitInfoVisible READ getLabelServerSettingsWaitInfoVisible WRITE setLabelServerSettingsWaitInfoVisible NOTIFY labelServerSettingsWaitInfoVisibleChanged)
Q_PROPERTY(QString labelServerSettingsWaitInfoText READ getLabelServerSettingsWaitInfoText WRITE setLabelServerSettingsWaitInfoText NOTIFY labelServerSettingsWaitInfoTextChanged)
Q_PROPERTY(QString pushButtonServerSettingsClearText READ getPushButtonServerSettingsClearText WRITE setPushButtonServerSettingsClearText NOTIFY pushButtonServerSettingsClearTextChanged)
Q_PROPERTY(QString pushButtonServerSettingsClearClientCacheText READ getPushButtonServerSettingsClearClientCacheText WRITE setPushButtonServerSettingsClearClientCacheText NOTIFY pushButtonServerSettingsClearClientCacheTextChanged)
Q_PROPERTY(bool pushButtonServerSettingsClearVisible READ getPushButtonServerSettingsClearVisible WRITE setPushButtonServerSettingsClearVisible NOTIFY pushButtonServerSettingsClearVisibleChanged)
Q_PROPERTY(bool pushButtonServerSettingsClearClientCacheVisible READ getPushButtonServerSettingsClearClientCacheVisible WRITE setPushButtonServerSettingsClearClientCacheVisible NOTIFY pushButtonServerSettingsClearClientCacheVisibleChanged)
Q_PROPERTY(bool pushButtonServerSettingsShareFullVisible READ getPushButtonServerSettingsShareFullVisible WRITE setPushButtonServerSettingsShareFullVisible NOTIFY pushButtonServerSettingsShareFullVisibleChanged)
Q_PROPERTY(QString labelServerSettingsServerText READ getLabelServerSettingsServerText WRITE setLabelServerSettingsServerText NOTIFY labelServerSettingsServerTextChanged)
Q_PROPERTY(QString lineEditServerSettingsDescriptionText READ getLineEditServerSettingsDescriptionText WRITE setLineEditServerSettingsDescriptionText NOTIFY lineEditServerSettingsDescriptionTextChanged)
Q_PROPERTY(QString labelServerSettingsCurrentVpnProtocolText READ getLabelServerSettingsCurrentVpnProtocolText WRITE setLabelServerSettingsCurrentVpnProtocolText NOTIFY labelServerSettingsCurrentVpnProtocolTextChanged)
Q_INVOKABLE void onPushButtonServerSettingsClearServer();
Q_INVOKABLE void onPushButtonServerSettingsForgetServer();
Q_INVOKABLE void onPushButtonServerSettingsShareFullClicked();
Q_INVOKABLE void onPushButtonServerSettingsClearClientCacheClicked();
Q_INVOKABLE void onLineEditServerSettingsDescriptionEditingFinished();
public:
explicit ServerSettingsLogic(UiLogic *uiLogic, QObject *parent = nullptr);
~ServerSettingsLogic() = default;
bool getPageServerSettingsEnabled() const;
void setPageServerSettingsEnabled(bool pageServerSettingsEnabled);
bool getLabelServerSettingsWaitInfoVisible() const;
void setLabelServerSettingsWaitInfoVisible(bool labelServerSettingsWaitInfoVisible);
QString getLabelServerSettingsWaitInfoText() const;
void setLabelServerSettingsWaitInfoText(const QString &labelServerSettingsWaitInfoText);
bool getPushButtonServerSettingsClearVisible() const;
void setPushButtonServerSettingsClearVisible(bool pushButtonServerSettingsClearVisible);
bool getPushButtonServerSettingsClearClientCacheVisible() const;
void setPushButtonServerSettingsClearClientCacheVisible(bool pushButtonServerSettingsClearClientCacheVisible);
bool getPushButtonServerSettingsShareFullVisible() const;
void setPushButtonServerSettingsShareFullVisible(bool pushButtonServerSettingsShareFullVisible);
QString getLabelServerSettingsServerText() const;
void setLabelServerSettingsServerText(const QString &labelServerSettingsServerText);
QString getLineEditServerSettingsDescriptionText() const;
void setLineEditServerSettingsDescriptionText(const QString &lineEditServerSettingsDescriptionText);
QString getLabelServerSettingsCurrentVpnProtocolText() const;
void setLabelServerSettingsCurrentVpnProtocolText(const QString &labelServerSettingsCurrentVpnProtocolText);
QString getPushButtonServerSettingsClearText() const;
void setPushButtonServerSettingsClearText(const QString &pushButtonServerSettingsClearText);
QString getPushButtonServerSettingsClearClientCacheText() const;
void setPushButtonServerSettingsClearClientCacheText(const QString &pushButtonServerSettingsClearClientCacheText);
signals:
void pageServerSettingsEnabledChanged();
void labelServerSettingsWaitInfoVisibleChanged();
void labelServerSettingsWaitInfoTextChanged();
void pushButtonServerSettingsClearTextChanged();
void pushButtonServerSettingsClearVisibleChanged();
void pushButtonServerSettingsClearClientCacheVisibleChanged();
void pushButtonServerSettingsShareFullVisibleChanged();
void pushButtonServerSettingsClearClientCacheTextChanged();
void labelServerSettingsServerTextChanged();
void lineEditServerSettingsDescriptionTextChanged();
void labelServerSettingsCurrentVpnProtocolTextChanged();
private:
@ -29,7 +85,18 @@ private:
Settings m_settings;
UiLogic *m_uiLogic;
bool m_pageServerSettingsEnabled;
bool m_labelServerSettingsWaitInfoVisible;
bool m_pushButtonServerSettingsClearVisible;
bool m_pushButtonServerSettingsClearClientCacheVisible;
bool m_pushButtonServerSettingsShareFullVisible;
QString m_lineEditServerSettingsDescriptionText;
QString m_labelServerSettingsCurrentVpnProtocolText;
QString m_labelServerSettingsServerText;
QString m_labelServerSettingsWaitInfoText;
QString m_pushButtonServerSettingsClearText;
QString m_pushButtonServerSettingsClearClientCacheText;
};
#endif // SERVER_SETTINGS_LOGIC_H

View file

@ -1,5 +1,6 @@
#include <QDebug>
#include <QDesktopServices>
#include <QFile>
#include <QHostInfo>