supported container on connection (#736)

This commit is contained in:
Nethius 2024-04-07 01:42:17 +07:00 committed by GitHub
parent e39efb1d68
commit 10ea9b418a
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
7 changed files with 77 additions and 46 deletions

View file

@ -62,6 +62,11 @@ void ConnectionController::openConnection()
DockerContainer container = DockerContainer container =
qvariant_cast<DockerContainer>(m_serversModel->data(serverIndex, ServersModel::Roles::DefaultContainerRole)); qvariant_cast<DockerContainer>(m_serversModel->data(serverIndex, ServersModel::Roles::DefaultContainerRole));
if (!m_containersModel->isSupportedByCurrentPlatform(container)) {
emit connectionErrorOccurred(tr("The selected protocol is not supported on the current platform"));
return;
}
if (container == DockerContainer::None) { if (container == DockerContainer::None) {
emit connectionErrorOccurred(tr("VPN Protocols is not installed.\n Please install VPN container at first")); emit connectionErrorOccurred(tr("VPN Protocols is not installed.\n Please install VPN container at first"));
return; return;

View file

@ -188,19 +188,24 @@ void InstallController::installServer(const DockerContainer container, const QMa
VpnConfigurationsController vpnConfigurationController(m_settings); VpnConfigurationsController vpnConfigurationController(m_settings);
for (auto iterator = installedContainers.begin(); iterator != installedContainers.end(); iterator++) { for (auto iterator = installedContainers.begin(); iterator != installedContainers.end(); iterator++) {
auto containerConfig = iterator.value(); auto containerConfig = iterator.value();
auto errorCode =
vpnConfigurationController.createProtocolConfigForContainer(m_processedServerCredentials, iterator.key(), containerConfig);
if (errorCode) {
emit installationErrorOccurred(errorString(errorCode));
return;
}
containerConfigs.append(containerConfig);
errorCode = m_clientManagementModel->appendClient(iterator.key(), serverCredentials, containerConfig, if (ContainerProps::isSupportedByCurrentPlatform(container)) {
QString("Admin [%1]").arg(QSysInfo::prettyProductName())); auto errorCode =
if (errorCode) { vpnConfigurationController.createProtocolConfigForContainer(m_processedServerCredentials, iterator.key(), containerConfig);
emit installationErrorOccurred(errorString(errorCode)); if (errorCode) {
return; emit installationErrorOccurred(errorString(errorCode));
return;
}
containerConfigs.append(containerConfig);
errorCode = m_clientManagementModel->appendClient(iterator.key(), serverCredentials, containerConfig,
QString("Admin [%1]").arg(QSysInfo::prettyProductName()));
if (errorCode) {
emit installationErrorOccurred(errorString(errorCode));
return;
}
} else {
containerConfigs.append(containerConfig);
} }
} }
@ -222,18 +227,23 @@ void InstallController::installContainer(const DockerContainer container, const
QJsonObject containerConfig = m_containersModel->getContainerConfig(iterator.key()); QJsonObject containerConfig = m_containersModel->getContainerConfig(iterator.key());
if (containerConfig.isEmpty()) { if (containerConfig.isEmpty()) {
containerConfig = iterator.value(); containerConfig = iterator.value();
auto errorCode = vpnConfigurationController.createProtocolConfigForContainer(serverCredentials, iterator.key(), containerConfig);
if (errorCode) {
emit installationErrorOccurred(errorString(errorCode));
return;
}
m_serversModel->addContainerConfig(iterator.key(), containerConfig);
errorCode = m_clientManagementModel->appendClient(iterator.key(), serverCredentials, containerConfig, if (ContainerProps::isSupportedByCurrentPlatform(container)) {
QString("Admin [%1]").arg(QSysInfo::prettyProductName())); auto errorCode = vpnConfigurationController.createProtocolConfigForContainer(serverCredentials, iterator.key(), containerConfig);
if (errorCode) { if (errorCode) {
emit installationErrorOccurred(errorString(errorCode)); emit installationErrorOccurred(errorString(errorCode));
return; return;
}
m_serversModel->addContainerConfig(iterator.key(), containerConfig);
errorCode = m_clientManagementModel->appendClient(iterator.key(), serverCredentials, containerConfig,
QString("Admin [%1]").arg(QSysInfo::prettyProductName()));
if (errorCode) {
emit installationErrorOccurred(errorString(errorCode));
return;
}
} else {
m_serversModel->addContainerConfig(iterator.key(), containerConfig);
} }
if (container != iterator.key()) { // skip the newly installed container if (container != iterator.key()) { // skip the newly installed container
@ -279,22 +289,28 @@ void InstallController::scanServerForInstalledContainers()
VpnConfigurationsController vpnConfigurationController(m_settings); VpnConfigurationsController vpnConfigurationController(m_settings);
for (auto iterator = installedContainers.begin(); iterator != installedContainers.end(); iterator++) { for (auto iterator = installedContainers.begin(); iterator != installedContainers.end(); iterator++) {
QJsonObject containerConfig = m_containersModel->getContainerConfig(iterator.key()); auto container = iterator.key();
QJsonObject containerConfig = m_containersModel->getContainerConfig(container);
if (containerConfig.isEmpty()) { if (containerConfig.isEmpty()) {
containerConfig = iterator.value(); containerConfig = iterator.value();
auto errorCode =
vpnConfigurationController.createProtocolConfigForContainer(serverCredentials, iterator.key(), containerConfig);
if (errorCode) {
emit installationErrorOccurred(errorString(errorCode));
return;
}
m_serversModel->addContainerConfig(iterator.key(), containerConfig);
errorCode = m_clientManagementModel->appendClient(iterator.key(), serverCredentials, containerConfig, if (ContainerProps::isSupportedByCurrentPlatform(container)) {
QString("Admin [%1]").arg(QSysInfo::prettyProductName())); auto errorCode =
if (errorCode) { vpnConfigurationController.createProtocolConfigForContainer(serverCredentials, container, containerConfig);
emit installationErrorOccurred(errorString(errorCode)); if (errorCode) {
return; emit installationErrorOccurred(errorString(errorCode));
return;
}
m_serversModel->addContainerConfig(container, containerConfig);
errorCode = m_clientManagementModel->appendClient(container, serverCredentials, containerConfig,
QString("Admin [%1]").arg(QSysInfo::prettyProductName()));
if (errorCode) {
emit installationErrorOccurred(errorString(errorCode));
return;
}
} else {
m_serversModel->addContainerConfig(container, containerConfig);
} }
isInstalledContainerAddedToGui = true; isInstalledContainerAddedToGui = true;

View file

@ -83,6 +83,16 @@ QJsonObject ContainersModel::getContainerConfig(const int containerIndex)
return qvariant_cast<QJsonObject>(data(index(containerIndex), ConfigRole)); return qvariant_cast<QJsonObject>(data(index(containerIndex), ConfigRole));
} }
bool ContainersModel::isSupportedByCurrentPlatform(const int containerIndex)
{
return qvariant_cast<bool>(data(index(containerIndex), IsSupportedRole));
}
bool ContainersModel::isServiceContainer(const int containerIndex)
{
return qvariant_cast<amnezia::ServiceType>(data(index(containerIndex), ServiceTypeRole) == ServiceType::Other);
}
QHash<int, QByteArray> ContainersModel::roleNames() const QHash<int, QByteArray> ContainersModel::roleNames() const
{ {
QHash<int, QByteArray> roles; QHash<int, QByteArray> roles;

View file

@ -49,6 +49,9 @@ public slots:
QJsonObject getContainerConfig(const int containerIndex); QJsonObject getContainerConfig(const int containerIndex);
bool isSupportedByCurrentPlatform(const int containerIndex);
bool isServiceContainer(const int containerIndex);
protected: protected:
QHash<int, QByteArray> roleNames() const override; QHash<int, QByteArray> roleNames() const override;

View file

@ -405,8 +405,9 @@ void ServersModel::addContainerConfig(const int containerIndex, const QJsonObjec
server.insert(config_key::containers, containers); server.insert(config_key::containers, containers);
auto defaultContainer = server.value(config_key::defaultContainer).toString(); auto defaultContainer = server.value(config_key::defaultContainer).toString();
if ((ContainerProps::containerFromString(defaultContainer) == DockerContainer::None if (ContainerProps::containerFromString(defaultContainer) == DockerContainer::None
|| ContainerProps::containerService(container) != ServiceType::Other)) { && ContainerProps::containerService(container) != ServiceType::Other
&& ContainerProps::isSupportedByCurrentPlatform(container)) {
server.insert(config_key::defaultContainer, ContainerProps::containerToString(container)); server.insert(config_key::defaultContainer, ContainerProps::containerToString(container));
} }

View file

@ -51,7 +51,7 @@ ListView {
imageSource: "qrc:/images/controls/download.svg" imageSource: "qrc:/images/controls/download.svg"
showImage: !isInstalled showImage: !isInstalled
checkable: isInstalled && !ConnectionController.isConnected && isSupported checkable: isInstalled && !ConnectionController.isConnected
checked: proxyDefaultServerContainersModel.mapToSource(index) === ServersModel.getDefaultServerData("defaultContainer") checked: proxyDefaultServerContainersModel.mapToSource(index) === ServersModel.getDefaultServerData("defaultContainer")
onClicked: { onClicked: {
@ -64,11 +64,6 @@ ListView {
containersDropDown.close() containersDropDown.close()
ServersModel.setDefaultContainer(ServersModel.defaultIndex, proxyDefaultServerContainersModel.mapToSource(index)) ServersModel.setDefaultContainer(ServersModel.defaultIndex, proxyDefaultServerContainersModel.mapToSource(index))
} else { } else {
if (!isSupported && isInstalled) {
PageController.showErrorMessage(qsTr("The selected protocol is not supported on the current platform"))
return
}
ContainersModel.setProcessedContainerIndex(proxyDefaultServerContainersModel.mapToSource(index)) ContainersModel.setProcessedContainerIndex(proxyDefaultServerContainersModel.mapToSource(index))
InstallController.setShouldCreateServer(false) InstallController.setShouldCreateServer(false)
PageController.goToPage(PageEnum.PageSetupWizardProtocolSettings) PageController.goToPage(PageEnum.PageSetupWizardProtocolSettings)

View file

@ -25,8 +25,9 @@ PageType {
target: InstallController target: InstallController
function onInstallContainerFinished(finishedMessage, isServiceInstall) { function onInstallContainerFinished(finishedMessage, isServiceInstall) {
if (!ConnectionController.isConnected && !isServiceInstall) { var containerIndex = ContainersModel.getProcessedContainerIndex()
ServersModel.setDefaultContainer(ServersModel.processedIndex, ContainersModel.getProcessedContainerIndex()) if (!ConnectionController.isConnected && !ContainersModel.isServiceContainer(containerIndex)) {
ServersModel.setDefaultContainer(ServersModel.processedIndex, containerIndex)
} }
PageController.closePage() // close installing page PageController.closePage() // close installing page