diff --git a/storybook/pages/AssetsViewPage.qml b/storybook/pages/AssetsViewPage.qml index b39f2576e3..0e3cf283cf 100644 --- a/storybook/pages/AssetsViewPage.qml +++ b/storybook/pages/AssetsViewPage.qml @@ -2,6 +2,8 @@ import QtQuick 2.15 import QtQuick.Layouts 1.15 import QtQuick.Controls 2.15 +import Qt.labs.settings 1.0 + import SortFilterProxyModel 0.2 import StatusQ 0.1 @@ -99,9 +101,19 @@ SplitView { settingsKey: "WalletAssets" serializeAsCollectibles: false - onRequestSaveSettings: (jsonData) => saveToQSettings(jsonData) - onRequestLoadSettings: loadFromQSettings() - onRequestClearSettings: clearQSettings() + onRequestSaveSettings: (jsonData) => { + savingStarted() + settingsStore.setValue(settingsKey, jsonData) + savingFinished() + } + onRequestLoadSettings: { + loadingStarted() + const jsonData = settingsStore.value(settingsKey, null) + loadingFinished(jsonData) + } + onRequestClearSettings: { + settingsStore.setValue(settingsKey, null) + } onTokenHidden: (symbol, name) => Global.displayToastMessage( qsTr("%1 (%2) was successfully hidden").arg(name).arg(symbol), "", "checkmark-circle", @@ -132,6 +144,11 @@ SplitView { onReceiveRequested: logs.logEvent("onReceiveRequested", ["symbol"], arguments) onSwitchToCommunityRequested: logs.logEvent("onSwitchToCommunityRequested", ["communityId"], arguments) onManageTokensRequested: logs.logEvent("onManageTokensRequested") + + Settings { + id: settingsStore + category: "ManageTokens-" + assetsView.controller.settingsKey + } } ColumnLayout { diff --git a/storybook/pages/CollectiblesViewPage.qml b/storybook/pages/CollectiblesViewPage.qml index 1d75083bab..a868e8d32c 100644 --- a/storybook/pages/CollectiblesViewPage.qml +++ b/storybook/pages/CollectiblesViewPage.qml @@ -2,6 +2,8 @@ import QtQuick 2.15 import QtQuick.Layouts 1.15 import QtQuick.Controls 2.15 +import Qt.labs.settings 1.0 + import StatusQ 0.1 import StatusQ.Models 0.1 import StatusQ.Core 0.1 @@ -84,9 +86,19 @@ SplitView { settingsKey: "WalletCollectibles" serializeAsCollectibles: true - onRequestSaveSettings: (jsonData) => saveToQSettings(jsonData) - onRequestLoadSettings: loadFromQSettings() - onRequestClearSettings: clearQSettings() + onRequestSaveSettings: (jsonData) => { + savingStarted() + settingsStore.setValue(settingsKey, jsonData) + savingFinished() + } + onRequestLoadSettings: { + loadingStarted() + const jsonData = settingsStore.value(settingsKey, null) + loadingFinished(jsonData) + } + onRequestClearSettings: { + settingsStore.setValue(settingsKey, null) + } onTokenHidden: (symbol, name) => Global.displayToastMessage( qsTr("%1 was successfully hidden").arg(name), "", "checkmark-circle", @@ -111,6 +123,11 @@ SplitView { isUpdating: ctrlUpdatingCheckbox.checked isFetching: ctrlFetchingCheckbox.checked isError: ctrlErrorCheckbox.checked + + Settings { + id: settingsStore + category: "ManageTokens-" + collectiblesView.controller.settingsKey + } } LogsAndControlsPanel { diff --git a/storybook/pages/ManageAssetsPanelPage.qml b/storybook/pages/ManageAssetsPanelPage.qml index 01965a5264..f4c351f352 100644 --- a/storybook/pages/ManageAssetsPanelPage.qml +++ b/storybook/pages/ManageAssetsPanelPage.qml @@ -2,6 +2,8 @@ import QtQuick 2.15 import QtQuick.Layouts 1.15 import QtQuick.Controls 2.15 +import Qt.labs.settings 1.0 + import StatusQ.Core 0.1 import StatusQ.Models 0.1 @@ -52,9 +54,24 @@ SplitView { settingsKey: "WalletAssets" serializeAsCollectibles: false - onRequestSaveSettings: (jsonData) => saveToQSettings(jsonData) - onRequestLoadSettings: loadFromQSettings() - onRequestClearSettings: clearQSettings() + onRequestSaveSettings: (jsonData) => { + savingStarted() + settingsStore.setValue(settingsKey, jsonData) + savingFinished() + } + onRequestLoadSettings: { + loadingStarted() + const jsonData = settingsStore.value(settingsKey, null) + loadingFinished(jsonData) + } + onRequestClearSettings: { + settingsStore.setValue(settingsKey, null) + } + } + + Settings { + id: settingsStore + category: "ManageTokens-" + showcasePanel.controller.settingsKey } } diff --git a/storybook/pages/ManageCollectiblesPanelPage.qml b/storybook/pages/ManageCollectiblesPanelPage.qml index 3c8eef3cfd..cd071fd568 100644 --- a/storybook/pages/ManageCollectiblesPanelPage.qml +++ b/storybook/pages/ManageCollectiblesPanelPage.qml @@ -2,6 +2,8 @@ import QtQuick 2.15 import QtQuick.Layouts 1.15 import QtQuick.Controls 2.15 +import Qt.labs.settings 1.0 + import StatusQ 0.1 import StatusQ.Models 0.1 import StatusQ.Core 0.1 @@ -46,9 +48,24 @@ SplitView { settingsKey: "WalletCollectibles" serializeAsCollectibles: true - onRequestSaveSettings: (jsonData) => saveToQSettings(jsonData) - onRequestLoadSettings: loadFromQSettings() - onRequestClearSettings: clearQSettings() + onRequestSaveSettings: (jsonData) => { + savingStarted() + settingsStore.setValue(settingsKey, jsonData) + savingFinished() + } + onRequestLoadSettings: { + loadingStarted() + const jsonData = settingsStore.value(settingsKey, null) + loadingFinished(jsonData) + } + onRequestClearSettings: { + settingsStore.setValue(settingsKey, null) + } + } + + Settings { + id: settingsStore + category: "ManageTokens-" + showcasePanel.controller.settingsKey } } diff --git a/storybook/pages/ManageHiddenPanelPage.qml b/storybook/pages/ManageHiddenPanelPage.qml index 5de6173a7f..ac0e066669 100644 --- a/storybook/pages/ManageHiddenPanelPage.qml +++ b/storybook/pages/ManageHiddenPanelPage.qml @@ -2,6 +2,8 @@ import QtQuick 2.15 import QtQuick.Layouts 1.15 import QtQuick.Controls 2.15 +import Qt.labs.settings 1.0 + import StatusQ 0.1 import StatusQ.Core 0.1 import StatusQ.Models 0.1 @@ -46,9 +48,24 @@ SplitView { settingsKey: "WalletAssets" serializeAsCollectibles: false - onRequestSaveSettings: (jsonData) => saveToQSettings(jsonData) - onRequestLoadSettings: loadFromQSettings() - onRequestClearSettings: clearQSettings() + onRequestSaveSettings: (jsonData) => { + savingStarted() + assetsSettingsStore.setValue(settingsKey, jsonData) + savingFinished() + } + onRequestLoadSettings: { + loadingStarted() + const jsonData = assetsSettingsStore.value(settingsKey, null) + loadingFinished(jsonData) + } + onRequestClearSettings: { + assetsSettingsStore.setValue(settingsKey, null) + } + } + + Settings { + id: assetsSettingsStore + category: "ManageTokens-" + assetsController.settingsKey } ManageTokensController { @@ -57,9 +74,24 @@ SplitView { settingsKey: "WalletCollectibles" serializeAsCollectibles: true - onRequestSaveSettings: (jsonData) => saveToQSettings(jsonData) - onRequestLoadSettings: loadFromQSettings() - onRequestClearSettings: clearQSettings() + onRequestSaveSettings: (jsonData) => { + savingStarted() + collectiblesSettingsStore.setValue(settingsKey, jsonData) + savingFinished() + } + onRequestLoadSettings: { + loadingStarted() + const jsonData = collectiblesSettingsStore.value(settingsKey, null) + loadingFinished(jsonData) + } + onRequestClearSettings: { + collectiblesSettingsStore.setValue(settingsKey, null) + } + } + + Settings { + id: collectiblesSettingsStore + category: "ManageTokens-" + collectiblesController.settingsKey } ManageHiddenPanel { diff --git a/storybook/qmlTests/tests/tst_ManageCollectiblesPanel.qml b/storybook/qmlTests/tests/tst_ManageCollectiblesPanel.qml index ad6cbd08b2..fc3322c97e 100644 --- a/storybook/qmlTests/tests/tst_ManageCollectiblesPanel.qml +++ b/storybook/qmlTests/tests/tst_ManageCollectiblesPanel.qml @@ -1,6 +1,8 @@ import QtQuick 2.15 import QtTest 1.15 +import Qt.labs.settings 1.0 + import StatusQ 0.1 import StatusQ.Models 0.1 @@ -32,6 +34,7 @@ Item { Component { id: componentUnderTest ManageCollectiblesPanel { + id: panel width: 500 height: contentHeight controller: ManageTokensController { @@ -39,9 +42,17 @@ Item { settingsKey: "WalletCollectibles" serializeAsCollectibles: true - onRequestSaveSettings: (jsonData) => saveToQSettings(jsonData) - onRequestLoadSettings: loadFromQSettings() - onRequestClearSettings: clearQSettings() + onRequestSaveSettings: (jsonData) => { + savingStarted() + settingsStore.setValue(settingsKey, jsonData) + savingFinished() + } + onRequestLoadSettings: { + loadingStarted() + const jsonData = settingsStore.value(settingsKey, null) + loadingFinished(jsonData) + } + onRequestClearSettings: panel.clearSettings() onCommunityTokenGroupHidden: (communityName) => Global.displayToastMessage( qsTr("%1 community collectibles successfully hidden").arg(communityName), "", "checkmark-circle", @@ -50,6 +61,12 @@ Item { function clearSettings() { controller.clearQSettings() + settingsStore.setValue(panel.controller.settingsKey, null) + } + + Settings { + id: settingsStore + category: "ManageTokens-" + panel.controller.settingsKey } } } diff --git a/ui/StatusQ/src/wallet/managetokenscontroller.cpp b/ui/StatusQ/src/wallet/managetokenscontroller.cpp index 71f662cba5..eff58dccc8 100644 --- a/ui/StatusQ/src/wallet/managetokenscontroller.cpp +++ b/ui/StatusQ/src/wallet/managetokenscontroller.cpp @@ -165,24 +165,7 @@ void ManageTokensController::showHideCollectionGroup(const QString& groupId, boo requestSaveSettings(serializeSettingsAsJson()); } -void ManageTokensController::saveToQSettings(const QString& json) -{ - Q_ASSERT(!m_settingsKey.isEmpty()); - - savingStarted(); - - // save to QSettings - m_settings.beginGroup(settingsGroupName()); - - // data - m_settings.setValue(m_settingsKey, json); - - m_settings.endGroup(); - m_settings.sync(); - - savingFinished(); -} - +// Used in testing void ManageTokensController::clearQSettings() { Q_ASSERT(!m_settingsKey.isEmpty()); @@ -196,19 +179,6 @@ void ManageTokensController::clearQSettings() emit settingsDirtyChanged(false); } -void ManageTokensController::loadFromQSettings() -{ - Q_ASSERT(!m_settingsKey.isEmpty()); - - loadingStarted(); - - // load from QSettings - m_settings.beginGroup(settingsGroupName()); - const auto jsonData = m_settings.value(m_settingsKey).toString(); - m_settings.endGroup(); - - loadingFinished(jsonData); -} void ManageTokensController::setSettingsDirty(bool dirty) { @@ -238,13 +208,14 @@ void ManageTokensController::revert() { requestLoadSettings(); } void ManageTokensController::savingStarted() { - setSettingsDirty(true); // save to QSettings + setSettingsDirty(true); m_settings.beginGroup(settingsGroupName()); m_settings.setValue(QStringLiteral("ArrangeByCommunity"), m_arrangeByCommunity); m_settings.setValue(QStringLiteral("ArrangeByCollection"), m_arrangeByCollection); m_settings.endGroup(); + m_settings.sync(); } void ManageTokensController::savingFinished() @@ -265,19 +236,6 @@ void ManageTokensController::loadingStarted() m_settings.beginGroup(settingsGroupName()); - // hidden groups - const auto groups = m_settings.value(QStringLiteral("HiddenCommunityGroups")).toStringList(); - if (!groups.isEmpty()) { - m_hiddenCommunityGroups = {groups.constBegin(), groups.constEnd()}; - emit hiddenCommunityGroupsChanged(); - } - const auto collections = m_settings.value(QStringLiteral("HiddenCollectionGroups")).toStringList(); - if (!collections.isEmpty()) { - m_hiddenCollectionGroups = {collections.constBegin(), collections.constEnd()}; - emit hiddenCollectionGroupsChanged(); - } - - // arrange by setArrangeByCommunity(m_settings.value(QStringLiteral("ArrangeByCommunity"), false).toBool()); setArrangeByCollection(m_settings.value(QStringLiteral("ArrangeByCollection"), false).toBool()); @@ -558,6 +516,16 @@ void ManageTokensController::rebuildCommunityTokenGroupsModel() for (const auto& group : std::as_const(result)) m_communityTokenGroupsModel->addItem(group); + // rebuild hidden community groups + m_hiddenCommunityGroups.clear(); + for (auto i = 0; i < m_communityTokenGroupsModel->rowCount(); i++) { + const auto& group = m_communityTokenGroupsModel->itemAt(i); + if (m_settingsData.contains(group.communityId) && !m_settingsData.value(group.communityId).visible) { + m_hiddenCommunityGroups.insert(group.communityId); + } + } + emit hiddenCommunityGroupsChanged(); + qCDebug(manageTokens) << "!!! GROUPS MODEL REBUILT WITH GROUPS:" << communityIds; } @@ -649,6 +617,17 @@ void ManageTokensController::rebuildCollectionGroupsModel() for (const auto& group : std::as_const(result)) m_collectionGroupsModel->addItem(group); + // rebuild hidden collection groups + m_hiddenCollectionGroups.clear(); + for (auto i = 0; i < m_collectionGroupsModel->rowCount(); i++) { + const auto& group = m_collectionGroupsModel->itemAt(i); + if (m_settingsData.contains(group.collectionUid) && !m_settingsData.value(group.collectionUid).visible) { + m_hiddenCollectionGroups.insert(group.collectionUid); + } + } + emit hiddenCollectionGroupsChanged(); + + qCDebug(manageTokens) << "!!! COLLECTION MODEL REBUILT WITH GROUPS:" << collectionIds; } diff --git a/ui/StatusQ/src/wallet/managetokenscontroller.h b/ui/StatusQ/src/wallet/managetokenscontroller.h index 9905d663a2..ba99c6d92f 100644 --- a/ui/StatusQ/src/wallet/managetokenscontroller.h +++ b/ui/StatusQ/src/wallet/managetokenscontroller.h @@ -52,14 +52,13 @@ public: Q_INVOKABLE void showHideGroup(const QString& groupId, bool flag); Q_INVOKABLE void showHideCollectionGroup(const QString& groupId, bool flag); - Q_INVOKABLE void loadFromQSettings(); - Q_INVOKABLE void saveToQSettings(const QString& json); Q_INVOKABLE void clearQSettings(); Q_INVOKABLE void revert(); - /// required to be called before the saving is started + /// required to call and guard the saving process Q_INVOKABLE void savingStarted(); Q_INVOKABLE void savingFinished(); + /// required to call and guard the loading process Q_INVOKABLE void loadingStarted(); Q_INVOKABLE void loadingFinished(const QString& jsonData);