moment/src/gui/Popups/InviteToRoomPopup.qml

127 lines
3.7 KiB
QML

// SPDX-License-Identifier: LGPL-3.0-or-later
import QtQuick 2.12
import QtQuick.Layouts 1.12
import "../Base"
BoxPopup {
id: popup
// fillAvailableHeight: true
summary.text: qsTr("Invite members to <i>%1</i>").arg(roomName)
summary.textFormat: Text.StyledText
okText: qsTr("Invite")
okEnabled: invitingAllowed && Boolean(inviteArea.text.trim())
onOpened: inviteArea.area.forceActiveFocus()
onInvitingAllowedChanged:
if (! invitingAllowed && inviteFuture) inviteFuture.cancel()
box.buttonCallbacks: ({
ok: button => {
button.loading = true
const inviteesLeft = inviteArea.text.trim().split(/\s+/).filter(
user => ! successfulInvites.includes(user)
)
inviteFuture = py.callClientCoro(
userId,
"room_mass_invite",
[roomId, ...inviteesLeft],
([successes, errors]) => {
if (errors.length < 1) {
popup.close()
return
}
successfulInvites = successes
failedInvites = errors
button.loading = false
}
)
},
cancel: button => {
if (inviteFuture) inviteFuture.cancel()
popup.close()
},
})
property string userId
property string roomId
property string roomName
property bool invitingAllowed: true
property var inviteFuture: null
property var successfulInvites: []
property var failedInvites: []
HScrollableTextArea {
id: inviteArea
focusItemOnTab: box.firstButton
area.placeholderText:
qsTr("User IDs (e.g. @bob:matrix.org @alice:localhost)")
Layout.fillWidth: true
Layout.fillHeight: true
}
HLabel {
id: errorMessage
visible: Layout.maximumHeight > 0
wrapMode: Text.Wrap
color: theme.colors.errorText
text:
invitingAllowed ?
allErrors :
qsTr("You do not have permission to invite members to this room")
Layout.maximumHeight: text ? implicitHeight : 0
Layout.fillWidth: true
readonly property string allErrors: {
// TODO: handle these: real user not found
const lines = []
for (const [user, error] of failedInvites) {
const type = py.getattr(
py.getattr(error, "__class__"), "__name__",
)
lines.push(
type === "InvalidUserId" ?
qsTr("%1 is not a valid user ID, expected format is " +
"@username:homeserver").arg(user) :
type === "UserFromOtherServerDisallowed" ?
qsTr("This room rejects users from other matrix " +
"servers, can't invite %1").arg(user) :
type === "UserNotFound" ?
qsTr("%1 not found, please verify the entered user ID")
.arg(user) :
type === "MatrixUnsupportedRoomVersion" ?
qsTr("%1's server does not support this room's version")
.arg(user) :
type === "MatrixForbidden" ?
qsTr("%1 is banned from this room")
.arg(user) :
qsTr("Unknown error while inviting %1: %2 - %3")
.arg(user).arg(type).arg(py.getattr(error, "args"))
)
}
return lines.join("\n\n")
}
Behavior on Layout.maximumHeight { HNumberAnimation {} }
}
}