Files
amnezia-client/client/ui/pages_logic/ServerSettingsLogic.cpp
T

132 lines
4.9 KiB
C++
Raw Normal View History

2021-09-03 20:17:13 +03:00
#include "ServerSettingsLogic.h"
#include "vpnconnection.h"
2021-09-03 22:15:05 +03:00
#include "../uilogic.h"
2021-09-06 11:44:03 +03:00
#include "ServerListLogic.h"
#include "ShareConnectionLogic.h"
2021-09-07 21:01:56 +03:00
#include "VpnLogic.h"
2021-09-03 22:15:05 +03:00
#include "core/errorstrings.h"
#include <core/servercontroller.h>
2021-09-03 20:17:13 +03:00
2021-09-07 21:01:56 +03:00
ServerSettingsLogic::ServerSettingsLogic(UiLogic *logic, QObject *parent):
PageLogicBase(logic, parent),
2021-09-08 14:23:02 +03:00
m_labelWaitInfoVisible{true},
m_pushButtonClearVisible{true},
m_pushButtonClearClientCacheVisible{true},
m_pushButtonShareFullVisible{true},
m_pushButtonClearText{tr("Clear server from Amnezia software")},
m_pushButtonClearClientCacheText{tr("Clear client cached profile")}
2021-09-03 22:15:05 +03:00
{
}
2021-09-08 14:23:02 +03:00
void ServerSettingsLogic::updatePage()
2021-09-03 22:15:05 +03:00
{
2021-09-08 14:23:02 +03:00
set_labelWaitInfoVisible(false);
set_labelWaitInfoText("");
set_pushButtonClearVisible(m_settings.haveAuthData(uiLogic()->selectedServerIndex));
set_pushButtonClearClientCacheVisible(m_settings.haveAuthData(uiLogic()->selectedServerIndex));
set_pushButtonShareFullVisible(m_settings.haveAuthData(uiLogic()->selectedServerIndex));
2021-09-07 21:01:56 +03:00
QJsonObject server = m_settings.server(uiLogic()->selectedServerIndex);
2021-09-03 22:15:05 +03:00
QString port = server.value(config_key::port).toString();
2021-09-08 14:23:02 +03:00
set_labelServerText(QString("%1@%2%3%4")
2021-09-03 22:15:05 +03:00
.arg(server.value(config_key::userName).toString())
.arg(server.value(config_key::hostName).toString())
.arg(port.isEmpty() ? "" : ":")
.arg(port));
2021-09-08 14:23:02 +03:00
set_lineEditDescriptionText(server.value(config_key::description).toString());
2021-09-07 21:01:56 +03:00
QString selectedContainerName = m_settings.defaultContainerName(uiLogic()->selectedServerIndex);
2021-09-08 14:23:02 +03:00
set_labelCurrentVpnProtocolText(tr("Protocol: ") + selectedContainerName);
2021-09-03 22:15:05 +03:00
}
2021-09-08 14:23:02 +03:00
void ServerSettingsLogic::onPushButtonClearServer()
2021-09-03 22:15:05 +03:00
{
2021-09-08 14:23:02 +03:00
set_pageEnabled(false);
set_pushButtonClearText(tr("Uninstalling Amnezia software..."));
2021-09-03 22:15:05 +03:00
2021-09-07 21:01:56 +03:00
if (m_settings.defaultServerIndex() == uiLogic()->selectedServerIndex) {
uiLogic()->vpnLogic()->onDisconnect();
2021-09-03 22:15:05 +03:00
}
2021-09-07 21:01:56 +03:00
ErrorCode e = ServerController::removeAllContainers(m_settings.serverCredentials(uiLogic()->selectedServerIndex));
ServerController::disconnectFromHost(m_settings.serverCredentials(uiLogic()->selectedServerIndex));
2021-09-03 22:15:05 +03:00
if (e) {
2021-09-07 21:01:56 +03:00
uiLogic()->setDialogConnectErrorText(
2021-09-03 22:15:05 +03:00
tr("Error occurred while configuring server.") + "\n" +
errorString(e) + "\n" +
tr("See logs for details."));
2021-09-07 21:01:56 +03:00
emit uiLogic()->showConnectErrorDialog();
2021-09-03 22:15:05 +03:00
}
else {
2021-09-08 14:23:02 +03:00
set_labelWaitInfoVisible(true);
set_labelWaitInfoText(tr("Amnezia server successfully uninstalled"));
2021-09-03 22:15:05 +03:00
}
2021-09-07 21:01:56 +03:00
m_settings.setContainers(uiLogic()->selectedServerIndex, {});
m_settings.setDefaultContainer(uiLogic()->selectedServerIndex, DockerContainer::None);
2021-09-03 22:15:05 +03:00
2021-09-08 14:23:02 +03:00
set_pageEnabled(true);
set_pushButtonClearText(tr("Clear server from Amnezia software"));
2021-09-03 22:15:05 +03:00
}
2021-09-08 14:23:02 +03:00
void ServerSettingsLogic::onPushButtonForgetServer()
2021-09-03 22:15:05 +03:00
{
2021-09-07 21:01:56 +03:00
if (m_settings.defaultServerIndex() == uiLogic()->selectedServerIndex && uiLogic()->m_vpnConnection->isConnected()) {
uiLogic()->vpnLogic()->onDisconnect();
2021-09-03 22:15:05 +03:00
}
2021-09-07 21:01:56 +03:00
m_settings.removeServer(uiLogic()->selectedServerIndex);
2021-09-03 22:15:05 +03:00
2021-09-07 21:01:56 +03:00
if (m_settings.defaultServerIndex() == uiLogic()->selectedServerIndex) {
2021-09-03 22:15:05 +03:00
m_settings.setDefaultServer(0);
}
2021-09-07 21:01:56 +03:00
else if (m_settings.defaultServerIndex() > uiLogic()->selectedServerIndex) {
2021-09-03 22:15:05 +03:00
m_settings.setDefaultServer(m_settings.defaultServerIndex() - 1);
}
if (m_settings.serversCount() == 0) {
m_settings.setDefaultServer(-1);
}
2021-09-07 21:01:56 +03:00
uiLogic()->selectedServerIndex = -1;
2021-09-03 22:15:05 +03:00
2021-09-08 14:23:02 +03:00
uiLogic()->serverListLogic()->updatePage();
2021-09-03 22:15:05 +03:00
if (m_settings.serversCount() == 0) {
2021-09-07 21:01:56 +03:00
uiLogic()->setStartPage(Page::Start);
2021-09-03 22:15:05 +03:00
}
else {
2021-09-07 21:01:56 +03:00
uiLogic()->closePage();
2021-09-03 22:15:05 +03:00
}
}
2021-09-08 14:23:02 +03:00
void ServerSettingsLogic::onPushButtonClearClientCacheClicked()
2021-09-03 22:15:05 +03:00
{
2021-09-08 14:23:02 +03:00
set_pushButtonClearClientCacheText(tr("Cache cleared"));
2021-09-03 22:15:05 +03:00
2021-09-07 21:01:56 +03:00
const auto &containers = m_settings.containers(uiLogic()->selectedServerIndex);
2021-09-03 22:15:05 +03:00
for (DockerContainer container: containers.keys()) {
2021-09-07 21:01:56 +03:00
m_settings.clearLastConnectionConfig(uiLogic()->selectedServerIndex, container);
2021-09-03 22:15:05 +03:00
}
QTimer::singleShot(3000, this, [this]() {
2021-09-08 14:23:02 +03:00
set_pushButtonClearClientCacheText(tr("Clear client cached profile"));
2021-09-03 22:15:05 +03:00
});
}
2021-09-08 14:23:02 +03:00
void ServerSettingsLogic::onLineEditDescriptionEditingFinished()
2021-09-03 22:15:05 +03:00
{
2021-09-08 14:23:02 +03:00
const QString &newText = lineEditDescriptionText();
2021-09-07 21:01:56 +03:00
QJsonObject server = m_settings.server(uiLogic()->selectedServerIndex);
2021-09-03 22:15:05 +03:00
server.insert(config_key::description, newText);
2021-09-07 21:01:56 +03:00
m_settings.editServer(uiLogic()->selectedServerIndex, server);
2021-09-08 14:23:02 +03:00
uiLogic()->serverListLogic()->updatePage();
2021-09-03 22:15:05 +03:00
}
2021-09-08 14:23:02 +03:00
void ServerSettingsLogic::onPushButtonShareFullClicked()
2021-09-03 22:15:05 +03:00
{
2021-09-07 21:01:56 +03:00
uiLogic()->shareConnectionLogic()->updateSharingPage(uiLogic()->selectedServerIndex, m_settings.serverCredentials(uiLogic()->selectedServerIndex), DockerContainer::None);
uiLogic()->goToPage(Page::ShareConnection);
2021-09-03 20:17:13 +03:00
}