Warning, /network/neochat/src/qml/ManualRoomDialog.qml is written in an unsupported language. File is not indexed.
0001 // SPDX-FileCopyrightText: 2023 James Graham <james.h.graham@protonmail.com>
0002 // SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
0003
0004 import QtQuick
0005 import QtQuick.Layouts
0006
0007 import org.kde.kirigami as Kirigami
0008 import org.kde.kirigamiaddons.formcard as FormCard
0009
0010 import org.kde.neochat
0011
0012 Kirigami.Dialog {
0013 id: root
0014
0015 /**
0016 * @brief The connection for the current user.
0017 */
0018 required property NeoChatConnection connection
0019
0020 /**
0021 * @brief Signal emitted when a valid room id or alias is entered.
0022 */
0023 signal roomSelected(string roomId, string displayName, url avatarUrl, string alias, string topic, int memberCount, bool isJoined)
0024
0025 title: i18nc("@title", "Room ID or Alias")
0026
0027 width: Math.min(applicationWindow().width, Kirigami.Units.gridUnit * 24)
0028 leftPadding: 0
0029 rightPadding: 0
0030 topPadding: 0
0031 bottomPadding: 0
0032
0033 standardButtons: Kirigami.Dialog.Cancel
0034 customFooterActions: [
0035 Kirigami.Action {
0036 enabled: roomIdAliasText.isValidText
0037 text: i18n("OK")
0038 icon.name: "dialog-ok"
0039 onTriggered: {
0040 // We don't necessarily have all the info so fill out the best we can.
0041 let roomId = roomIdAliasText.isAlias() ? "" : roomIdAliasText.text;
0042 let displayName = "";
0043 let avatarUrl = "";
0044 let alias = roomIdAliasText.isAlias() ? roomIdAliasText.text : "";
0045 let topic = "";
0046 let memberCount = -1;
0047 let isJoined = false;
0048 if (roomIdAliasText.room) {
0049 roomId = roomIdAliasText.room.id;
0050 displayName = roomIdAliasText.room.displayName;
0051 avatarUrl = roomIdAliasText.room.avatarUrl.toString().length > 0 ? connection.makeMediaUrl(roomIdAliasText.room.avatarUrl) : "";
0052 alias = roomIdAliasText.room.canonicalAlias;
0053 topic = roomIdAliasText.room.topic;
0054 memberCount = roomIdAliasText.room.joinedCount;
0055 isJoined = true;
0056 }
0057 root.roomSelected(roomId, displayName, avatarUrl, alias, topic, memberCount, isJoined);
0058 root.close();
0059 }
0060 }
0061 ]
0062
0063 contentItem: ColumnLayout {
0064 spacing: 0
0065 FormCard.FormTextFieldDelegate {
0066 id: roomIdAliasText
0067 property bool isValidText: text.match(/(#|!)(.+):(.+)/g)
0068 property bool correctStart: text.startsWith("#") || text.startsWith("!")
0069 property NeoChatRoom room: {
0070 if (!acceptableInput) {
0071 return null;
0072 }
0073 if (isAlias()) {
0074 return root.connection.roomByAlias(text);
0075 } else {
0076 return root.connection.room(text);
0077 }
0078 }
0079
0080 label: i18n("Room ID or Alias:")
0081 statusMessage: {
0082 if (text.length > 0 && !correctStart) {
0083 return i18n("Must start with # for an alias or ! for an ID");
0084 }
0085 if (timer.running) {
0086 return "";
0087 }
0088 if (text.length > 0 && !isValidText) {
0089 return i18n("The input is not a valid room ID or alias");
0090 }
0091 return correctStart ? "" : i18n("Must start with # for an alias or ! for an ID");
0092 }
0093 status: text.length > 0 ? Kirigami.MessageType.Error : Kirigami.MessageType.Information
0094
0095 onTextEdited: timer.restart()
0096
0097 function isAlias() {
0098 return roomIdAliasText.text.startsWith("#");
0099 }
0100
0101 Timer {
0102 id: timer
0103 interval: 1000
0104 }
0105 }
0106 }
0107
0108 onVisibleChanged: {
0109 roomIdAliasText.forceActiveFocus();
0110 timer.restart();
0111 }
0112 }