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, {
0034 room: room
0035 });
0036 dialog.open();
0037 }
0038 }
0039 }
0040
0041 FormCard.FormHeader {
0042 title: i18nc("@option:check", "Access")
0043 }
0044 FormCard.FormCard {
0045 FormCard.FormRadioDelegate {
0046 text: i18nc("@option:check", "Private (invite only)")
0047 description: i18n("Only invited people can join.")
0048 checked: room.joinRule === "invite"
0049 enabled: room.canSendState("m.room.join_rules")
0050 onCheckedChanged: if (checked && room.joinRule != "invite") {
0051 root.room.joinRule = "invite";
0052 }
0053 }
0054 FormCard.FormRadioDelegate {
0055 text: i18nc("@option:check", "Space members")
0056 description: i18n("Anyone in the selected spaces can find and join.") + (!["8", "9", "10"].includes(room.version) ? `\n${needUpgradeRoom}` : "")
0057 checked: room.joinRule === "restricted"
0058 enabled: room.canSendState("m.room.join_rules") && ["8", "9", "10"].includes(room.version)
0059 onCheckedChanged: if (checked && room.joinRule != "restricted") {
0060 selectSpacesDialog.createObject(applicationWindow().overlay).open();
0061 }
0062
0063 contentItem.children: QQC2.Button {
0064 visible: root.room.joinRule === "restricted"
0065 text: i18n("Select spaces")
0066 icon.name: "list-add"
0067
0068 onClicked: selectSpacesDialog.createObject(applicationWindow().overlay).open()
0069
0070 QQC2.ToolTip.text: text
0071 QQC2.ToolTip.delay: Kirigami.Units.toolTipDelay
0072 QQC2.ToolTip.visible: hovered
0073 }
0074
0075 Component {
0076 id: selectSpacesDialog
0077 SelectSpacesDialog {
0078 room: root.room
0079 }
0080 }
0081 }
0082 FormCard.FormRadioDelegate {
0083 text: i18nc("@option:check", "Knock")
0084 description: i18n("People not in the room need to request an invite to join the room.") + (!["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 }