Warning, /network/neochat/src/qml/RoomSecurity.qml is written in an unsupported language. File is not indexed.
0001 // SPDX-FileCopyrightText: 2019-2020 Black Hat <bhat@encom.eu.org> 0002 // SPDX-FileCopyrightText: 2021 Carl Schwan <carl@carlschwan.eu> 0003 // SPDX-License-Identifier: GPL-3.0-only 0004 0005 import QtQuick 0006 import QtQuick.Controls as QQC2 0007 import QtQuick.Layouts 0008 0009 import org.kde.kirigami as Kirigami 0010 import org.kde.kirigamiaddons.formcard as FormCard 0011 0012 import org.kde.neochat 0013 0014 FormCard.FormCardPage { 0015 id: root 0016 0017 property NeoChatRoom room 0018 property string needUpgradeRoom: i18n("You need to upgrade this room to a newer version to enable this setting.") 0019 0020 title: i18n("Security") 0021 0022 FormCard.FormHeader { 0023 title: i18nc("@option:check", "Encryption") 0024 } 0025 FormCard.FormCard { 0026 FormCard.FormSwitchDelegate { 0027 id: enableEncryptionSwitch 0028 text: i18n("Enable encryption") 0029 description: i18nc("option:check", "Once enabled, encryption cannot be disabled.") 0030 enabled: room.canEncryptRoom 0031 checked: room.usesEncryption 0032 onToggled: if (checked) { 0033 let dialog = confirmEncryptionDialog.createObject(applicationWindow().overlay, {room: room}); 0034 dialog.open(); 0035 } 0036 } 0037 } 0038 0039 FormCard.FormHeader { 0040 title: i18nc("@option:check", "Access") 0041 } 0042 FormCard.FormCard { 0043 FormCard.FormRadioDelegate { 0044 text: i18nc("@option:check", "Private (invite only)") 0045 description: i18n("Only invited people can join.") 0046 checked: room.joinRule === "invite" 0047 enabled: room.canSendState("m.room.join_rules") 0048 onCheckedChanged: if (checked && room.joinRule != "invite") { 0049 root.room.joinRule = "invite"; 0050 } 0051 } 0052 FormCard.FormRadioDelegate { 0053 text: i18nc("@option:check", "Space members") 0054 description: i18n("Anyone in the selected spaces can find and join.") + 0055 (!["8", "9", "10"].includes(room.version) ? `\n${needUpgradeRoom}` : "") 0056 checked: room.joinRule === "restricted" 0057 enabled: room.canSendState("m.room.join_rules") && ["8", "9", "10"].includes(room.version) 0058 onCheckedChanged: if (checked && room.joinRule != "restricted") { 0059 selectSpacesDialog.createObject(applicationWindow().overlay).open(); 0060 } 0061 0062 contentItem.children: QQC2.Button { 0063 visible: root.room.joinRule === "restricted" 0064 text: i18n("Select spaces") 0065 icon.name: "list-add" 0066 0067 onClicked: selectSpacesDialog.createObject(applicationWindow().overlay).open(); 0068 0069 QQC2.ToolTip.text: text 0070 QQC2.ToolTip.delay: Kirigami.Units.toolTipDelay 0071 QQC2.ToolTip.visible: hovered 0072 } 0073 0074 Component { 0075 id: selectSpacesDialog 0076 SelectSpacesDialog { 0077 room: root.room 0078 } 0079 } 0080 } 0081 FormCard.FormRadioDelegate { 0082 text: i18nc("@option:check", "Knock") 0083 description: i18n("People not in the room need to request an invite to join the room.") + 0084 (!["7", "8", "9", "10"].includes(room.version) ? `\n${needUpgradeRoom}` : "") 0085 checked: room.joinRule === "knock" 0086 // https://spec.matrix.org/v1.4/rooms/#feature-matrix 0087 enabled: room.canSendState("m.room.join_rules") && ["7", "8", "9", "10"].includes(room.version) 0088 onCheckedChanged: if (checked && room.joinRule != "knock") { 0089 root.room.joinRule = "knock"; 0090 } 0091 } 0092 FormCard.FormRadioDelegate { 0093 text: i18nc("@option:check", "Public") 0094 description: i18nc("@option:check", "Anyone can find and join.") 0095 checked: room.joinRule === "public" 0096 enabled: room.canSendState("m.room.join_rules") 0097 onCheckedChanged: if (checked && root.room.joinRule != "public") { 0098 root.room.joinRule = "public"; 0099 } 0100 } 0101 } 0102 0103 FormCard.FormHeader { 0104 title: i18nc("@option:check", "Message history visibility") 0105 } 0106 FormCard.FormCard { 0107 FormCard.FormRadioDelegate { 0108 text: i18nc("@option:check", "Anyone") 0109 description: i18nc("@option:check", "Anyone, regardless of whether they have joined, can view history.") 0110 checked: room.historyVisibility === "world_readable" 0111 enabled: room.canSendState("m.room.history_visibility") 0112 onCheckedChanged: if (checked) { 0113 room.historyVisibility = "world_readable" 0114 } 0115 } 0116 FormCard.FormRadioDelegate { 0117 text: i18nc("@option:check", "Members only") 0118 description: i18nc("@option:check", "All members can view the entire message history, even before they joined.") 0119 checked: room.historyVisibility === "shared" 0120 enabled: room.canSendState("m.room.history_visibility") 0121 onCheckedChanged: if (checked) { 0122 room.historyVisibility = "shared" 0123 } 0124 } 0125 FormCard.FormRadioDelegate { 0126 text: i18nc("@option:check", "Members only (since invite)") 0127 description: i18nc("@option:check", "New members can view the message history from the point they were invited to the room.") 0128 checked: room.historyVisibility === "invited" 0129 enabled: room.canSendState("m.room.history_visibility") 0130 onCheckedChanged: if (checked) { 0131 room.historyVisibility = "invited" 0132 } 0133 } 0134 FormCard.FormRadioDelegate { 0135 text: i18nc("@option:check", "Members only (since joining)") 0136 description: i18nc("@option:check", "New members can view the message history from the point they joined the room.") 0137 checked: room.historyVisibility === "joined" 0138 enabled: room.canSendState("m.room.history_visibility") 0139 onCheckedChanged: if (checked) { 0140 room.historyVisibility = "joined" 0141 } 0142 } 0143 } 0144 0145 property Component confirmEncryptionDialog: Component { 0146 id: confirmEncryptionDialog 0147 0148 ConfirmEncryptionDialog { 0149 onClosed: { 0150 // At the point this is executed, the state in the room is not yet changed. 0151 // The value will be updated when room.onEncryption() emitted. 0152 // This is in case if user simply closed the dialog. 0153 enableEncryptionSwitch.checked = false 0154 } 0155 } 0156 } 0157 0158 property Connections connections: Connections { 0159 target: room 0160 onEncryption: { 0161 enableEncryptionSwitch.checked = room.usesEncryption 0162 } 0163 } 0164 } 0165