From c3f39ad24d7f617c846fb5a818fa0b8b1a34f10d Mon Sep 17 00:00:00 2001 From: "vladimir.kuznetsov" Date: Wed, 7 Jun 2023 13:17:48 +0300 Subject: [PATCH] added caching of servers and containers in models --- client/ui/models/containers_model.cpp | 52 +++++++++++-------- client/ui/models/containers_model.h | 5 ++ client/ui/models/servers_model.cpp | 27 ++++++---- client/ui/models/servers_model.h | 3 ++ .../Components/SettingsContainersListView.qml | 2 - client/ui/qml/Controls2/BackButtonType.qml | 16 ------ client/ui/qml/Pages2/PageHome.qml | 30 +++++------ client/ui/qml/Pages2/PageStart.qml | 4 +- 8 files changed, 69 insertions(+), 70 deletions(-) diff --git a/client/ui/models/containers_model.cpp b/client/ui/models/containers_model.cpp index e65e79d7..b6574439 100644 --- a/client/ui/models/containers_model.cpp +++ b/client/ui/models/containers_model.cpp @@ -21,23 +21,25 @@ bool ContainersModel::setData(const QModelIndex &index, const QVariant &value, i DockerContainer container = ContainerProps::allContainers().at(index.row()); switch (role) { - case NameRole: - // return ContainerProps::containerHumanNames().value(container); - case DescRole: - // return ContainerProps::containerDescriptions().value(container); - case ConfigRole: - m_settings->setContainerConfig(m_currentlyProcessedServerIndex, - container, - value.toJsonObject()); - case ServiceTypeRole: - // return ContainerProps::containerService(container); - case DockerContainerRole: - // return container; - case IsInstalledRole: - // return m_settings->containers(m_currentlyProcessedServerIndex).contains(container); - case IsDefaultRole: - m_settings->setDefaultContainer(m_currentlyProcessedServerIndex, container); - emit defaultContainerChanged(); + case NameRole: + // return ContainerProps::containerHumanNames().value(container); + case DescRole: + // return ContainerProps::containerDescriptions().value(container); + case ConfigRole: + m_settings->setContainerConfig(m_currentlyProcessedServerIndex, + container, + value.toJsonObject()); + case ServiceTypeRole: + // return ContainerProps::containerService(container); + case DockerContainerRole: + // return container; + case IsInstalledRole: + // return m_settings->containers(m_currentlyProcessedServerIndex).contains(container); + case IsDefaultRole: { + m_settings->setDefaultContainer(m_currentlyProcessedServerIndex, container); + m_defaultContainerIndex = container; + emit defaultContainerChanged(); + } } emit dataChanged(index, index); @@ -58,8 +60,10 @@ QVariant ContainersModel::data(const QModelIndex &index, int role) const return ContainerProps::containerHumanNames().value(container); case DescRole: return ContainerProps::containerDescriptions().value(container); - case ConfigRole: - return m_settings->containerConfig(m_currentlyProcessedServerIndex, container); + case ConfigRole: { + if (container == DockerContainer::None) return QJsonObject(); + return m_containers.value(container); + } case ServiceTypeRole: return ContainerProps::containerService(container); case DockerContainerRole: @@ -71,11 +75,11 @@ QVariant ContainersModel::data(const QModelIndex &index, int role) const case EasySetupDescriptionRole: return ContainerProps::easySetupDescription(container); case IsInstalledRole: - return m_settings->containers(m_currentlyProcessedServerIndex).contains(container); + return m_containers.contains(container); case IsCurrentlyInstalledRole: return container == static_cast(m_currentlyInstalledContainerIndex); case IsDefaultRole: - return container == m_settings->defaultContainer(m_currentlyProcessedServerIndex); + return container == m_defaultContainerIndex; case IsSupportedRole: return ContainerProps::isSupportedByCurrentPlatform(container); } @@ -87,6 +91,8 @@ void ContainersModel::setCurrentlyProcessedServerIndex(int index) { beginResetModel(); m_currentlyProcessedServerIndex = index; + m_containers = m_settings->containers(m_currentlyProcessedServerIndex); + m_defaultContainerIndex = m_settings->defaultContainer(m_currentlyProcessedServerIndex); endResetModel(); emit defaultContainerChanged(); } @@ -98,12 +104,12 @@ void ContainersModel::setCurrentlyInstalledContainerIndex(int index) DockerContainer ContainersModel::getDefaultContainer() { - return m_settings->defaultContainer(m_currentlyProcessedServerIndex); + return m_defaultContainerIndex; } QString ContainersModel::getDefaultContainerName() { - return ContainerProps::containerHumanNames().value(getDefaultContainer()); + return ContainerProps::containerHumanNames().value(m_defaultContainerIndex); } int ContainersModel::getCurrentlyInstalledContainerIndex() diff --git a/client/ui/models/containers_model.h b/client/ui/models/containers_model.h index 3ce7bd6b..5753a1dd 100644 --- a/client/ui/models/containers_model.h +++ b/client/ui/models/containers_model.h @@ -55,8 +55,13 @@ protected: QHash roleNames() const override; private: + QMap m_containers; + + int m_currentlyProcessedServerIndex; int m_currentlyInstalledContainerIndex; + DockerContainer m_defaultContainerIndex; + std::shared_ptr m_settings; }; diff --git a/client/ui/models/servers_model.cpp b/client/ui/models/servers_model.cpp index d05bb695..bb08e88c 100644 --- a/client/ui/models/servers_model.cpp +++ b/client/ui/models/servers_model.cpp @@ -2,24 +2,28 @@ ServersModel::ServersModel(std::shared_ptr settings, QObject *parent) : m_settings(settings), QAbstractListModel(parent) { - + m_servers = m_settings->serversArray(); + m_defaultServerIndex = m_settings->defaultServerIndex(); } int ServersModel::rowCount(const QModelIndex &parent) const { Q_UNUSED(parent); - return static_cast(m_settings->serversCount()); + return static_cast(m_servers.size()); } bool ServersModel::setData(const QModelIndex &index, const QVariant &value, int role) { if (!index.isValid() || index.row() < 0 - || index.row() >= static_cast(m_settings->serversCount())) { + || index.row() >= static_cast(m_servers.size())) { return false; } switch (role) { - case IsDefaultRole: m_settings->setDefaultServer(index.row()); + case IsDefaultRole: { + m_settings->setDefaultServer(index.row()); + m_defaultServerIndex = m_settings->defaultServerIndex(); + } default: return true; } @@ -29,12 +33,11 @@ bool ServersModel::setData(const QModelIndex &index, const QVariant &value, int QVariant ServersModel::data(const QModelIndex &index, int role) const { - if (!index.isValid() || index.row() < 0 || index.row() >= static_cast(m_settings->serversCount())) { + if (!index.isValid() || index.row() < 0 || index.row() >= static_cast(m_servers.size())) { return QVariant(); } - const QJsonArray &servers = m_settings->serversArray(); - const QJsonObject server = servers.at(index.row()).toObject(); + const QJsonObject server = m_servers.at(index.row()).toObject(); switch (role) { case NameRole: { @@ -49,7 +52,7 @@ QVariant ServersModel::data(const QModelIndex &index, int role) const case CredentialsRole: return QVariant::fromValue(m_settings->serverCredentials(index.row())); case IsDefaultRole: - return index.row() == m_settings->defaultServerIndex(); + return index.row() == m_defaultServerIndex; case IsCurrentlyProcessedRole: return index.row() == m_currenlyProcessedServerIndex; } @@ -59,12 +62,12 @@ QVariant ServersModel::data(const QModelIndex &index, int role) const const int ServersModel::getDefaultServerIndex() { - return m_settings->defaultServerIndex(); + return m_defaultServerIndex; } const int ServersModel::getServersCount() { - return m_settings->serversCount(); + return m_servers.count(); } void ServersModel::setCurrentlyProcessedServerIndex(int index) @@ -74,7 +77,7 @@ void ServersModel::setCurrentlyProcessedServerIndex(int index) bool ServersModel::isDefaultServerCurrentlyProcessed() { - return m_settings->defaultServerIndex() == m_currenlyProcessedServerIndex; + return m_defaultServerIndex == m_currenlyProcessedServerIndex; } ServerCredentials ServersModel::getCurrentlyProcessedServerCredentials() @@ -86,6 +89,7 @@ void ServersModel::addServer(const QJsonObject &server) { beginResetModel(); m_settings->addServer(server); + m_servers = m_settings->serversArray(); endResetModel(); } @@ -93,6 +97,7 @@ void ServersModel::removeServer() { beginResetModel(); m_settings->removeServer(m_currenlyProcessedServerIndex); + m_servers = m_settings->serversArray(); if (m_settings->defaultServerIndex() == m_currenlyProcessedServerIndex) { m_settings->setDefaultServer(0); diff --git a/client/ui/models/servers_model.h b/client/ui/models/servers_model.h index 54ac5ef4..593babc3 100644 --- a/client/ui/models/servers_model.h +++ b/client/ui/models/servers_model.h @@ -46,8 +46,11 @@ protected: QHash roleNames() const override; private: + QJsonArray m_servers; + std::shared_ptr m_settings; + int m_defaultServerIndex; int m_currenlyProcessedServerIndex; }; diff --git a/client/ui/qml/Components/SettingsContainersListView.qml b/client/ui/qml/Components/SettingsContainersListView.qml index 5175fd49..abc50837 100644 --- a/client/ui/qml/Components/SettingsContainersListView.qml +++ b/client/ui/qml/Components/SettingsContainersListView.qml @@ -37,8 +37,6 @@ ListView { ButtonGroup.group: containersRadioButtonGroup - checked: isDefault - indicator: Rectangle { anchors.fill: parent color: containerRadioButton.hovered ? Qt.rgba(1, 1, 1, 0.08) : "transparent" diff --git a/client/ui/qml/Controls2/BackButtonType.qml b/client/ui/qml/Controls2/BackButtonType.qml index bec31823..389191e8 100644 --- a/client/ui/qml/Controls2/BackButtonType.qml +++ b/client/ui/qml/Controls2/BackButtonType.qml @@ -34,22 +34,6 @@ Item { Layout.fillWidth: true color: "transparent" - - ShaderEffectSource { - id: effectSource - - sourceItem: background - anchors.fill: background - sourceRect: Qt.rect(x,y, width, height) - } - - FastBlur { - id: blur - anchors.fill: effectSource - - source: effectSource - radius: 100 - } } } } diff --git a/client/ui/qml/Pages2/PageHome.qml b/client/ui/qml/Pages2/PageHome.qml index e5521787..227870c5 100644 --- a/client/ui/qml/Pages2/PageHome.qml +++ b/client/ui/qml/Pages2/PageHome.qml @@ -137,21 +137,6 @@ PageType { Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter spacing: 8 - SortFilterProxyModel { - id: proxyContainersModel - sourceModel: ContainersModel - filters: [ - ValueFilter { - roleName: "serviceType" - value: ProtocolEnum.Vpn - }, - ValueFilter { - roleName: "isSupported" - value: true - } - ] - } - DropDownType { id: containersDropDown @@ -176,7 +161,20 @@ PageType { listView: HomeContainersListView { rootWidth: root.width - model: proxyContainersModel + model: SortFilterProxyModel { + id: proxyContainersModel + sourceModel: ContainersModel + filters: [ + ValueFilter { + roleName: "serviceType" + value: ProtocolEnum.Vpn + }, + ValueFilter { + roleName: "isSupported" + value: true + } + ] + } currentIndex: ContainersModel.getDefaultContainer() } } diff --git a/client/ui/qml/Pages2/PageStart.qml b/client/ui/qml/Pages2/PageStart.qml index 436194b2..83b641a1 100644 --- a/client/ui/qml/Pages2/PageStart.qml +++ b/client/ui/qml/Pages2/PageStart.qml @@ -45,9 +45,9 @@ PageType { Component.onCompleted: { var pagePath = PageController.getPagePath(PageEnum.PageHome) - tabBarStackView.push(pagePath, { "objectName" : pagePath }) ServersModel.setCurrentlyProcessedServerIndex(ServersModel.getDefaultServerIndex()) ContainersModel.setCurrentlyProcessedServerIndex(ServersModel.getDefaultServerIndex()) + tabBarStackView.push(pagePath, { "objectName" : pagePath }) } } @@ -71,8 +71,8 @@ PageType { isSelected: tabBar.currentIndex === 0 image: "qrc:/images/controls/home.svg" onClicked: { - tabBarStackView.goToTabBarPage(PageEnum.PageHome) ContainersModel.setCurrentlyProcessedServerIndex(ServersModel.getDefaultServerIndex()) + tabBarStackView.goToTabBarPage(PageEnum.PageHome) } } TabImageButtonType {