QML ServerContainers page refact
This commit is contained in:
parent
9ae2e3fba2
commit
0faf6c8599
90 changed files with 5651 additions and 125 deletions
|
@ -9,7 +9,7 @@ ProtocolsModel::ProtocolsModel(QObject *parent) :
|
|||
int ProtocolsModel::rowCount(const QModelIndex &parent) const
|
||||
{
|
||||
Q_UNUSED(parent);
|
||||
return amnezia::allContainers().size();
|
||||
return amnezia::allProtocols().size();
|
||||
}
|
||||
|
||||
QHash<int, QByteArray> ProtocolsModel::roleNames() const {
|
||||
|
@ -55,7 +55,7 @@ void ProtocolsModel::setSelectedServerIndex(int index)
|
|||
endResetModel();
|
||||
}
|
||||
|
||||
void ProtocolsModel::setSelectedDockerContainer(DockerContainer c)
|
||||
void ProtocolsModel::setSelectedDockerContainer(amnezia::DockerContainer c)
|
||||
{
|
||||
beginResetModel();
|
||||
m_selectedDockerContainer = c;
|
||||
|
|
|
@ -26,8 +26,8 @@ public:
|
|||
int rowCount(const QModelIndex &parent = QModelIndex()) const override;
|
||||
|
||||
QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override;
|
||||
void setSelectedServerIndex(int index);
|
||||
void setSelectedDockerContainer(DockerContainer c);
|
||||
Q_INVOKABLE void setSelectedServerIndex(int index);
|
||||
Q_INVOKABLE void setSelectedDockerContainer(amnezia::DockerContainer c);
|
||||
|
||||
protected:
|
||||
QHash<int, QByteArray> roleNames() const override;
|
||||
|
|
|
@ -8,3 +8,16 @@ PageLogicBase::PageLogicBase(UiLogic *logic, QObject *parent):
|
|||
{
|
||||
|
||||
}
|
||||
|
||||
Page PageLogicBase::pageForProto(Protocol p)
|
||||
{
|
||||
switch (p) {
|
||||
case Protocol::OpenVpn: return Page::OpenVpnSettings;
|
||||
case Protocol::ShadowSocks: return Page::ShadowSocksSettings;
|
||||
case Protocol::OpenVpn: return Page::OpenVpnSettings;
|
||||
case Protocol::OpenVpn: return Page::OpenVpnSettings;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -20,6 +20,7 @@ public:
|
|||
~PageLogicBase() = default;
|
||||
|
||||
Q_INVOKABLE virtual void updatePage() {}
|
||||
Q_INVOKABLE Page pageForProto(amnezia::Protocol p);
|
||||
|
||||
protected:
|
||||
UiLogic *uiLogic() const { return m_uiLogic; }
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
#include "ServerContainersLogic.h"
|
||||
#include "ServerContainersLogic.h"
|
||||
#include "ShareConnectionLogic.h"
|
||||
#include "protocols/CloakLogic.h"
|
||||
#include "protocols/OpenVpnLogic.h"
|
||||
|
@ -50,8 +50,11 @@ void ServerContainersLogic::updateServerContainersPage()
|
|||
{
|
||||
set_progressBarProtocolsContainerReinstallVisible(false);
|
||||
|
||||
ContainersModel *model = qobject_cast<ContainersModel *>(uiLogic()->containersModel());
|
||||
model->setSelectedServerIndex(uiLogic()->selectedServerIndex);
|
||||
ContainersModel *c_model = qobject_cast<ContainersModel *>(uiLogic()->containersModel());
|
||||
c_model->setSelectedServerIndex(uiLogic()->selectedServerIndex);
|
||||
|
||||
ProtocolsModel *p_model = qobject_cast<ProtocolsModel *>(uiLogic()->protocolsModel());
|
||||
p_model->setSelectedServerIndex(uiLogic()->selectedServerIndex);
|
||||
|
||||
auto containers = m_settings.containers(uiLogic()->selectedServerIndex);
|
||||
DockerContainer defaultContainer = m_settings.defaultContainer(uiLogic()->selectedServerIndex);
|
||||
|
@ -118,6 +121,16 @@ void ServerContainersLogic::updateServerContainersPage()
|
|||
}
|
||||
}
|
||||
|
||||
void ServerContainersLogic::onPushButtonProtoSettingsClicked(amnezia::DockerContainer c, amnezia::Protocol p)
|
||||
{
|
||||
uiLogic()->selectedDockerContainer = c;
|
||||
uiLogic()->protocolLogic(p)->updateProtocolPage(m_settings.protocolConfig(uiLogic()->selectedServerIndex, uiLogic()->selectedDockerContainer, p),
|
||||
uiLogic()->selectedDockerContainer,
|
||||
m_settings.haveAuthData(uiLogic()->selectedServerIndex));
|
||||
|
||||
emit uiLogic()->goToPage(Page::OpenVpnSettings);
|
||||
}
|
||||
|
||||
|
||||
void ServerContainersLogic::setupProtocolsPageConnections()
|
||||
{
|
||||
|
@ -245,50 +258,50 @@ void ServerContainersLogic::setupProtocolsPageConnections()
|
|||
}
|
||||
}
|
||||
|
||||
void ServerContainersLogic::onPushButtonProtoCloakOpenVpnContOpenvpnConfigClicked()
|
||||
{
|
||||
uiLogic()->selectedDockerContainer = DockerContainer::OpenVpnOverCloak;
|
||||
uiLogic()->openVpnLogic()->updateOpenVpnPage(m_settings.protocolConfig(uiLogic()->selectedServerIndex, uiLogic()->selectedDockerContainer, Protocol::OpenVpn),
|
||||
uiLogic()->selectedDockerContainer, m_settings.haveAuthData(uiLogic()->selectedServerIndex));
|
||||
uiLogic()->goToPage(Page::OpenVpnSettings);
|
||||
}
|
||||
//void ServerContainersLogic::onPushButtonProtoCloakOpenVpnContOpenvpnConfigClicked()
|
||||
//{
|
||||
// uiLogic()->selectedDockerContainer = DockerContainer::OpenVpnOverCloak;
|
||||
// uiLogic()->openVpnLogic()->updateOpenVpnPage(m_settings.protocolConfig(uiLogic()->selectedServerIndex, uiLogic()->selectedDockerContainer, Protocol::OpenVpn),
|
||||
// uiLogic()->selectedDockerContainer, m_settings.haveAuthData(uiLogic()->selectedServerIndex));
|
||||
// uiLogic()->goToPage(Page::OpenVpnSettings);
|
||||
//}
|
||||
|
||||
void ServerContainersLogic::onPushButtonProtoCloakOpenVpnContSsConfigClicked()
|
||||
{
|
||||
uiLogic()->selectedDockerContainer = DockerContainer::OpenVpnOverCloak;
|
||||
uiLogic()->shadowSocksLogic()->updateShadowSocksPage(m_settings.protocolConfig(uiLogic()->selectedServerIndex, uiLogic()->selectedDockerContainer, Protocol::ShadowSocks),
|
||||
uiLogic()->selectedDockerContainer, m_settings.haveAuthData(uiLogic()->selectedServerIndex));
|
||||
uiLogic()->goToPage(Page::ShadowSocksSettings);
|
||||
}
|
||||
//void ServerContainersLogic::onPushButtonProtoCloakOpenVpnContSsConfigClicked()
|
||||
//{
|
||||
// uiLogic()->selectedDockerContainer = DockerContainer::OpenVpnOverCloak;
|
||||
// uiLogic()->shadowSocksLogic()->updateShadowSocksPage(m_settings.protocolConfig(uiLogic()->selectedServerIndex, uiLogic()->selectedDockerContainer, Protocol::ShadowSocks),
|
||||
// uiLogic()->selectedDockerContainer, m_settings.haveAuthData(uiLogic()->selectedServerIndex));
|
||||
// uiLogic()->goToPage(Page::ShadowSocksSettings);
|
||||
//}
|
||||
|
||||
void ServerContainersLogic::onPushButtonProtoCloakOpenVpnContCloakConfigClicked()
|
||||
{
|
||||
uiLogic()->selectedDockerContainer = DockerContainer::OpenVpnOverCloak;
|
||||
uiLogic()->cloakLogic()->updateCloakPage(m_settings.protocolConfig(uiLogic()->selectedServerIndex, uiLogic()->selectedDockerContainer, Protocol::Cloak),
|
||||
uiLogic()->selectedDockerContainer, m_settings.haveAuthData(uiLogic()->selectedServerIndex));
|
||||
uiLogic()->goToPage(Page::CloakSettings);
|
||||
}
|
||||
//void ServerContainersLogic::onPushButtonProtoCloakOpenVpnContCloakConfigClicked()
|
||||
//{
|
||||
// uiLogic()->selectedDockerContainer = DockerContainer::OpenVpnOverCloak;
|
||||
// uiLogic()->cloakLogic()->updateCloakPage(m_settings.protocolConfig(uiLogic()->selectedServerIndex, uiLogic()->selectedDockerContainer, Protocol::Cloak),
|
||||
// uiLogic()->selectedDockerContainer, m_settings.haveAuthData(uiLogic()->selectedServerIndex));
|
||||
// uiLogic()->goToPage(Page::CloakSettings);
|
||||
//}
|
||||
|
||||
void ServerContainersLogic::onPushButtonProtoOpenVpnContOpenvpnConfigClicked()
|
||||
{
|
||||
uiLogic()->selectedDockerContainer = DockerContainer::OpenVpn;
|
||||
uiLogic()->openVpnLogic()->updateOpenVpnPage(m_settings.protocolConfig(uiLogic()->selectedServerIndex, uiLogic()->selectedDockerContainer, Protocol::OpenVpn),
|
||||
uiLogic()->selectedDockerContainer, m_settings.haveAuthData(uiLogic()->selectedServerIndex));
|
||||
uiLogic()->goToPage(Page::OpenVpnSettings);
|
||||
}
|
||||
//void ServerContainersLogic::onPushButtonProtoOpenVpnContOpenvpnConfigClicked()
|
||||
//{
|
||||
// uiLogic()->selectedDockerContainer = DockerContainer::OpenVpn;
|
||||
// uiLogic()->openVpnLogic()->updateOpenVpnPage(m_settings.protocolConfig(uiLogic()->selectedServerIndex, uiLogic()->selectedDockerContainer, Protocol::OpenVpn),
|
||||
// uiLogic()->selectedDockerContainer, m_settings.haveAuthData(uiLogic()->selectedServerIndex));
|
||||
// uiLogic()->goToPage(Page::OpenVpnSettings);
|
||||
//}
|
||||
|
||||
void ServerContainersLogic::onPushButtonProtoSsOpenVpnContOpenvpnConfigClicked()
|
||||
{
|
||||
uiLogic()->selectedDockerContainer = DockerContainer::OpenVpnOverShadowSocks;
|
||||
uiLogic()->openVpnLogic()->updateOpenVpnPage(m_settings.protocolConfig(uiLogic()->selectedServerIndex, uiLogic()->selectedDockerContainer, Protocol::OpenVpn),
|
||||
uiLogic()->selectedDockerContainer, m_settings.haveAuthData(uiLogic()->selectedServerIndex));
|
||||
uiLogic()->goToPage(Page::OpenVpnSettings);
|
||||
}
|
||||
//void ServerContainersLogic::onPushButtonProtoSsOpenVpnContOpenvpnConfigClicked()
|
||||
//{
|
||||
// uiLogic()->selectedDockerContainer = DockerContainer::OpenVpnOverShadowSocks;
|
||||
// uiLogic()->openVpnLogic()->updateOpenVpnPage(m_settings.protocolConfig(uiLogic()->selectedServerIndex, uiLogic()->selectedDockerContainer, Protocol::OpenVpn),
|
||||
// uiLogic()->selectedDockerContainer, m_settings.haveAuthData(uiLogic()->selectedServerIndex));
|
||||
// uiLogic()->goToPage(Page::OpenVpnSettings);
|
||||
//}
|
||||
|
||||
void ServerContainersLogic::onPushButtonProtoSsOpenVpnContSsConfigClicked()
|
||||
{
|
||||
uiLogic()->selectedDockerContainer = DockerContainer::OpenVpnOverShadowSocks;
|
||||
uiLogic()->shadowSocksLogic()->updateShadowSocksPage(m_settings.protocolConfig(uiLogic()->selectedServerIndex, uiLogic()->selectedDockerContainer, Protocol::ShadowSocks),
|
||||
uiLogic()->selectedDockerContainer, m_settings.haveAuthData(uiLogic()->selectedServerIndex));
|
||||
uiLogic()->goToPage(Page::ShadowSocksSettings);
|
||||
}
|
||||
//void ServerContainersLogic::onPushButtonProtoSsOpenVpnContSsConfigClicked()
|
||||
//{
|
||||
// uiLogic()->selectedDockerContainer = DockerContainer::OpenVpnOverShadowSocks;
|
||||
// uiLogic()->shadowSocksLogic()->updateShadowSocksPage(m_settings.protocolConfig(uiLogic()->selectedServerIndex, uiLogic()->selectedDockerContainer, Protocol::ShadowSocks),
|
||||
// uiLogic()->selectedDockerContainer, m_settings.haveAuthData(uiLogic()->selectedServerIndex));
|
||||
// uiLogic()->goToPage(Page::ShadowSocksSettings);
|
||||
//}
|
||||
|
|
|
@ -43,12 +43,14 @@ class ServerContainersLogic : public PageLogicBase
|
|||
public:
|
||||
Q_INVOKABLE void updateServerContainersPage();
|
||||
|
||||
Q_INVOKABLE void onPushButtonProtoCloakOpenVpnContOpenvpnConfigClicked();
|
||||
Q_INVOKABLE void onPushButtonProtoCloakOpenVpnContSsConfigClicked();
|
||||
Q_INVOKABLE void onPushButtonProtoCloakOpenVpnContCloakConfigClicked();
|
||||
Q_INVOKABLE void onPushButtonProtoOpenVpnContOpenvpnConfigClicked();
|
||||
Q_INVOKABLE void onPushButtonProtoSsOpenVpnContOpenvpnConfigClicked();
|
||||
Q_INVOKABLE void onPushButtonProtoSsOpenVpnContSsConfigClicked();
|
||||
// Q_INVOKABLE void onPushButtonProtoCloakOpenVpnContOpenvpnConfigClicked();
|
||||
// Q_INVOKABLE void onPushButtonProtoCloakOpenVpnContSsConfigClicked();
|
||||
// Q_INVOKABLE void onPushButtonProtoCloakOpenVpnContCloakConfigClicked();
|
||||
// Q_INVOKABLE void onPushButtonProtoOpenVpnContOpenvpnConfigClicked();
|
||||
// Q_INVOKABLE void onPushButtonProtoSsOpenVpnContOpenvpnConfigClicked();
|
||||
// Q_INVOKABLE void onPushButtonProtoSsOpenVpnContSsConfigClicked();
|
||||
|
||||
Q_INVOKABLE void onPushButtonProtoSettingsClicked(amnezia::DockerContainer c, amnezia::Protocol p);
|
||||
|
||||
public:
|
||||
explicit ServerContainersLogic(UiLogic *uiLogic, QObject *parent = nullptr);
|
||||
|
|
|
@ -7,7 +7,7 @@ using namespace amnezia;
|
|||
using namespace PageEnumNS;
|
||||
|
||||
CloakLogic::CloakLogic(UiLogic *logic, QObject *parent):
|
||||
PageLogicBase(logic, parent),
|
||||
PageProtocolLogicBase(logic, parent),
|
||||
m_comboBoxProtoCloakCipherText{"chacha20-poly1305"},
|
||||
m_lineEditProtoCloakSiteText{"tile.openstreetmap.org"},
|
||||
m_lineEditProtoCloakPortText{},
|
||||
|
@ -24,7 +24,7 @@ CloakLogic::CloakLogic(UiLogic *logic, QObject *parent):
|
|||
|
||||
}
|
||||
|
||||
void CloakLogic::updateCloakPage(const QJsonObject &ckConfig, DockerContainer container, bool haveAuthData)
|
||||
void CloakLogic::updateProtocolPage(const QJsonObject &ckConfig, DockerContainer container, bool haveAuthData)
|
||||
{
|
||||
set_widgetProtoCloakEnabled(haveAuthData);
|
||||
set_pushButtonCloakSaveVisible(haveAuthData);
|
||||
|
@ -42,7 +42,7 @@ void CloakLogic::updateCloakPage(const QJsonObject &ckConfig, DockerContainer co
|
|||
set_lineEditProtoCloakPortEnabled(container == DockerContainer::OpenVpnOverCloak);
|
||||
}
|
||||
|
||||
QJsonObject CloakLogic::getCloakConfigFromPage(QJsonObject oldConfig)
|
||||
QJsonObject CloakLogic::getProtocolConfigFromPage(QJsonObject oldConfig)
|
||||
{
|
||||
oldConfig.insert(config_key::cipher, comboBoxProtoCloakCipherText());
|
||||
oldConfig.insert(config_key::site, lineEditProtoCloakSiteText());
|
||||
|
@ -54,7 +54,7 @@ QJsonObject CloakLogic::getCloakConfigFromPage(QJsonObject oldConfig)
|
|||
void CloakLogic::onPushButtonProtoCloakSaveClicked()
|
||||
{
|
||||
QJsonObject protocolConfig = m_settings.protocolConfig(uiLogic()->selectedServerIndex, uiLogic()->selectedDockerContainer, Protocol::Cloak);
|
||||
protocolConfig = getCloakConfigFromPage(protocolConfig);
|
||||
protocolConfig = getProtocolConfigFromPage(protocolConfig);
|
||||
|
||||
QJsonObject containerConfig = m_settings.containerConfig(uiLogic()->selectedServerIndex, uiLogic()->selectedDockerContainer);
|
||||
QJsonObject newContainerConfig = containerConfig;
|
||||
|
|
|
@ -1,11 +1,11 @@
|
|||
#ifndef CLOAK_LOGIC_H
|
||||
#define CLOAK_LOGIC_H
|
||||
|
||||
#include "../PageLogicBase.h"
|
||||
#include "PageProtocolLogicBase.h"
|
||||
|
||||
class UiLogic;
|
||||
|
||||
class CloakLogic : public PageLogicBase
|
||||
class CloakLogic : public PageProtocolLogicBase
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
|
@ -29,8 +29,8 @@ public:
|
|||
explicit CloakLogic(UiLogic *uiLogic, QObject *parent = nullptr);
|
||||
~CloakLogic() = default;
|
||||
|
||||
void updateCloakPage(const QJsonObject &ckConfig, DockerContainer container, bool haveAuthData);
|
||||
QJsonObject getCloakConfigFromPage(QJsonObject oldConfig);
|
||||
void updateProtocolPage (const QJsonObject &ckConfig, DockerContainer container, bool haveAuthData) override;
|
||||
QJsonObject getProtocolConfigFromPage(QJsonObject oldConfig) override;
|
||||
|
||||
private:
|
||||
Settings m_settings;
|
||||
|
|
|
@ -7,7 +7,7 @@ using namespace amnezia;
|
|||
using namespace PageEnumNS;
|
||||
|
||||
OpenVpnLogic::OpenVpnLogic(UiLogic *logic, QObject *parent):
|
||||
PageLogicBase(logic, parent),
|
||||
PageProtocolLogicBase(logic, parent),
|
||||
m_lineEditProtoOpenVpnSubnetText{},
|
||||
m_radioButtonProtoOpenVpnUdpChecked{false},
|
||||
m_checkBoxProtoOpenVpnAutoEncryptionChecked{},
|
||||
|
@ -34,7 +34,7 @@ OpenVpnLogic::OpenVpnLogic(UiLogic *logic, QObject *parent):
|
|||
|
||||
}
|
||||
|
||||
void OpenVpnLogic::updateOpenVpnPage(const QJsonObject &openvpnConfig, DockerContainer container, bool haveAuthData)
|
||||
void OpenVpnLogic::updateProtocolPage(const QJsonObject &openvpnConfig, DockerContainer container, bool haveAuthData)
|
||||
{
|
||||
set_widgetProtoOpenVpnEnabled(haveAuthData);
|
||||
set_pushButtonOpenvpnSaveVisible(haveAuthData);
|
||||
|
@ -136,7 +136,7 @@ void OpenVpnLogic::onPushButtonProtoOpenVpnSaveClicked()
|
|||
qDebug() << "Protocol saved with code:" << e << "for" << uiLogic()->selectedServerIndex << uiLogic()->selectedDockerContainer;
|
||||
}
|
||||
|
||||
QJsonObject OpenVpnLogic::getOpenVpnConfigFromPage(QJsonObject oldConfig)
|
||||
QJsonObject OpenVpnLogic::getProtocolConfigFromPage(QJsonObject oldConfig)
|
||||
{
|
||||
oldConfig.insert(config_key::subnet_address, lineEditProtoOpenVpnSubnetText());
|
||||
oldConfig.insert(config_key::transport_proto, radioButtonProtoOpenVpnUdpChecked() ? protocols::UDP : protocols::TCP);
|
||||
|
|
|
@ -1,11 +1,11 @@
|
|||
#ifndef OPENVPN_LOGIC_H
|
||||
#define OPENVPN_LOGIC_H
|
||||
|
||||
#include "../PageLogicBase.h"
|
||||
#include "PageProtocolLogicBase.h"
|
||||
|
||||
class UiLogic;
|
||||
|
||||
class OpenVpnLogic : public PageLogicBase
|
||||
class OpenVpnLogic : public PageProtocolLogicBase
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
|
@ -42,8 +42,8 @@ public:
|
|||
explicit OpenVpnLogic(UiLogic *uiLogic, QObject *parent = nullptr);
|
||||
~OpenVpnLogic() = default;
|
||||
|
||||
void updateOpenVpnPage(const QJsonObject &openvpnConfig, DockerContainer container, bool haveAuthData);
|
||||
QJsonObject getOpenVpnConfigFromPage(QJsonObject oldConfig);
|
||||
void updateProtocolPage(const QJsonObject &openvpnConfig, DockerContainer container, bool haveAuthData) override;
|
||||
QJsonObject getProtocolConfigFromPage(QJsonObject oldConfig) override;
|
||||
|
||||
private:
|
||||
Settings m_settings;
|
||||
|
|
|
@ -0,0 +1,8 @@
|
|||
#include "PageProtocolLogicBase.h"
|
||||
|
||||
|
||||
PageProtocolLogicBase::PageProtocolLogicBase(UiLogic *logic, QObject *parent):
|
||||
PageLogicBase(logic, parent)
|
||||
{
|
||||
|
||||
}
|
24
client/ui/pages_logic/protocols/PageProtocolLogicBase.h
Normal file
24
client/ui/pages_logic/protocols/PageProtocolLogicBase.h
Normal file
|
@ -0,0 +1,24 @@
|
|||
#ifndef PAGE_PROTOCOL_LOGIC_BASE_H
|
||||
#define PAGE_PROTOCOL_LOGIC_BASE_H
|
||||
|
||||
#include "settings.h"
|
||||
#include "../PageLogicBase.h"
|
||||
|
||||
using namespace amnezia;
|
||||
using namespace PageEnumNS;
|
||||
|
||||
class UiLogic;
|
||||
|
||||
class PageProtocolLogicBase : public PageLogicBase
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
explicit PageProtocolLogicBase(UiLogic *uiLogic, QObject *parent = nullptr);
|
||||
~PageProtocolLogicBase() = default;
|
||||
|
||||
virtual void updateProtocolPage(const QJsonObject &config, DockerContainer container, bool haveAuthData) {}
|
||||
virtual QJsonObject getProtocolConfigFromPage(QJsonObject oldConfig) { return QJsonObject(); }
|
||||
|
||||
};
|
||||
#endif // PAGE_PROTOCOL_LOGIC_BASE_H
|
|
@ -7,7 +7,7 @@ using namespace amnezia;
|
|||
using namespace PageEnumNS;
|
||||
|
||||
ShadowSocksLogic::ShadowSocksLogic(UiLogic *logic, QObject *parent):
|
||||
PageLogicBase(logic, parent),
|
||||
PageProtocolLogicBase(logic, parent),
|
||||
m_widgetProtoShadowSocksEnabled{false},
|
||||
m_comboBoxProtoShadowSocksCipherText{"chacha20-poly1305"},
|
||||
m_lineEditProtoShadowSocksPortText{},
|
||||
|
@ -23,7 +23,7 @@ ShadowSocksLogic::ShadowSocksLogic(UiLogic *logic, QObject *parent):
|
|||
|
||||
}
|
||||
|
||||
void ShadowSocksLogic::updateShadowSocksPage(const QJsonObject &ssConfig, DockerContainer container, bool haveAuthData)
|
||||
void ShadowSocksLogic::updateProtocolPage(const QJsonObject &ssConfig, DockerContainer container, bool haveAuthData)
|
||||
{
|
||||
set_widgetProtoShadowSocksEnabled(haveAuthData);
|
||||
set_pushButtonShadowSocksSaveVisible(haveAuthData);
|
||||
|
@ -38,7 +38,7 @@ void ShadowSocksLogic::updateShadowSocksPage(const QJsonObject &ssConfig, Docker
|
|||
set_lineEditProtoShadowSocksPortEnabled(container == DockerContainer::OpenVpnOverShadowSocks);
|
||||
}
|
||||
|
||||
QJsonObject ShadowSocksLogic::getShadowSocksConfigFromPage(QJsonObject oldConfig)
|
||||
QJsonObject ShadowSocksLogic::getProtocolConfigFromPage(QJsonObject oldConfig)
|
||||
{
|
||||
oldConfig.insert(config_key::cipher, comboBoxProtoShadowSocksCipherText());
|
||||
oldConfig.insert(config_key::port, lineEditProtoShadowSocksPortText());
|
||||
|
|
|
@ -1,11 +1,11 @@
|
|||
#ifndef SHADOWSOCKS_LOGIC_H
|
||||
#define SHADOWSOCKS_LOGIC_H
|
||||
|
||||
#include "../PageLogicBase.h"
|
||||
#include "PageProtocolLogicBase.h"
|
||||
|
||||
class UiLogic;
|
||||
|
||||
class ShadowSocksLogic : public PageLogicBase
|
||||
class ShadowSocksLogic : public PageProtocolLogicBase
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
|
@ -28,8 +28,8 @@ public:
|
|||
explicit ShadowSocksLogic(UiLogic *uiLogic, QObject *parent = nullptr);
|
||||
~ShadowSocksLogic() = default;
|
||||
|
||||
void updateShadowSocksPage(const QJsonObject &ssConfig, DockerContainer container, bool haveAuthData);
|
||||
QJsonObject getShadowSocksConfigFromPage(QJsonObject oldConfig);
|
||||
void updateProtocolPage(const QJsonObject &ssConfig, DockerContainer container, bool haveAuthData) override;
|
||||
QJsonObject getProtocolConfigFromPage(QJsonObject oldConfig) override;
|
||||
|
||||
private:
|
||||
Settings m_settings;
|
||||
|
|
|
@ -3,6 +3,8 @@ import QtQuick.Controls 2.12
|
|||
|
||||
BasicButtonType {
|
||||
id: root
|
||||
property alias textItem: textItem
|
||||
|
||||
background: Item {}
|
||||
contentItem: Item {
|
||||
anchors.fill: parent
|
||||
|
@ -12,6 +14,7 @@ BasicButtonType {
|
|||
anchors.verticalCenter: parent.verticalCenter
|
||||
}
|
||||
Text {
|
||||
id: textItem
|
||||
anchors.fill: parent
|
||||
leftPadding: 30
|
||||
text: root.text
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
import QtQuick 2.12
|
||||
import QtQuick.Controls 2.12
|
||||
import SortFilterProxyModel 0.2
|
||||
import "./"
|
||||
import "../../Controls"
|
||||
import "../../Config"
|
||||
|
@ -8,7 +9,7 @@ Drawer {
|
|||
id: root
|
||||
signal containerSelected(int id)
|
||||
property alias selectedIndex: tb.currentIndex
|
||||
property var filter: function (item){ return item.is_vpn_role }
|
||||
property alias modelFilters: proxyModel.filters
|
||||
|
||||
z: -3
|
||||
|
||||
|
@ -21,6 +22,20 @@ Drawer {
|
|||
modal: true
|
||||
interactive: true
|
||||
|
||||
SortFilterProxyModel {
|
||||
id: proxyModel
|
||||
sourceModel: UiLogic.containersModel
|
||||
filters: [
|
||||
ValueFilter {
|
||||
roleName: "is_installed_role"
|
||||
value: false },
|
||||
ValueFilter {
|
||||
roleName: "is_vpn_role"
|
||||
value: true }
|
||||
]
|
||||
|
||||
}
|
||||
|
||||
Flickable {
|
||||
clip: true
|
||||
anchors.fill: parent
|
||||
|
@ -48,21 +63,12 @@ Drawer {
|
|||
width: parent.width - 40
|
||||
height: contentItem.height
|
||||
|
||||
spacing: 1
|
||||
spacing: 0
|
||||
clip: true
|
||||
interactive: false
|
||||
model: UiLogic.containersModel
|
||||
model: proxyModel
|
||||
|
||||
delegate: Item {
|
||||
required property int index
|
||||
|
||||
required property string name_role
|
||||
required property string desc_role
|
||||
required property bool is_vpn_role
|
||||
required property bool is_other_role
|
||||
required property bool is_installed_role
|
||||
|
||||
visible: filter(this)
|
||||
implicitWidth: 170 * 2
|
||||
implicitHeight: 30
|
||||
Item {
|
||||
|
|
|
@ -7,10 +7,9 @@ import "../Config"
|
|||
|
||||
Item {
|
||||
id: root
|
||||
property int page: PageEnum.Start
|
||||
property int protocol: PageEnum.Start
|
||||
property var logic: null
|
||||
// width: GC.screenWidth
|
||||
// height: GC.screenHeight
|
||||
|
||||
anchors.fill: parent
|
||||
}
|
||||
|
|
|
@ -49,7 +49,6 @@ PageBase {
|
|||
|
||||
SelectContainer {
|
||||
id: container_selector
|
||||
//filter: function (){ return is_vpn_role }
|
||||
}
|
||||
|
||||
Column {
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
import QtQuick 2.12
|
||||
import QtQuick.Controls 2.12
|
||||
import SortFilterProxyModel 0.2
|
||||
import PageEnum 1.0
|
||||
import "./"
|
||||
import "../Controls"
|
||||
|
@ -34,7 +35,6 @@ PageBase {
|
|||
}
|
||||
SelectContainer {
|
||||
id: container_selector
|
||||
filter: function (item){ return ! item.is_installed_role && (item.is_vpn_role || item.is_other_role)}
|
||||
}
|
||||
|
||||
Flickable {
|
||||
|
@ -60,64 +60,168 @@ PageBase {
|
|||
|
||||
}
|
||||
|
||||
SortFilterProxyModel {
|
||||
id: proxyContainersModel
|
||||
sourceModel: UiLogic.containersModel
|
||||
filters: ValueFilter {
|
||||
roleName: "is_installed_role"
|
||||
value: true
|
||||
}
|
||||
}
|
||||
|
||||
SortFilterProxyModel {
|
||||
id: proxyProtocolsModel
|
||||
sourceModel: UiLogic.protocolsModel
|
||||
filters: ValueFilter {
|
||||
roleName: "is_installed_role"
|
||||
value: true
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
ListView {
|
||||
id: tb
|
||||
id: tb_c
|
||||
x: 10
|
||||
width: parent.width - 40
|
||||
height: contentItem.height
|
||||
|
||||
spacing: 1
|
||||
height: tb_c.contentItem.height
|
||||
currentIndex: -1
|
||||
spacing: 5
|
||||
clip: true
|
||||
interactive: false
|
||||
model: UiLogic.containersModel
|
||||
model: proxyContainersModel
|
||||
|
||||
delegate: Item {
|
||||
required property int index
|
||||
|
||||
required property string name_role
|
||||
required property string desc_role
|
||||
required property bool is_vpn_role
|
||||
required property bool is_other_role
|
||||
required property bool is_installed_role
|
||||
|
||||
visible: true
|
||||
implicitWidth: 170 * 2
|
||||
implicitHeight: 30
|
||||
implicitWidth: tb_c.width - 10
|
||||
implicitHeight: c_item.height
|
||||
Item {
|
||||
id: c_item
|
||||
width: parent.width
|
||||
height: 30
|
||||
height: lb_container_name.height + tb_p.height
|
||||
anchors.left: parent.left
|
||||
id: c1
|
||||
Rectangle {
|
||||
anchors.top: parent.top
|
||||
width: parent.width
|
||||
height: 1
|
||||
color: "lightgray"
|
||||
visible: index !== tb.currentIndex
|
||||
visible: index !== tb_c.currentIndex
|
||||
}
|
||||
Rectangle {
|
||||
anchors.fill: parent
|
||||
color: "#63B4FB"
|
||||
visible: index === tb.currentIndex
|
||||
anchors.top: lb_container_name.top
|
||||
anchors.bottom: lb_container_name.bottom
|
||||
anchors.left: parent.left
|
||||
anchors.right: parent.right
|
||||
|
||||
color: "#63B4FB"
|
||||
visible: index === tb_c.currentIndex
|
||||
}
|
||||
Text {
|
||||
id: text_name
|
||||
id: lb_container_name
|
||||
text: name_role
|
||||
font.pixelSize: 16
|
||||
anchors.fill: parent
|
||||
font.pixelSize: 17
|
||||
//font.bold: true
|
||||
color: "#100A44"
|
||||
topPadding: 5
|
||||
bottomPadding: 5
|
||||
leftPadding: 10
|
||||
verticalAlignment: Text.AlignVCenter
|
||||
wrapMode: Text.WordWrap
|
||||
}
|
||||
}
|
||||
|
||||
MouseArea {
|
||||
anchors.fill: parent
|
||||
onClicked: {
|
||||
tb.currentIndex = index
|
||||
containerSelected(index)
|
||||
root.close()
|
||||
MouseArea {
|
||||
anchors.top: lb_container_name.top
|
||||
anchors.bottom: lb_container_name.bottom
|
||||
anchors.left: parent.left
|
||||
anchors.right: parent.right
|
||||
propagateComposedEvents: true
|
||||
onClicked: {
|
||||
tb_c.currentIndex = index
|
||||
UiLogic.protocolsModel.setSelectedDockerContainer(proxyContainersModel.mapToSource(index))
|
||||
//container_selector.containerSelected(index)
|
||||
//root.close()
|
||||
}
|
||||
}
|
||||
|
||||
ListView {
|
||||
id: tb_p
|
||||
currentIndex: -1
|
||||
visible: index === tb_c.currentIndex
|
||||
x: 10
|
||||
anchors.top: lb_container_name.bottom
|
||||
|
||||
width: parent.width - 40
|
||||
height: visible ? tb_p.contentItem.height : 0
|
||||
|
||||
spacing: 0
|
||||
clip: true
|
||||
interactive: false
|
||||
model: proxyProtocolsModel
|
||||
|
||||
delegate: Item {
|
||||
id: dp_item
|
||||
|
||||
implicitWidth: tb_p.width - 10
|
||||
implicitHeight: p_item.height
|
||||
Item {
|
||||
id: p_item
|
||||
width: parent.width
|
||||
height: lb_protocol_name.height
|
||||
anchors.left: parent.left
|
||||
Rectangle {
|
||||
anchors.top: parent.top
|
||||
width: parent.width
|
||||
height: 1
|
||||
color: "lightgray"
|
||||
visible: index !== tb_p.currentIndex
|
||||
}
|
||||
// Rectangle {
|
||||
// anchors.top: lb_protocol_name.top
|
||||
// anchors.bottom: lb_protocol_name.bottom
|
||||
// width: parent.width
|
||||
|
||||
// color: "#63B4FB"
|
||||
// visible: index === tb_p.currentIndex
|
||||
// }
|
||||
|
||||
// Text {
|
||||
// id: lb_protocol_name
|
||||
// text: name_role
|
||||
// font.pixelSize: 16
|
||||
// topPadding: 5
|
||||
// bottomPadding: 5
|
||||
// leftPadding: 10
|
||||
// verticalAlignment: Text.AlignVCenter
|
||||
// wrapMode: Text.WordWrap
|
||||
// }
|
||||
|
||||
SettingButtonType {
|
||||
id: lb_protocol_name
|
||||
|
||||
// anchors.top: lb_protocol_name.top
|
||||
// anchors.bottom: lb_protocol_name.bottom
|
||||
topPadding: 10
|
||||
bottomPadding: 10
|
||||
leftPadding: 10
|
||||
|
||||
anchors.left: parent.left
|
||||
|
||||
width: parent.width
|
||||
height: 30
|
||||
text: qsTr(name_role + " settings")
|
||||
textItem.font.pixelSize: 16
|
||||
icon.source: "qrc:/images/settings.png"
|
||||
onClicked: {
|
||||
ServerContainersLogic.onPushButtonProtoCloakOpenVpnContSsConfigClicked()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// MouseArea {
|
||||
// anchors.fill: parent
|
||||
// onClicked: {
|
||||
// tb_p.currentIndex = index
|
||||
// }
|
||||
// }
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -13,6 +13,7 @@ import "Config"
|
|||
|
||||
Window {
|
||||
property var pages: ({})
|
||||
property var protocolPages: ({})
|
||||
|
||||
id: root
|
||||
visible: true
|
||||
|
|
|
@ -75,6 +75,7 @@ UiLogic::UiLogic(QObject *parent) :
|
|||
m_dialogConnectErrorText{}
|
||||
{
|
||||
m_containersModel = new ContainersModel(this);
|
||||
m_protocolsModel = new ProtocolsModel(this);
|
||||
m_vpnConnection = new VpnConnection(this);
|
||||
|
||||
m_appSettingsLogic = new AppSettingsLogic(this);
|
||||
|
@ -94,6 +95,11 @@ UiLogic::UiLogic(QObject *parent) :
|
|||
m_openVpnLogic = new OpenVpnLogic(this);
|
||||
m_shadowSocksLogic = new ShadowSocksLogic(this);
|
||||
m_cloakLogic = new CloakLogic(this);
|
||||
|
||||
m_protocolLogicMap->insert(Protocol::OpenVpn, new OpenVpnLogic(this));
|
||||
m_protocolLogicMap->insert(Protocol::ShadowSocks, new ShadowSocksLogic(this));
|
||||
m_protocolLogicMap->insert(Protocol::Cloak, new CloakLogic(this));
|
||||
//m_protocolLogicMap->insert(Protocol::WireGuard, new WireguardLogic(this));
|
||||
}
|
||||
|
||||
void UiLogic::initalizeUiLogic()
|
||||
|
|
|
@ -9,7 +9,9 @@
|
|||
#include "pages.h"
|
||||
#include "protocols/vpnprotocol.h"
|
||||
#include "containers/containers_defs.h"
|
||||
|
||||
#include "models/containers_model.h"
|
||||
#include "models/protocols_model.h"
|
||||
|
||||
#include "settings.h"
|
||||
|
||||
|
@ -27,6 +29,7 @@ class StartPageLogic;
|
|||
class VpnLogic;
|
||||
class WizardLogic;
|
||||
|
||||
class PageProtocolLogicBase;
|
||||
class OpenVpnLogic;
|
||||
class ShadowSocksLogic;
|
||||
class CloakLogic;
|
||||
|
@ -39,6 +42,7 @@ class UiLogic : public QObject
|
|||
Q_OBJECT
|
||||
|
||||
READONLY_PROPERTY(QObject *, containersModel)
|
||||
READONLY_PROPERTY(QObject *, protocolsModel)
|
||||
|
||||
Q_PROPERTY(int currentPageValue READ getCurrentPageValue WRITE setCurrentPageValue NOTIFY currentPageValueChanged)
|
||||
Q_PROPERTY(QString trayIconUrl READ getTrayIconUrl WRITE setTrayIconUrl NOTIFY trayIconUrlChanged)
|
||||
|
@ -66,6 +70,7 @@ public:
|
|||
friend class VpnLogic;
|
||||
friend class WizardLogic;
|
||||
|
||||
friend class PageProtocolLogicBase;
|
||||
friend class OpenVpnLogic;
|
||||
friend class ShadowSocksLogic;
|
||||
friend class CloakLogic;
|
||||
|
@ -175,6 +180,8 @@ public:
|
|||
ShadowSocksLogic *shadowSocksLogic() { return m_shadowSocksLogic; }
|
||||
CloakLogic *cloakLogic() { return m_cloakLogic; }
|
||||
|
||||
Q_INVOKABLE PageProtocolLogicBase *protocolLogic(amnezia::Protocol p) { return m_protocolLogicMap->value(p); }
|
||||
|
||||
private:
|
||||
AppSettingsLogic *m_appSettingsLogic;
|
||||
GeneralSettingsLogic *m_generalSettingsLogic;
|
||||
|
@ -194,6 +201,8 @@ private:
|
|||
ShadowSocksLogic *m_shadowSocksLogic;
|
||||
CloakLogic *m_cloakLogic;
|
||||
|
||||
QMap<Protocol, PageProtocolLogicBase *> *m_protocolLogicMap;
|
||||
|
||||
VpnConnection* m_vpnConnection;
|
||||
Settings m_settings;
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue