From d2f73cd88fa93046b5df2c7f49ba4d777fe3079d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Cie=C5=9Blak?= Date: Fri, 17 May 2024 11:06:31 +0200 Subject: [PATCH] fix(Communities): Show channel for non-members when read-only, tokenless permission is set When channel has view-only permission not requiring any holdings, the channel is not encrypted and should be presented to non-members in read-only mode. Closes: #14439 --- ui/app/AppLayouts/Chat/ChatLayout.qml | 38 +++++++++++++++++++++++ ui/app/AppLayouts/Chat/views/ChatView.qml | 6 ++++ 2 files changed, 44 insertions(+) diff --git a/ui/app/AppLayouts/Chat/ChatLayout.qml b/ui/app/AppLayouts/Chat/ChatLayout.qml index 6b2d353fbe..ecf77695a3 100644 --- a/ui/app/AppLayouts/Chat/ChatLayout.qml +++ b/ui/app/AppLayouts/Chat/ChatLayout.qml @@ -155,6 +155,44 @@ StackLayout { root.sectionItemModel.memberRole === Constants.memberRole.admin || root.sectionItemModel.memberRole === Constants.memberRole.tokenMaster hasViewOnlyPermissions: root.permissionsStore.viewOnlyPermissionsModel.count > 0 + + hasUnrestrictedViewOnlyPermission: { + viewOnlyUnrestrictedPermissionHelper.revision + + const model = root.permissionsStore.viewOnlyPermissionsModel + const count = model.rowCount() + + for (let i = 0; i < count; i++) { + const holdings = ModelUtils.get(model, i, "holdingsListModel") + + if (holdings.rowCount() === 0) + return true + } + + return false + } + + Instantiator { + id: viewOnlyUnrestrictedPermissionHelper + + model: root.permissionsStore.viewOnlyPermissionsModel + + property int revision: 0 + + delegate: QObject { + ModelChangeTracker { + model: model.holdingsListModel + + onRevisionChanged: viewOnlyUnrestrictedPermissionHelper.revision++ + } + } + } + + ModelChangeTracker { + model: root.permissionsStore.viewOnlyPermissionsModel + onRevisionChanged: viewOnlyUnrestrictedPermissionHelper.revision++ + } + hasViewAndPostPermissions: root.permissionsStore.viewAndPostPermissionsModel.count > 0 viewOnlyPermissionsModel: root.permissionsStore.viewOnlyPermissionsModel viewAndPostPermissionsModel: root.permissionsStore.viewAndPostPermissionsModel diff --git a/ui/app/AppLayouts/Chat/views/ChatView.qml b/ui/app/AppLayouts/Chat/views/ChatView.qml index 75b4eaa414..ca41bad928 100644 --- a/ui/app/AppLayouts/Chat/views/ChatView.qml +++ b/ui/app/AppLayouts/Chat/views/ChatView.qml @@ -51,7 +51,10 @@ StatusSectionLayout { readonly property var chatContentModule: rootStore.currentChatContentModule() || null readonly property bool viewOnlyPermissionsSatisfied: chatContentModule.viewOnlyPermissionsSatisfied readonly property bool viewAndPostPermissionsSatisfied: chatContentModule.viewAndPostPermissionsSatisfied + property bool hasViewOnlyPermissions: false + property bool hasUnrestrictedViewOnlyPermission: false + property bool hasViewAndPostPermissions: false property bool amIMember: false property bool amISectionAdmin: false @@ -92,6 +95,9 @@ StatusSectionLayout { return false } if (!amIMember) { + if (hasUnrestrictedViewOnlyPermission) + return false + return hasViewAndPostPermissions || hasViewOnlyPermissions } if (amISectionAdmin) {