Various types containers support

This commit is contained in:
pokamest 2021-09-20 21:51:28 +03:00
parent 0d9f1ba95b
commit 157d7c4f23
39 changed files with 609 additions and 479 deletions

View file

@ -9,7 +9,7 @@ ContainersModel::ContainersModel(QObject *parent) :
int ContainersModel::rowCount(const QModelIndex &parent) const
{
Q_UNUSED(parent);
return amnezia::allContainers().size();
return ContainerProps::allContainers().size();
}
QHash<int, QByteArray> ContainersModel::roleNames() const {
@ -17,36 +17,32 @@ QHash<int, QByteArray> ContainersModel::roleNames() const {
roles[NameRole] = "name_role";
roles[DescRole] = "desc_role";
roles[DefaultRole] = "default_role";
roles[isVpnTypeRole] = "is_vpn_role";
roles[isOtherTypeRole] = "is_other_role";
roles[isInstalledRole] = "is_installed_role";
roles[ServiceTypeRole] = "service_type_role";
roles[IsInstalledRole] = "is_installed_role";
return roles;
}
QVariant ContainersModel::data(const QModelIndex &index, int role) const
{
if (!index.isValid() || index.row() < 0
|| index.row() >= amnezia::allContainers().size()) {
|| index.row() >= ContainerProps::allContainers().size()) {
return QVariant();
}
DockerContainer c = amnezia::allContainers().at(index.row());
DockerContainer c = ContainerProps::allContainers().at(index.row());
if (role == NameRole) {
return containerHumanNames().value(c);
return ContainerProps::containerHumanNames().value(c);
}
if (role == DescRole) {
return containerDescriptions().value(c);
return ContainerProps::containerDescriptions().value(c);
}
if (role == DefaultRole) {
return c == m_settings.defaultContainer(m_selectedServerIndex);
}
if (role == isVpnTypeRole) {
return isContainerVpnType(c);
if (role == ServiceTypeRole) {
return ContainerProps::containerService(c);
}
// if (role == isOtherTypeRole) {
// return isContainerVpnType(c)
// }
if (role == isInstalledRole) {
if (role == IsInstalledRole) {
return m_settings.containers(m_selectedServerIndex).contains(c);
}
return QVariant();

View file

@ -19,15 +19,14 @@ public:
NameRole = Qt::UserRole + 1,
DescRole,
DefaultRole,
isVpnTypeRole,
isOtherTypeRole,
isInstalledRole
ServiceTypeRole,
IsInstalledRole
};
int rowCount(const QModelIndex &parent = QModelIndex()) const override;
QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override;
void setSelectedServerIndex(int index);
Q_INVOKABLE void setSelectedServerIndex(int index);
protected:
QHash<int, QByteArray> roleNames() const override;

View file

@ -9,41 +9,37 @@ ProtocolsModel::ProtocolsModel(QObject *parent) :
int ProtocolsModel::rowCount(const QModelIndex &parent) const
{
Q_UNUSED(parent);
return amnezia::allProtocols().size();
return ProtocolProps::allProtocols().size();
}
QHash<int, QByteArray> ProtocolsModel::roleNames() const {
QHash<int, QByteArray> roles;
roles[NameRole] = "name_role";
roles[DescRole] = "desc_role";
roles[isVpnTypeRole] = "is_vpn_role";
roles[isOtherTypeRole] = "is_other_role";
roles[isInstalledRole] = "is_installed_role";
roles[ServiceTypeRole] = "service_type_role";
roles[IsInstalledRole] = "is_installed_role";
return roles;
}
QVariant ProtocolsModel::data(const QModelIndex &index, int role) const
{
if (!index.isValid() || index.row() < 0
|| index.row() >= amnezia::allContainers().size()) {
|| index.row() >= ContainerProps::allContainers().size()) {
return QVariant();
}
Protocol p = amnezia::allProtocols().at(index.row());
Protocol p = ProtocolProps::allProtocols().at(index.row());
if (role == NameRole) {
return protocolHumanNames().value(p);
return ProtocolProps::protocolHumanNames().value(p);
}
if (role == DescRole) {
return protocolDescriptions().value(p);
return ProtocolProps::protocolDescriptions().value(p);
}
if (role == isVpnTypeRole) {
return isProtocolVpnType(p);
if (role == ServiceTypeRole) {
return ProtocolProps::protocolService(p);
}
// if (role == isOtherTypeRole) {
// return isContainerVpnType(c)
// }
if (role == isInstalledRole) {
return protocolsForContainer(m_selectedDockerContainer).contains(p);
if (role == IsInstalledRole) {
return ContainerProps::protocolsForContainer(m_selectedDockerContainer).contains(p);
}
return QVariant();
}

View file

@ -18,9 +18,8 @@ public:
enum SiteRoles {
NameRole = Qt::UserRole + 1,
DescRole,
isVpnTypeRole,
isOtherTypeRole,
isInstalledRole
ServiceTypeRole,
IsInstalledRole
};
int rowCount(const QModelIndex &parent = QModelIndex()) const override;

View file

@ -8,7 +8,7 @@ namespace PageEnumNS
{
Q_NAMESPACE
enum class Page {Start = 0, NewServer, NewServerProtocols, Vpn,
Wizard, WizardLow, WizardMedium, WizardHigh, WizardVpnMode, ServerConfiguring,
Wizard, WizardLow, WizardMedium, WizardHigh, WizardVpnMode, ServerConfiguringProgress,
GeneralSettings, AppSettings, NetworkSettings, ServerSettings,
ServerContainers, ServersList, ShareConnection, Sites,
ProtocolSettings};

View file

@ -3,27 +3,9 @@
NewServerProtocolsLogic::NewServerProtocolsLogic(UiLogic *logic, QObject *parent):
PageLogicBase(logic, parent),
m_pushButtonSettingsCloakChecked{false},
m_pushButtonSettingsSsChecked{false},
m_pushButtonSettingsOpenvpnChecked{false},
m_lineEditCloakPortText{},
m_lineEditCloakSiteText{},
m_lineEditSsPortText{},
m_comboBoxSsCipherText{"chacha20-ietf-poly1305"},
m_lineEditOpenvpnPortText{},
m_comboBoxOpenvpnProtoText{"udp"},
m_frameSettingsParentWireguardVisible{false},
m_checkBoxCloakChecked{true},
m_checkBoxSsChecked{false},
m_checkBoxOpenVpnChecked{false},
m_progressBarConnectionMinimum{0},
m_progressBarConnectionMaximum{100}
{
set_frameSettingsParentWireguardVisible(false);
connect(this, &NewServerProtocolsLogic::pushButtonConfigureClicked, this, [this](){
uiLogic()->installServer(getInstallConfigsFromProtocolsPage());
});
}
@ -31,57 +13,23 @@ void NewServerProtocolsLogic::updatePage()
{
set_progressBarConnectionMinimum(0);
set_progressBarConnectionMaximum(300);
set_pushButtonSettingsCloakChecked(true);
set_pushButtonSettingsCloakChecked(false);
set_pushButtonSettingsSsChecked(true);
set_pushButtonSettingsSsChecked(false);
set_lineEditCloakPortText(amnezia::protocols::cloak::defaultPort);
set_lineEditCloakSiteText(amnezia::protocols::cloak::defaultRedirSite);
set_lineEditSsPortText(amnezia::protocols::shadowsocks::defaultPort);
set_comboBoxSsCipherText(amnezia::protocols::shadowsocks::defaultCipher);
set_lineEditOpenvpnPortText(amnezia::protocols::openvpn::defaultPort);
set_comboBoxOpenvpnProtoText(amnezia::protocols::openvpn::defaultTransportProto);
}
QMap<DockerContainer, QJsonObject> NewServerProtocolsLogic::getInstallConfigsFromProtocolsPage() const
void NewServerProtocolsLogic::onPushButtonConfigureClicked(DockerContainer c, int port, TransportProto tp)
{
QJsonObject cloakConfig {
{ config_key::container, amnezia::containerToString(DockerContainer::OpenVpnOverCloak) },
{ config_key::cloak, QJsonObject {
{ config_key::port, lineEditCloakPortText() },
{ config_key::site, lineEditCloakSiteText() }}
}
};
QJsonObject ssConfig {
{ config_key::container, amnezia::containerToString(DockerContainer::OpenVpnOverShadowSocks) },
{ config_key::shadowsocks, QJsonObject {
{ config_key::port, lineEditSsPortText() },
{ config_key::cipher, comboBoxSsCipherText() }}
}
};
QJsonObject openVpnConfig {
{ config_key::container, amnezia::containerToString(DockerContainer::OpenVpn) },
{ config_key::openvpn, QJsonObject {
{ config_key::port, lineEditOpenvpnPortText() },
{ config_key::transport_proto, comboBoxOpenvpnProtoText() }}
}
};
QMap<DockerContainer, QJsonObject> containers;
Protocol mainProto = ContainerProps::defaultProtocol(c);
if (checkBoxCloakChecked()) {
containers.insert(DockerContainer::OpenVpnOverCloak, cloakConfig);
}
QJsonObject config {
{ config_key::container, ContainerProps::containerToString(c) },
{ ProtocolProps::protoToString(mainProto), QJsonObject {
{ config_key::port, QString::number(port) },
{ config_key::transport_proto, ProtocolProps::transportProtoToString(tp, mainProto) }}
}
};
if (checkBoxSsChecked()) {
containers.insert(DockerContainer::OpenVpnOverShadowSocks, ssConfig);
}
containers.insert(c, config);
if (checkBoxOpenVpnChecked()) {
containers.insert(DockerContainer::OpenVpn, openVpnConfig);
}
return containers;
uiLogic()->installServer(containers);
}

View file

@ -9,33 +9,16 @@ class NewServerProtocolsLogic : public PageLogicBase
{
Q_OBJECT
AUTO_PROPERTY(bool, frameSettingsParentWireguardVisible)
AUTO_PROPERTY(bool, pushButtonSettingsCloakChecked)
AUTO_PROPERTY(bool, pushButtonSettingsSsChecked)
AUTO_PROPERTY(bool, pushButtonSettingsOpenvpnChecked)
AUTO_PROPERTY(QString, lineEditCloakPortText)
AUTO_PROPERTY(QString, lineEditCloakSiteText)
AUTO_PROPERTY(QString, lineEditSsPortText)
AUTO_PROPERTY(QString, comboBoxSsCipherText)
AUTO_PROPERTY(QString, lineEditOpenvpnPortText)
AUTO_PROPERTY(QString, comboBoxOpenvpnProtoText)
AUTO_PROPERTY(bool, checkBoxCloakChecked)
AUTO_PROPERTY(bool, checkBoxSsChecked)
AUTO_PROPERTY(bool, checkBoxOpenVpnChecked)
AUTO_PROPERTY(double, progressBarConnectionMinimum)
AUTO_PROPERTY(double, progressBarConnectionMaximum)
public:
Q_INVOKABLE void updatePage() override;
Q_INVOKABLE void onPushButtonConfigureClicked(DockerContainer c, int port, TransportProto tp);
public:
explicit NewServerProtocolsLogic(UiLogic *uiLogic, QObject *parent = nullptr);
~NewServerProtocolsLogic() = default;
QMap<DockerContainer, QJsonObject> getInstallConfigsFromProtocolsPage() const;
signals:
void pushButtonConfigureClicked();
};
#endif // NEW_SERVER_PROTOCOLS_LOGIC_H

View file

@ -1,6 +1,6 @@
#include "NewServerConfiguringLogic.h"
#include "ServerConfiguringProgressLogic.h"
NewServerConfiguringLogic::NewServerConfiguringLogic(UiLogic *logic, QObject *parent):
ServerConfiguringProgressLogic::ServerConfiguringProgressLogic(UiLogic *logic, QObject *parent):
PageLogicBase(logic, parent),
m_progressBarValue{0},
m_labelWaitInfoVisible{true},

View file

@ -1,11 +1,11 @@
#ifndef NEW_SERVER_CONFIGURING_LOGIC_H
#define NEW_SERVER_CONFIGURING_LOGIC_H
#ifndef SERVER_CONFIGURING_PROGRESS_LOGIC_H
#define SERVER_CONFIGURING_PROGRESS_LOGIC_H
#include "PageLogicBase.h"
class UiLogic;
class NewServerConfiguringLogic : public PageLogicBase
class ServerConfiguringProgressLogic : public PageLogicBase
{
Q_OBJECT
@ -18,8 +18,8 @@ class NewServerConfiguringLogic : public PageLogicBase
AUTO_PROPERTY(QString, progressBarText)
public:
explicit NewServerConfiguringLogic(UiLogic *uiLogic, QObject *parent = nullptr);
~NewServerConfiguringLogic() = default;
explicit ServerConfiguringProgressLogic(UiLogic *uiLogic, QObject *parent = nullptr);
~ServerConfiguringProgressLogic() = default;
};
#endif // NEW_SERVER_CONFIGURING_LOGIC_H
#endif // SERVER_CONFIGURING_PROGRESS_LOGIC_H

View file

@ -59,8 +59,8 @@ void ServerContainersLogic::updateServerContainersPage()
// all containers
QList<DockerContainer> allContainers {
DockerContainer::OpenVpn,
DockerContainer::OpenVpnOverShadowSocks,
DockerContainer::OpenVpnOverCloak,
DockerContainer::ShadowSocks,
DockerContainer::Cloak,
DockerContainer::WireGuard
};
@ -141,8 +141,8 @@ void ServerContainersLogic::setupProtocolsPageConnections()
// all containers
QList<DockerContainer> containers {
DockerContainer::OpenVpn,
DockerContainer::OpenVpnOverShadowSocks,
DockerContainer::OpenVpnOverCloak,
DockerContainer::ShadowSocks,
DockerContainer::Cloak,
DockerContainer::WireGuard
};
using ButtonClickedFunc = void (ServerContainersLogic::*)(bool);

View file

@ -142,10 +142,10 @@ void ShareConnectionLogic::onPushButtonShareAmneziaGenerateClicked()
ServerCredentials credentials = m_settings.serverCredentials(uiLogic()->selectedServerIndex);
QJsonObject containerConfig = m_settings.containerConfig(uiLogic()->selectedServerIndex, uiLogic()->selectedDockerContainer);
containerConfig.insert(config_key::container, containerToString(uiLogic()->selectedDockerContainer));
containerConfig.insert(config_key::container, ContainerProps::containerToString(uiLogic()->selectedDockerContainer));
ErrorCode e = ErrorCode::NoError;
for (Protocol p: amnezia::protocolsForContainer(uiLogic()->selectedDockerContainer)) {
for (Protocol p: ContainerProps::protocolsForContainer(uiLogic()->selectedDockerContainer)) {
QJsonObject protoConfig = m_settings.protocolConfig(uiLogic()->selectedServerIndex, uiLogic()->selectedDockerContainer, p);
QString cfg = VpnConfigurator::genVpnProtocolConfig(credentials, uiLogic()->selectedDockerContainer, containerConfig, p, &e);
@ -155,7 +155,7 @@ void ShareConnectionLogic::onPushButtonShareAmneziaGenerateClicked()
}
protoConfig.insert(config_key::last_config, cfg);
containerConfig.insert(protoToString(p), protoConfig);
containerConfig.insert(ProtocolProps::protoToString(p), protoConfig);
}
QByteArray ba;
@ -165,7 +165,7 @@ void ShareConnectionLogic::onPushButtonShareAmneziaGenerateClicked()
serverConfig.remove(config_key::password);
serverConfig.remove(config_key::port);
serverConfig.insert(config_key::containers, QJsonArray {containerConfig});
serverConfig.insert(config_key::defaultContainer, containerToString(uiLogic()->selectedDockerContainer));
serverConfig.insert(config_key::defaultContainer, ContainerProps::containerToString(uiLogic()->selectedDockerContainer));
ba = QJsonDocument(serverConfig).toJson().toBase64(QByteArray::Base64UrlEncoding | QByteArray::OmitTrailingEquals);
@ -248,8 +248,8 @@ void ShareConnectionLogic::updateSharingPage(int serverIndex, const ServerCreden
set_toolBoxShareConnectionCurrentIndex(share_openvpn);
}
if (container == DockerContainer::OpenVpnOverShadowSocks ||
container == DockerContainer::OpenVpnOverCloak) {
if (container == DockerContainer::ShadowSocks ||
container == DockerContainer::Cloak) {
set_pageShareAmneziaVisible(true);
set_pageShareShadowSocksVisible(true);
@ -287,7 +287,7 @@ void ShareConnectionLogic::updateSharingPage(int serverIndex, const ServerCreden
set_toolBoxShareConnectionCurrentIndex(share_shadowshock);
}
if (container == DockerContainer::OpenVpnOverCloak) {
if (container == DockerContainer::Cloak) {
//ui->toolBox_share_connection->addItem(ui->page_share_amnezia, tr(" Share for Amnezia client"));
set_pageShareCloakVisible(true);
set_plainTextEditShareCloakText(QString(""));
@ -328,9 +328,9 @@ void ShareConnectionLogic::updateSharingPage(int serverIndex, const ServerCreden
// Amnezia sharing
// QJsonObject exportContainer;
// for (Protocol p: protocolsForContainer(container)) {
// QJsonObject protocolConfig = containerConfig.value(protoToString(p)).toObject();
// QJsonObject protocolConfig = containerConfig.value(ProtocolProps::protoToString(p)).toObject();
// protocolConfig.remove(config_key::last_config);
// exportContainer.insert(protoToString(p), protocolConfig);
// exportContainer.insert(ProtocolProps::protoToString(p), protocolConfig);
// }
// exportContainer.insert(config_key::container, containerToString(container));

View file

@ -20,26 +20,26 @@ void WizardLogic::updatePage()
QMap<DockerContainer, QJsonObject> WizardLogic::getInstallConfigsFromWizardPage() const
{
QJsonObject cloakConfig {
{ config_key::container, amnezia::containerToString(DockerContainer::OpenVpnOverCloak) },
{ config_key::cloak, QJsonObject {
{ config_key::container, ContainerProps::containerToString(DockerContainer::Cloak) },
{ ProtocolProps::protoToString(Protocol::Cloak), QJsonObject {
{ config_key::site, lineEditHighWebsiteMaskingText() }}
}
};
QJsonObject ssConfig {
{ config_key::container, amnezia::containerToString(DockerContainer::OpenVpnOverShadowSocks) }
{ config_key::container, ContainerProps::containerToString(DockerContainer::ShadowSocks) }
};
QJsonObject openVpnConfig {
{ config_key::container, amnezia::containerToString(DockerContainer::OpenVpn) }
{ config_key::container, ContainerProps::containerToString(DockerContainer::OpenVpn) }
};
QMap<DockerContainer, QJsonObject> containers;
if (radioButtonHighChecked()) {
containers.insert(DockerContainer::OpenVpnOverCloak, cloakConfig);
containers.insert(DockerContainer::Cloak, cloakConfig);
}
if (radioButtonMediumChecked()) {
containers.insert(DockerContainer::OpenVpnOverShadowSocks, ssConfig);
containers.insert(DockerContainer::ShadowSocks, ssConfig);
}
if (radioButtonLowChecked()) {

View file

@ -38,7 +38,7 @@ void CloakLogic::updateProtocolPage(const QJsonObject &ckConfig, DockerContainer
set_lineEditProtoCloakPortText(ckConfig.value(config_key::port).
toString(protocols::cloak::defaultPort));
set_lineEditProtoCloakPortEnabled(container == DockerContainer::OpenVpnOverCloak);
set_lineEditProtoCloakPortEnabled(container == DockerContainer::Cloak);
}
QJsonObject CloakLogic::getProtocolConfigFromPage(QJsonObject oldConfig)
@ -57,7 +57,7 @@ void CloakLogic::onPushButtonProtoCloakSaveClicked()
QJsonObject containerConfig = m_settings.containerConfig(uiLogic()->selectedServerIndex, uiLogic()->selectedDockerContainer);
QJsonObject newContainerConfig = containerConfig;
newContainerConfig.insert(config_key::cloak, protocolConfig);
newContainerConfig.insert(ProtocolProps::protoToString(Protocol::Cloak), protocolConfig);
UiLogic::PageFunc page_proto_cloak;
page_proto_cloak.setEnabledFunc = [this] (bool enabled) -> void {

View file

@ -69,7 +69,7 @@ void OpenVpnLogic::updateProtocolPage(const QJsonObject &openvpnConfig, DockerCo
bool isTlsAuth = openvpnConfig.value(config_key::tls_auth).toBool(protocols::openvpn::defaultTlsAuth);
set_checkBoxProtoOpenVpnTlsAuthChecked(isTlsAuth);
if (container == DockerContainer::OpenVpnOverShadowSocks) {
if (container == DockerContainer::ShadowSocks) {
set_radioButtonProtoOpenVpnUdpEnabled(false);
set_radioButtonProtoOpenVpnTcpEnabled(false);
set_radioButtonProtoOpenVpnTcpChecked(true);
@ -94,7 +94,7 @@ void OpenVpnLogic::onPushButtonProtoOpenVpnSaveClicked()
QJsonObject containerConfig = m_settings.containerConfig(uiLogic()->selectedServerIndex, uiLogic()->selectedDockerContainer);
QJsonObject newContainerConfig = containerConfig;
newContainerConfig.insert(config_key::openvpn, protocolConfig);
newContainerConfig.insert(ProtocolProps::protoToString(Protocol::OpenVpn), protocolConfig);
UiLogic::PageFunc page_proto_openvpn;
page_proto_openvpn.setEnabledFunc = [this] (bool enabled) -> void {

View file

@ -34,7 +34,7 @@ void ShadowSocksLogic::updateProtocolPage(const QJsonObject &ssConfig, DockerCon
set_lineEditProtoShadowSocksPortText(ssConfig.value(config_key::port).
toString(protocols::shadowsocks::defaultPort));
set_lineEditProtoShadowSocksPortEnabled(container == DockerContainer::OpenVpnOverShadowSocks);
set_lineEditProtoShadowSocksPortEnabled(container == DockerContainer::ShadowSocks);
}
QJsonObject ShadowSocksLogic::getProtocolConfigFromPage(QJsonObject oldConfig)
@ -52,7 +52,7 @@ void ShadowSocksLogic::onPushButtonProtoShadowSocksSaveClicked()
QJsonObject containerConfig = m_settings.containerConfig(uiLogic()->selectedServerIndex, uiLogic()->selectedDockerContainer);
QJsonObject newContainerConfig = containerConfig;
newContainerConfig.insert(config_key::shadowsocks, protocolConfig);
newContainerConfig.insert(ProtocolProps::protoToString(Protocol::ShadowSocks), protocolConfig);
UiLogic::PageFunc page_proto_shadowsocks;
page_proto_shadowsocks.setEnabledFunc = [this] (bool enabled) -> void {
set_pageProtoShadowSocksEnabled(enabled);

View file

@ -3,7 +3,6 @@ import QtQuick.Controls 2.12
Image {
anchors.horizontalCenter: parent.horizontalCenter
anchors.bottom: parent.bottom
anchors.bottomMargin: 30
// width: GC.trW(150)
// height: GC.trH(22)

View file

@ -1,14 +1,15 @@
import QtQuick 2.12
import QtQuick.Controls 2.12
import SortFilterProxyModel 0.2
import ProtocolEnum 1.0
import "./"
import "../../Controls"
import "../../Config"
Drawer {
id: root
signal containerSelected(int id)
property alias selectedIndex: tb.currentIndex
signal containerSelected(int c_index)
property int selectedIndex: -1
property alias modelFilters: proxyModel.filters
z: -3
@ -30,8 +31,22 @@ Drawer {
roleName: "is_installed_role"
value: false },
ValueFilter {
roleName: "is_vpn_role"
value: true }
roleName: "service_type_role"
value: ProtocolEnum.Vpn }
]
}
SortFilterProxyModel {
id: proxyModel_other
sourceModel: UiLogic.containersModel
filters: [
ValueFilter {
roleName: "is_installed_role"
value: false },
ValueFilter {
roleName: "service_type_role"
value: ProtocolEnum.Other }
]
}
@ -60,7 +75,8 @@ Drawer {
ListView {
id: tb
x: 10
width: parent.width - 40
currentIndex: -1
width: parent.width - 20
height: contentItem.height
spacing: 0
@ -104,7 +120,9 @@ Drawer {
anchors.fill: parent
onClicked: {
tb.currentIndex = index
containerSelected(index)
tb_other.currentIndex = -1
containerSelected(proxyModel.mapToSource(index))
selectedIndex = proxyModel.mapToSource(index)
root.close()
}
}
@ -112,64 +130,68 @@ Drawer {
}
// Caption {
// id: cap2
// text: qsTr("Other containers")
// }
Caption {
id: cap2
font.pixelSize: 20
text: qsTr("Other containers")
}
// ListView {
// id: tb_other
// x: 10
// //y: 20
// width: parent.width - 40
// height: contentItem.height
ListView {
id: tb_other
x: 10
currentIndex: -1
width: parent.width - 20
height: contentItem.height
// spacing: 1
// clip: true
// interactive: false
// property int currentRow: -1
// model: UiLogic.containersModel
spacing: 0
clip: true
interactive: false
model: proxyModel_other
// delegate: Item {
// implicitWidth: 170 * 2
// implicitHeight: 30
// Item {
// width: parent.width
// height: 30
// anchors.left: parent.left
// id: c1_other
// Rectangle {
// anchors.top: parent.top
// width: parent.width
// height: 1
// color: "lightgray"
// visible: index !== tb_other.currentRow
// }
// Rectangle {
// anchors.fill: parent
// color: "#63B4FB"
// visible: index === tb_other.currentRow
delegate: Item {
implicitWidth: 170 * 2
implicitHeight: 30
Item {
width: parent.width
height: 30
anchors.left: parent.left
id: c1_other
Rectangle {
anchors.top: parent.top
width: parent.width
height: 1
color: "lightgray"
visible: index !== tb_other.currentIndex
}
Rectangle {
anchors.fill: parent
color: "#63B4FB"
visible: index === tb_other.currentIndex
// }
// Text {
// id: text_name_other
// text: name
// font.pixelSize: 16
// anchors.fill: parent
// leftPadding: 10
// verticalAlignment: Text.AlignVCenter
// wrapMode: Text.WordWrap
// }
// }
}
Text {
id: text_name_other
text: name_role
font.pixelSize: 16
anchors.fill: parent
leftPadding: 10
verticalAlignment: Text.AlignVCenter
wrapMode: Text.WordWrap
}
}
// MouseArea {
// anchors.fill: parent
// onClicked: {
// tb_other.currentRow = index
// }
// }
// }
// }
MouseArea {
anchors.fill: parent
onClicked: {
tb_other.currentIndex = index
tb.currentIndex = -1
containerSelected(proxyModel_other.mapToSource(index))
selectedIndex = proxyModel_other.mapToSource(index)
root.close()
}
}
}
}
}

View file

@ -10,6 +10,8 @@ Item {
property var page: PageEnum.Start
property var logic: UiLogic
signal activated(bool reset)
// width: GC.screenWidth
// height: GC.screenHeight

View file

@ -57,5 +57,6 @@ PageBase {
}
Logo {
anchors.bottom: parent.bottom
}
}

View file

@ -1,71 +0,0 @@
import QtQuick 2.12
import QtQuick.Controls 2.12
import PageEnum 1.0
import "./"
import "../Controls"
import "../Config"
PageBase {
id: root
page: PageEnum.ServerConfiguring
logic: NewServerConfiguringLogic
enabled: NewServerConfiguringLogic.pageEnabled
Caption {
text: qsTr("Configuring...")
}
LabelType {
x: 30
y: 90
width: 321
height: 31
text: qsTr("Please wait.")
}
LabelType {
x: 40
y: 560
width: 301
height: 41
text: NewServerConfiguringLogic.labelWaitInfoText
visible: NewServerConfiguringLogic.labelWaitInfoVisible
}
ProgressBar {
id: pr
anchors.horizontalCenter: parent.horizontalCenter
y: 510
width: 301
height: 40
from: 0
to: NewServerConfiguringLogic.progressBarMaximium
value: NewServerConfiguringLogic.progressBarValue
visible: NewServerConfiguringLogic.progressBarVisible
background: Rectangle {
implicitWidth: parent.width
implicitHeight: parent.height
color: "#100A44"
radius: 4
}
contentItem: Item {
implicitWidth: parent.width
implicitHeight: parent.height
Rectangle {
width: pr.visualPosition * parent.width
height: parent.height
radius: 4
color: Qt.rgba(255, 255, 255, 0.15);
}
}
LabelType {
anchors.fill: parent
text: NewServerConfiguringLogic.progressBarText
horizontalAlignment: Text.AlignHCenter
font.family: "Lato"
font.styleName: "normal"
font.pixelSize: 16
color: "#D4D4D4"
visible: NewServerConfiguringLogic.progressBarTextVisible
}
}
}

View file

@ -1,6 +1,8 @@
import QtQuick 2.12
import QtQuick.Controls 2.12
import QtQuick.Layouts 1.3
import ContainerProps 1.0
import ProtocolProps 1.0
import PageEnum 1.0
import "./"
import "../Controls"
@ -12,6 +14,11 @@ PageBase {
page: PageEnum.NewServerProtocols
logic: NewServerProtocolsLogic
onActivated: {
container_selector.selectedIndex = -1
UiLogic.containersModel.setSelectedServerIndex(-1)
}
BackButton {
id: back
}
@ -29,7 +36,10 @@ PageBase {
height: 40
text: qsTr("Setup server")
onClicked: {
NewServerProtocolsLogic.pushButtonConfigureClicked()
let cont = container_selector.selectedIndex
let tp = ProtocolProps.transportProtoFromString(cb_port_proto.currentText)
let port = tf_port_num.text
NewServerProtocolsLogic.onPushButtonConfigureClicked(cont, port, tp)
}
}
@ -49,6 +59,15 @@ PageBase {
SelectContainer {
id: container_selector
onContainerSelected: {
var containerProto = ContainerProps.defaultProtocol(c_index)
tf_port_num.text = ProtocolProps.defaultPort(containerProto)
cb_port_proto.currentIndex = ProtocolProps.defaultTransportProto(containerProto)
tf_port_num.enabled = ProtocolProps.defaultPortChangeable(containerProto)
cb_port_proto.enabled = ProtocolProps.defaultTransportProtoChangeable(containerProto)
}
}
Column {
@ -108,36 +127,23 @@ PageBase {
LabelType {
width: 130
text: qsTr("Port (TCP/UDP)")
text: qsTr("Port")
}
TextFieldType {
id: tf_port_num
width: parent.width - 130 - parent.spacing - parent.leftPadding * 2
text: NewServerProtocolsLogic.lineEditOpenvpnPortText
onEditingFinished: {
NewServerProtocolsLogic.lineEditOpenvpnPortText = text
}
}
LabelType {
width: 130
text: qsTr("Protocol")
text: qsTr("Network Protocol")
}
ComboBoxType {
id: cb_port_proto
width: parent.width - 130 - parent.spacing - parent.leftPadding * 2
model: [
qsTr("udp"),
qsTr("tcp"),
]
currentIndex: {
for (let i = 0; i < model.length; ++i) {
if (NewServerProtocolsLogic.comboBoxOpenvpnProtoText === model[i]) {
return i
}
}
return -1
}
onCurrentTextChanged: {
NewServerProtocolsLogic.comboBoxOpenvpnProtoText = currentText
}
}
}
}

View file

@ -0,0 +1,93 @@
import QtQuick 2.12
import QtQuick.Controls 2.12
import PageEnum 1.0
import "./"
import "../Controls"
import "../Config"
PageBase {
id: root
page: PageEnum.ServerConfiguringProgress
logic: ServerConfiguringProgressLogic
enabled: ServerConfiguringProgressLogic.pageEnabled
Caption {
id: caption
text: qsTr("Configuring...")
}
LabelType {
id: label
x: 0
anchors.top: caption.bottom
anchors.topMargin: 10
width: parent.width
height: 31
text: qsTr("Please wait.")
horizontalAlignment: Text.AlignHCenter
}
LabelType {
anchors.bottom: pr.top
anchors.bottomMargin: 20
anchors.horizontalCenter: parent.horizontalCenter
horizontalAlignment: Text.AlignHCenter
width: parent.width - 40
height: 41
text: ServerConfiguringProgressLogic.labelWaitInfoText
visible: ServerConfiguringProgressLogic.labelWaitInfoVisible
}
ProgressBar {
id: pr
anchors.horizontalCenter: parent.horizontalCenter
anchors.bottom: logo.bottom
anchors.bottomMargin: 40
width: parent.width - 40
height: 40
from: 0
to: ServerConfiguringProgressLogic.progressBarMaximium
value: ServerConfiguringProgressLogic.progressBarValue
visible: ServerConfiguringProgressLogic.progressBarVisible
background: Rectangle {
implicitWidth: parent.width
implicitHeight: parent.height
color: "#100A44"
radius: 4
}
contentItem: Item {
implicitWidth: parent.width
implicitHeight: parent.height
Rectangle {
width: pr.visualPosition * parent.width
height: parent.height
radius: 4
color: Qt.rgba(255, 255, 255, 0.15);
}
}
LabelType {
anchors.left: parent.left
anchors.right: parent.right
anchors.verticalCenter: parent.verticalCenter
text: ServerConfiguringProgressLogic.progressBarText
horizontalAlignment: Text.AlignHCenter
verticalAlignment: Text.AlignVCenter
font.family: "Lato"
font.styleName: "normal"
font.pixelSize: 16
color: "#D4D4D4"
visible: ServerConfiguringProgressLogic.progressBarTextVisible
}
}
Logo {
id : logo
anchors.horizontalCenter: parent.horizontalCenter
anchors.bottom: parent.bottom
}
}

View file

@ -23,6 +23,7 @@ PageBase {
Logo {
id: logo
anchors.bottom: parent.bottom
}
BasicButtonType {

View file

@ -41,8 +41,8 @@ Window {
if (page === PageEnum.WizardHigh) {
WizardLogic.updatePage();
}
if (page === PageEnum.ServerConfiguring) {
ServerConfiguringLogic.progressBarValue = 0;
if (page === PageEnum.ServerConfiguringProgress) {
ServerConfiguringProgressLogic.progressBarValue = 0;
}
if (page === PageEnum.GeneralSettings) {
GeneralSettingsLogic.updatePage();
@ -79,6 +79,8 @@ Window {
} else {
pageLoader.push(pages[page], {}, StackView.Immediate)
}
pages[page].activated(reset)
}
function gotoProtocolPage(protocol, reset, slide) {
@ -91,6 +93,8 @@ Window {
} else {
pageLoader.push(protocolPages[protocol], {}, StackView.Immediate)
}
protocolPages[protocol].activated(reset)
}
function close_page() {

View file

@ -47,7 +47,7 @@
#include "pages_logic/AppSettingsLogic.h"
#include "pages_logic/GeneralSettingsLogic.h"
#include "pages_logic/NetworkSettingsLogic.h"
#include "pages_logic/NewServerConfiguringLogic.h"
#include "pages_logic/ServerConfiguringProgressLogic.h"
#include "pages_logic/NewServerProtocolsLogic.h"
#include "pages_logic/ServerListLogic.h"
#include "pages_logic/ServerSettingsLogic.h"
@ -81,7 +81,7 @@ UiLogic::UiLogic(QObject *parent) :
m_appSettingsLogic = new AppSettingsLogic(this);
m_generalSettingsLogic = new GeneralSettingsLogic(this);
m_networkSettingsLogic = new NetworkSettingsLogic(this);
m_newServerConfiguringLogic = new NewServerConfiguringLogic(this);
m_serverConfiguringProgressLogic = new ServerConfiguringProgressLogic(this);
m_newServerProtocolsLogic = new NewServerProtocolsLogic(this);
m_serverListLogic = new ServerListLogic(this);
m_serverSettingsLogic = new ServerSettingsLogic(this);
@ -132,7 +132,7 @@ void UiLogic::initalizeUiLogic()
selectedServerIndex = m_settings.defaultServerIndex();
goToPage(Page::ServerContainers, true, false);
//goToPage(Page::NewServerProtocols, true, false);
goToPage(Page::NewServerProtocols, true, false);
//ui->pushButton_general_settings_exit->hide();
@ -355,12 +355,12 @@ void UiLogic::onCloseWindow()
QString UiLogic::containerName(int container)
{
return amnezia::containerHumanNames().value(static_cast<DockerContainer>(container));
return ContainerProps::containerHumanNames().value(static_cast<DockerContainer>(container));
}
QString UiLogic::containerDesc(int container)
{
return amnezia::containerDescriptions().value(static_cast<DockerContainer>(container));
return ContainerProps::containerDescriptions().value(static_cast<DockerContainer>(container));
}
@ -396,7 +396,7 @@ void UiLogic::installServer(const QMap<DockerContainer, QJsonObject> &containers
{
if (containers.isEmpty()) return;
goToPage(Page::ServerConfiguring);
emit goToPage(Page::ServerConfiguringProgress);
QEventLoop loop;
QTimer::singleShot(500, &loop, SLOT(quit()));
loop.exec();
@ -404,34 +404,34 @@ void UiLogic::installServer(const QMap<DockerContainer, QJsonObject> &containers
PageFunc page_new_server_configuring;
page_new_server_configuring.setEnabledFunc = [this] (bool enabled) -> void {
newServerConfiguringLogic()->set_pageEnabled(enabled);
serverConfiguringProgressLogic()->set_pageEnabled(enabled);
};
ButtonFunc no_button;
LabelFunc label_new_server_configuring_wait_info;
label_new_server_configuring_wait_info.setTextFunc = [this] (const QString& text) -> void {
newServerConfiguringLogic()->set_labelWaitInfoText(text);
serverConfiguringProgressLogic()->set_labelWaitInfoText(text);
};
label_new_server_configuring_wait_info.setVisibleFunc = [this] (bool visible) ->void {
newServerConfiguringLogic()->set_labelWaitInfoVisible(visible);
serverConfiguringProgressLogic()->set_labelWaitInfoVisible(visible);
};
ProgressFunc progressBar_new_server_configuring;
progressBar_new_server_configuring.setVisibleFunc = [this] (bool visible) ->void {
newServerConfiguringLogic()->set_progressBarVisible(visible);
serverConfiguringProgressLogic()->set_progressBarVisible(visible);
};
progressBar_new_server_configuring.setValueFunc = [this] (int value) ->void {
newServerConfiguringLogic()->set_progressBarValue(value);
serverConfiguringProgressLogic()->set_progressBarValue(value);
};
progressBar_new_server_configuring.getValueFunc = [this] (void) -> int {
return newServerConfiguringLogic()->progressBarValue();
return serverConfiguringProgressLogic()->progressBarValue();
};
progressBar_new_server_configuring.getMaximiumFunc = [this] (void) -> int {
return newServerConfiguringLogic()->progressBarMaximium();
return serverConfiguringProgressLogic()->progressBarMaximium();
};
progressBar_new_server_configuring.setTextVisibleFunc = [this] (bool visible) ->void {
newServerConfiguringLogic()->set_progressBarTextVisible(visible);
serverConfiguringProgressLogic()->set_progressBarTextVisible(visible);
};
progressBar_new_server_configuring.setTextFunc = [this] (const QString& text) ->void {
newServerConfiguringLogic()->set_progressBarText(text);
serverConfiguringProgressLogic()->set_progressBarText(text);
};
bool ok = installContainers(installCredentials, containers,
page_new_server_configuring,
@ -452,16 +452,16 @@ void UiLogic::installServer(const QMap<DockerContainer, QJsonObject> &containers
containerConfigs.append(cfg);
}
server.insert(config_key::containers, containerConfigs);
server.insert(config_key::defaultContainer, containerToString(containers.firstKey()));
server.insert(config_key::defaultContainer, ContainerProps::containerToString(containers.firstKey()));
m_settings.addServer(server);
m_settings.setDefaultServer(m_settings.serversCount() - 1);
setStartPage(Page::Vpn);
emit setStartPage(Page::Vpn);
qApp->processEvents();
}
else {
closePage();
emit closePage();
}
}

View file

@ -19,7 +19,7 @@ class AppSettingsLogic;
class GeneralSettingsLogic;
class NetworkSettingsLogic;
class NewServerProtocolsLogic;
class NewServerConfiguringLogic;
class ServerConfiguringProgressLogic;
class ServerListLogic;
class ServerSettingsLogic;
class ServerContainersLogic;
@ -61,7 +61,7 @@ public:
friend class AppSettingsLogic;
friend class GeneralSettingsLogic;
friend class NetworkSettingsLogic;
friend class NewServerConfiguringLogic;
friend class ServerConfiguringProgressLogic;
friend class NewServerProtocolsLogic;
friend class ServerListLogic;
friend class ServerSettingsLogic;
@ -168,7 +168,7 @@ public:
AppSettingsLogic *appSettingsLogic() { return m_appSettingsLogic; }
GeneralSettingsLogic *generalSettingsLogic() { return m_generalSettingsLogic; }
NetworkSettingsLogic *networkSettingsLogic() { return m_networkSettingsLogic; }
NewServerConfiguringLogic *newServerConfiguringLogic() { return m_newServerConfiguringLogic; }
ServerConfiguringProgressLogic *serverConfiguringProgressLogic() { return m_serverConfiguringProgressLogic; }
NewServerProtocolsLogic *newServerProtocolsLogic() { return m_newServerProtocolsLogic; }
ServerListLogic *serverListLogic() { return m_serverListLogic; }
ServerSettingsLogic *serverSettingsLogic() { return m_serverSettingsLogic; }
@ -185,7 +185,7 @@ private:
AppSettingsLogic *m_appSettingsLogic;
GeneralSettingsLogic *m_generalSettingsLogic;
NetworkSettingsLogic *m_networkSettingsLogic;
NewServerConfiguringLogic *m_newServerConfiguringLogic;
ServerConfiguringProgressLogic *m_serverConfiguringProgressLogic;
NewServerProtocolsLogic *m_newServerProtocolsLogic;
ServerListLogic *m_serverListLogic;
ServerSettingsLogic *m_serverSettingsLogic;