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

122 lines
5.0 KiB
C++
Raw Normal View History

2021-09-16 16:19:14 +03:00
#include "ServerContainersLogic.h"
2021-09-07 19:26:58 +03:00
#include "ShareConnectionLogic.h"
#include "ServerConfiguringProgressLogic.h"
#include <QApplication>
2021-09-07 19:26:58 +03:00
#include "protocols/CloakLogic.h"
#include "protocols/OpenVpnLogic.h"
#include "protocols/ShadowSocksLogic.h"
#include "core/servercontroller.h"
#include <functional>
#include "../uilogic.h"
2022-01-28 16:03:21 +03:00
#include "../pages_logic/VpnLogic.h"
#include "vpnconnection.h"
2023-02-22 10:01:43 +03:00
#include "core/errorstrings.h"
2022-01-28 16:03:21 +03:00
2021-09-07 19:26:58 +03:00
2021-09-07 21:01:56 +03:00
ServerContainersLogic::ServerContainersLogic(UiLogic *logic, QObject *parent):
PageLogicBase(logic, parent)
2021-09-07 19:26:58 +03:00
{
}
void ServerContainersLogic::onUpdatePage()
2021-09-07 19:26:58 +03:00
{
2021-09-16 16:19:14 +03:00
ContainersModel *c_model = qobject_cast<ContainersModel *>(uiLogic()->containersModel());
2023-02-20 09:46:50 +03:00
c_model->setSelectedServerIndex(uiLogic()->m_selectedServerIndex);
2021-09-16 16:19:14 +03:00
ProtocolsModel *p_model = qobject_cast<ProtocolsModel *>(uiLogic()->protocolsModel());
2023-02-20 09:46:50 +03:00
p_model->setSelectedServerIndex(uiLogic()->m_selectedServerIndex);
2023-02-20 09:46:50 +03:00
set_isManagedServer(m_settings->haveAuthData(uiLogic()->m_selectedServerIndex));
uiLogic()->m_installCredentials = m_settings->serverCredentials(uiLogic()->m_selectedServerIndex);
emit updatePage();
2021-09-07 19:26:58 +03:00
}
void ServerContainersLogic::onPushButtonProtoSettingsClicked(DockerContainer c, Proto p)
2021-09-16 16:19:14 +03:00
{
2021-09-19 14:31:38 +03:00
qDebug()<< "ServerContainersLogic::onPushButtonProtoSettingsClicked" << c << p;
2023-02-20 09:46:50 +03:00
uiLogic()->m_selectedDockerContainer = c;
uiLogic()->protocolLogic(p)->updateProtocolPage(m_settings->protocolConfig(uiLogic()->m_selectedServerIndex, uiLogic()->m_selectedDockerContainer, p),
uiLogic()->m_selectedDockerContainer,
m_settings->haveAuthData(uiLogic()->m_selectedServerIndex));
2021-09-16 16:19:14 +03:00
2021-09-19 14:31:38 +03:00
emit uiLogic()->goToProtocolPage(p);
2021-09-16 16:19:14 +03:00
}
2021-09-19 14:31:38 +03:00
void ServerContainersLogic::onPushButtonDefaultClicked(DockerContainer c)
{
2023-02-20 09:46:50 +03:00
if (m_settings->defaultContainer(uiLogic()->m_selectedServerIndex) == c) return;
2022-01-28 16:03:21 +03:00
2023-02-20 09:46:50 +03:00
m_settings->setDefaultContainer(uiLogic()->m_selectedServerIndex, c);
2021-11-17 15:01:48 +03:00
uiLogic()->onUpdateAllPages();
2022-01-28 16:03:21 +03:00
2023-02-20 09:46:50 +03:00
if (uiLogic()->m_selectedServerIndex != m_settings->defaultServerIndex()) return;
2022-01-28 16:03:21 +03:00
if (!uiLogic()->m_vpnConnection) return;
if (!uiLogic()->m_vpnConnection->isConnected()) return;
2022-08-29 01:32:42 +03:00
uiLogic()->pageLogic<VpnLogic>()->onDisconnect();
uiLogic()->pageLogic<VpnLogic>()->onConnect();
2021-09-19 14:31:38 +03:00
}
void ServerContainersLogic::onPushButtonShareClicked(DockerContainer c)
{
2023-02-20 09:46:50 +03:00
uiLogic()->pageLogic<ShareConnectionLogic>()->updateSharingPage(uiLogic()->m_selectedServerIndex, c);
2021-09-19 14:31:38 +03:00
emit uiLogic()->goToPage(Page::ShareConnection);
}
2021-09-07 19:26:58 +03:00
void ServerContainersLogic::onPushButtonRemoveClicked(DockerContainer container)
2021-09-07 19:26:58 +03:00
{
//buttonSetEnabledFunc(false);
2023-02-20 09:46:50 +03:00
ErrorCode e = m_serverController->removeContainer(m_settings->serverCredentials(uiLogic()->m_selectedServerIndex), container);
m_settings->removeContainerConfig(uiLogic()->m_selectedServerIndex, container);
//buttonSetEnabledFunc(true);
2023-02-20 09:46:50 +03:00
if (m_settings->defaultContainer(uiLogic()->m_selectedServerIndex) == container) {
const auto &c = m_settings->containers(uiLogic()->m_selectedServerIndex);
if (c.isEmpty()) m_settings->setDefaultContainer(uiLogic()->m_selectedServerIndex, DockerContainer::None);
else m_settings->setDefaultContainer(uiLogic()->m_selectedServerIndex, c.keys().first());
}
2021-11-17 15:01:48 +03:00
uiLogic()->onUpdateAllPages();
}
2021-09-07 19:26:58 +03:00
void ServerContainersLogic::onPushButtonContinueClicked(DockerContainer c, int port, TransportProto tp)
{
2022-08-25 17:35:28 +03:00
QJsonObject config = m_serverController->createContainerInitialConfig(c, port, tp);
2021-09-07 19:26:58 +03:00
emit uiLogic()->goToPage(Page::ServerConfiguringProgress);
qApp->processEvents();
2021-09-07 19:26:58 +03:00
bool isServerCreated = false;
ErrorCode errorCode = uiLogic()->addAlreadyInstalledContainersGui(false, isServerCreated);
2023-02-22 10:01:43 +03:00
if (errorCode == ErrorCode::NoError) {
if (!uiLogic()->isContainerAlreadyAddedToGui(c)) {
2023-02-22 10:01:43 +03:00
auto installAction = [this, c, &config]() {
return m_serverController->setupContainer(m_settings->serverCredentials(uiLogic()->m_selectedServerIndex), c, config);
};
errorCode = uiLogic()->pageLogic<ServerConfiguringProgressLogic>()->doInstallAction(installAction);
if (errorCode == ErrorCode::NoError) {
m_settings->setContainerConfig(uiLogic()->m_selectedServerIndex, c, config);
if (ContainerProps::containerService(c) == ServiceType::Vpn) {
m_settings->setDefaultContainer(uiLogic()->m_selectedServerIndex, c);
}
2023-02-20 09:46:50 +03:00
}
2023-02-22 10:01:43 +03:00
} else {
emit uiLogic()->showWarningMessage("Attention! The container you are trying to install is already installed on the server. "
"All installed containers have been added to the application ");
}
2021-09-07 19:26:58 +03:00
2023-02-22 10:01:43 +03:00
uiLogic()->onUpdateAllPages();
}
if (errorCode != ErrorCode::NoError) {
emit uiLogic()->showWarningMessage(tr("Error occurred while configuring server.") + "\n" +
tr("Error message: ") + errorString(errorCode) + "\n" +
tr("See logs for details."));
}
emit uiLogic()->closePage();
}