diff --git a/imports/Spectral/Component/AutoListView.qml b/imports/NeoChat/Component/AutoListView.qml similarity index 100% rename from imports/Spectral/Component/AutoListView.qml rename to imports/NeoChat/Component/AutoListView.qml diff --git a/imports/Spectral/Component/AutoMouseArea.qml b/imports/NeoChat/Component/AutoMouseArea.qml similarity index 90% rename from imports/Spectral/Component/AutoMouseArea.qml rename to imports/NeoChat/Component/AutoMouseArea.qml index ac5e63eb3..80fb1c5b6 100644 --- a/imports/Spectral/Component/AutoMouseArea.qml +++ b/imports/NeoChat/Component/AutoMouseArea.qml @@ -1,6 +1,6 @@ import QtQuick 2.12 -import Spectral.Setting 0.1 +import NeoChat.Setting 0.1 MouseArea { signal primaryClicked() diff --git a/imports/Spectral/Component/AutoRectangle.qml b/imports/NeoChat/Component/AutoRectangle.qml similarity index 100% rename from imports/Spectral/Component/AutoRectangle.qml rename to imports/NeoChat/Component/AutoRectangle.qml diff --git a/imports/Spectral/Component/AutoTextField.qml b/imports/NeoChat/Component/AutoTextField.qml similarity index 100% rename from imports/Spectral/Component/AutoTextField.qml rename to imports/NeoChat/Component/AutoTextField.qml diff --git a/imports/NeoChat/Component/ChatTextInput.qml b/imports/NeoChat/Component/ChatTextInput.qml new file mode 100644 index 000000000..62b3be9cf --- /dev/null +++ b/imports/NeoChat/Component/ChatTextInput.qml @@ -0,0 +1,468 @@ +import QtQuick 2.12 +import QtQuick.Controls 2.12 +import QtQuick.Layouts 1.12 +import org.kde.kirigami 2.13 as Kirigami + +import NeoChat.Component 2.0 +import NeoChat.Component.Emoji 2.0 +import NeoChat.Dialog 2.0 +import NeoChat.Effect 2.0 +import NeoChat.Setting 0.1 + +import org.kde.neochat 0.1 + +Control { + id: root + + property alias isReply: replyItem.visible + property bool isReaction: false + property var replyUser + property string replyEventID + property string replyContent + + property alias isAutoCompleting: autoCompleteListView.visible + property var autoCompleteModel + property int autoCompleteBeginPosition + property int autoCompleteEndPosition + + property bool hasAttachment: false + property url attachmentPath + + padding: 0 + + background: Rectangle { + color: Kirigami.Theme.backgroundColor + Kirigami.Separator { + Rectangle { + anchors.fill: parent + color: Kirigami.Theme.focusColor + } + anchors { + left: parent.left + right: parent.right + top: parent.top + } + } + } + + contentItem: ColumnLayout { + spacing: 0 + + RowLayout { + Layout.fillWidth: true + Layout.margins: 8 + + id: replyItem + + visible: false + + spacing: 8 + + Control { + Layout.alignment: Qt.AlignTop + + padding: 4 + + contentItem: RowLayout { + Kirigami.Avatar { + Layout.preferredWidth: 24 + Layout.preferredHeight: 24 + + source: replyUser ? "image://mxc/" + replyUser.avatarMediaId: "" + name: replyUser ? replyUser.displayName : "No name" + } + + Label { + Layout.alignment: Qt.AlignVCenter + text: replyUser ? replyUser.displayName : "No name" + rightPadding: 8 + } + } + } + + TextEdit { + Layout.fillWidth: true + + text: "" + replyContent + + selectByMouse: true + readOnly: true + wrapMode: Label.Wrap + selectedTextColor: "white" + textFormat: Text.RichText + } + } + + EmojiPicker { + Layout.fillWidth: true + + id: emojiPicker + + visible: false + + textArea: inputField + emojiModel: EmojiModel { id: emojiModel } + } + + ListView { + Layout.fillWidth: true + Layout.preferredHeight: 36 + Layout.margins: 8 + + id: autoCompleteListView + + visible: false + + model: autoCompleteModel + + clip: true + spacing: 4 + orientation: ListView.Horizontal + highlightFollowsCurrentItem: true + keyNavigationWraps: true + + delegate: Control { + property string autoCompleteText: modelData.displayName ?? modelData.unicode + property bool isEmoji: modelData.unicode != null + readonly property bool highlighted: autoCompleteListView.currentIndex == index + + height: 36 + padding: 6 + + background: Rectangle { + visible: !isEmoji + color: highlighted ? border.color : "transparent" + border.color: isEmoji ? MPalette.accent : modelData.color + border.width: 2 + radius: height / 2 + } + + contentItem: RowLayout { + spacing: 6 + + Text { + width: 24 + height: 24 + visible: isEmoji + text: autoCompleteText + font.pixelSize: 24 + font.family: "Emoji" + verticalAlignment: Text.AlignVCenter + horizontalAlignment: Text.AlignHCenter + } + + Kirigami.Avatar { + Layout.preferredWidth: 24 + Layout.preferredHeight: 24 + + source: modelData.avatarMediaId ? "image://mxc/" + modelData.avatarMediaId : "" + color: modelData.color ? Qt.darker(modelData.color, 1.1) : null + } + Label { + Layout.fillHeight: true + + visible: !isEmoji + text: autoCompleteText + color: highlighted ? Kirigami.Theme.highlightTextColor : Kirigami.Theme.textColor + verticalAlignment: Text.AlignVCenter + rightPadding: 8 + } + } + + MouseArea { + anchors.fill: parent + onClicked: { + autoCompleteListView.currentIndex = index + inputField.replaceAutoComplete(autoCompleteText) + } + } + } + } + + Rectangle { + Layout.fillWidth: true + Layout.preferredHeight: 1 + Layout.leftMargin: 12 + Layout.rightMargin: 12 + + visible: emojiPicker.visible || replyItem.visible || autoCompleteListView.visible + } + + RowLayout { + Layout.fillWidth: true + + spacing: 0 + + ToolButton { + id: uploadButton + + Layout.preferredWidth: 48 + Layout.preferredHeight: 48 + Layout.alignment: Qt.AlignBottom + + visible: !isReply && !hasAttachment + + icon.name: "mail-attachment" + + onClicked: { + if (Clipboard.hasImage) { + attachDialog.open() + } else { + var fileDialog = openFileDialog.createObject(ApplicationWindow.overlay) + + fileDialog.chosen.connect(function(path) { + if (!path) return + + root.attach(path) + }) + + fileDialog.open() + } + } + + BusyIndicator { + anchors.fill: parent + + running: currentRoom && currentRoom.hasFileUploading + } + } + + ToolButton { + Layout.preferredWidth: 48 + Layout.preferredHeight: 48 + Layout.alignment: Qt.AlignBottom + + id: cancelReplyButton + + visible: isReply + + icon.name: "dialog-cancel" + + onClicked: clearReply() + } + + Control { + Layout.margins: 6 + Layout.preferredHeight: 36 + Layout.alignment: Qt.AlignVCenter + + visible: hasAttachment + + rightPadding: 8 + + contentItem: RowLayout { + spacing: 0 + + ToolButton { + Layout.preferredWidth: height + Layout.fillHeight: true + + id: cancelAttachmentButton + + icon.name: "dialog-cancel" + + onClicked: { + hasAttachment = false; + attachmentPath = ""; + } + } + + Label { + Layout.alignment: Qt.AlignVCenter + + text: attachmentPath !== "" ? attachmentPath.toString().substring(attachmentPath.toString().lastIndexOf('/') + 1, attachmentPath.length) : "" + } + } + } + + TextArea { + property real progress: 0 + + Layout.fillWidth: true + Layout.minimumHeight: 48 + + id: inputField + + wrapMode: Text.Wrap + placeholderText: "Send a Message" + topPadding: 0 + bottomPadding: 0 + selectByMouse: true + verticalAlignment: TextEdit.AlignVCenter + + text: currentRoom != null ? currentRoom.cachedInput : "" + + background: Item {} + + Rectangle { + width: currentRoom && currentRoom.hasFileUploading ? parent.width * currentRoom.fileUploadingProgress / 100 : 0 + height: parent.height + + opacity: 0.2 + } + + Timer { + id: timeoutTimer + + repeat: false + interval: 2000 + onTriggered: { + repeatTimer.stop() + currentRoom.sendTypingNotification(false) + } + } + + Timer { + id: repeatTimer + + repeat: true + interval: 5000 + triggeredOnStart: true + onTriggered: currentRoom.sendTypingNotification(true) + } + + Keys.onReturnPressed: { + if (event.modifiers & Qt.ShiftModifier) { + insert(cursorPosition, "\n") + } else { + postMessage(text) + text = "" + clearReply() + closeAll() + } + } + + Keys.onEscapePressed: closeAll() + + Keys.onBacktabPressed: if (isAutoCompleting) autoCompleteListView.decrementCurrentIndex() + + Keys.onTabPressed: { + if (isAutoCompleting) { + autoCompleteListView.incrementCurrentIndex() + } else { + autoCompleteBeginPosition = text.substring(0, cursorPosition).lastIndexOf(" ") + 1 + var autoCompletePrefix = text.substring(0, cursorPosition).split(" ").pop() + if (!autoCompletePrefix) return + if (autoCompletePrefix.startsWith(":")) { + autoCompleteBeginPosition = text.substring(0, cursorPosition).lastIndexOf(" ") + 1 + autoCompleteModel = emojiModel.filterModel(autoCompletePrefix) + if (autoCompleteModel.length === 0) return + isAutoCompleting = true + autoCompleteEndPosition = cursorPosition + } else { + autoCompleteModel = currentRoom.getUsers(autoCompletePrefix) + if (autoCompleteModel.length === 0) return + isAutoCompleting = true + autoCompleteEndPosition = cursorPosition + } + } + replaceAutoComplete(autoCompleteListView.currentItem.autoCompleteText) + } + + onTextChanged: { + timeoutTimer.restart() + repeatTimer.start() + currentRoom.cachedInput = text + + if (cursorPosition !== autoCompleteBeginPosition && cursorPosition !== autoCompleteEndPosition) { + isAutoCompleting = false + autoCompleteListView.currentIndex = 0 + } + } + + function replaceAutoComplete(word) { + remove(autoCompleteBeginPosition, autoCompleteEndPosition) + autoCompleteEndPosition = autoCompleteBeginPosition + word.length + insert(cursorPosition, word) + } + + function postMessage(text) { + if(!currentRoom) { return } + + if (hasAttachment) { + currentRoom.uploadFile(attachmentPath, text) + clearAttachment() + return + } + + if (text.trim().length === 0) { return } + + var PREFIX_ME = '/me ' + var PREFIX_NOTICE = '/notice ' + var PREFIX_RAINBOW = '/rainbow ' + + var messageEventType = RoomMessageEvent.Text + + if (text.indexOf(PREFIX_RAINBOW) === 0) { + text = text.substr(PREFIX_RAINBOW.length) + + var parsedText = "" + var rainbowColor = ["#ff2b00", "#ff5500", "#ff8000", "#ffaa00", "#ffd500", "#ffff00", "#d4ff00", "#aaff00", "#80ff00", "#55ff00", "#2bff00", "#00ff00", "#00ff2b", "#00ff55", "#00ff80", "#00ffaa", "#00ffd5", "#00ffff", "#00d4ff", "#00aaff", "#007fff", "#0055ff", "#002bff", "#0000ff", "#2a00ff", "#5500ff", "#7f00ff", "#aa00ff", "#d400ff", "#ff00ff", "#ff00d4", "#ff00aa", "#ff0080", "#ff0055", "#ff002b", "#ff0000"] + for (var i = 0; i < text.length; i++) { + parsedText = parsedText + "" + text.charAt(i) + "" + } + currentRoom.postHtmlMessage(text, parsedText, RoomMessageEvent.Text, replyEventID) + return + } + + if (text.indexOf(PREFIX_ME) === 0) { + text = text.substr(PREFIX_ME.length) + messageEventType = RoomMessageEvent.Emote + } else if (text.indexOf(PREFIX_NOTICE) === 0) { + text = text.substr(PREFIX_NOTICE.length) + messageEventType = RoomMessageEvent.Notice + } + + console.log(replyContent, replyUser, replyEventID, messageEventType); + currentRoom.postArbitaryMessage(text, messageEventType, replyEventID) + } + } + + ToolButton { + Layout.preferredWidth: 48 + Layout.preferredHeight: 48 + Layout.alignment: Qt.AlignBottom + + id: emojiButton + icon.name: "preferences-desktop-emoticons" + + onClicked: emojiPicker.visible = !emojiPicker.visible + } + } + } + + function insert(str) { + inputField.insert(inputField.cursorPosition, str) + } + + function clear() { + inputField.clear() + } + + function clearReply() { + isReply = false + replyUser = null; + replyContent = ""; + replyEventID = "" + } + + function focus() { + inputField.forceActiveFocus() + } + + function closeAll() { + replyItem.visible = false + autoCompleteListView.visible = false + emojiPicker.visible = false + } + + function attach(localPath) { + hasAttachment = true + attachmentPath = localPath + } + + function clearAttachment() { + hasAttachment = false + attachmentPath = "" + } +} diff --git a/imports/Spectral/Component/Emoji/EmojiPicker.qml b/imports/NeoChat/Component/Emoji/EmojiPicker.qml similarity index 97% rename from imports/Spectral/Component/Emoji/EmojiPicker.qml rename to imports/NeoChat/Component/Emoji/EmojiPicker.qml index f82f821cf..5fdc76f0b 100644 --- a/imports/Spectral/Component/Emoji/EmojiPicker.qml +++ b/imports/NeoChat/Component/Emoji/EmojiPicker.qml @@ -3,10 +3,10 @@ import QtQuick.Controls 2.12 import QtQuick.Layouts 1.12 import QtQuick.Controls.Material 2.12 -import Spectral.Component 2.0 +import NeoChat.Component 2.0 -import Spectral 0.1 -import Spectral.Setting 0.1 +import org.kde.neochat 0.1 +import NeoChat.Setting 0.1 ColumnLayout { property string emojiCategory: "history" diff --git a/imports/Spectral/Component/Emoji/qmldir b/imports/NeoChat/Component/Emoji/qmldir similarity index 50% rename from imports/Spectral/Component/Emoji/qmldir rename to imports/NeoChat/Component/Emoji/qmldir index d16a01e2f..7ae231ee9 100644 --- a/imports/Spectral/Component/Emoji/qmldir +++ b/imports/NeoChat/Component/Emoji/qmldir @@ -1,2 +1,2 @@ -module Spectral.Component.Emoji +module NeoChat.Component.Emoji EmojiPicker 2.0 EmojiPicker.qml diff --git a/imports/Spectral/Component/FullScreenImage.qml b/imports/NeoChat/Component/FullScreenImage.qml similarity index 100% rename from imports/Spectral/Component/FullScreenImage.qml rename to imports/NeoChat/Component/FullScreenImage.qml diff --git a/imports/Spectral/Component/ScrollHelper.qml b/imports/NeoChat/Component/ScrollHelper.qml similarity index 100% rename from imports/Spectral/Component/ScrollHelper.qml rename to imports/NeoChat/Component/ScrollHelper.qml diff --git a/imports/Spectral/Component/Timeline/AudioDelegate.qml b/imports/NeoChat/Component/Timeline/AudioDelegate.qml similarity index 97% rename from imports/Spectral/Component/Timeline/AudioDelegate.qml rename to imports/NeoChat/Component/Timeline/AudioDelegate.qml index f868d1c61..3dc0cce90 100644 --- a/imports/Spectral/Component/Timeline/AudioDelegate.qml +++ b/imports/NeoChat/Component/Timeline/AudioDelegate.qml @@ -6,13 +6,13 @@ import Qt.labs.platform 1.0 as Platform import QtMultimedia 5.12 import org.kde.kirigami 2.13 as Kirigami -import Spectral 0.1 -import Spectral.Setting 0.1 +import org.kde.neochat 0.1 +import NeoChat.Setting 0.1 -import Spectral.Component 2.0 -import Spectral.Dialog 2.0 -import Spectral.Menu.Timeline 2.0 -import Spectral.Effect 2.0 +import NeoChat.Component 2.0 +import NeoChat.Dialog 2.0 +import NeoChat.Menu.Timeline 2.0 +import NeoChat.Effect 2.0 RowLayout { readonly property bool avatarVisible: !sentByMe && showAuthor diff --git a/imports/Spectral/Component/Timeline/FileDelegate.qml b/imports/NeoChat/Component/Timeline/FileDelegate.qml similarity index 97% rename from imports/Spectral/Component/Timeline/FileDelegate.qml rename to imports/NeoChat/Component/Timeline/FileDelegate.qml index 73c8ce94e..bbc07b460 100644 --- a/imports/Spectral/Component/Timeline/FileDelegate.qml +++ b/imports/NeoChat/Component/Timeline/FileDelegate.qml @@ -6,13 +6,13 @@ import QtGraphicalEffects 1.0 import Qt.labs.platform 1.0 as Platform import org.kde.kirigami 2.13 as Kirigami -import Spectral 0.1 -import Spectral.Setting 0.1 +import org.kde.neochat 0.1 +import NeoChat.Setting 0.1 -import Spectral.Component 2.0 -import Spectral.Dialog 2.0 -import Spectral.Menu.Timeline 2.0 -import Spectral.Effect 2.0 +import NeoChat.Component 2.0 +import NeoChat.Dialog 2.0 +import NeoChat.Menu.Timeline 2.0 +import NeoChat.Effect 2.0 RowLayout { readonly property bool avatarVisible: !sentByMe && showAuthor diff --git a/imports/Spectral/Component/Timeline/ImageDelegate.qml b/imports/NeoChat/Component/Timeline/ImageDelegate.qml similarity index 96% rename from imports/Spectral/Component/Timeline/ImageDelegate.qml rename to imports/NeoChat/Component/Timeline/ImageDelegate.qml index eaef076ce..c9a697643 100644 --- a/imports/Spectral/Component/Timeline/ImageDelegate.qml +++ b/imports/NeoChat/Component/Timeline/ImageDelegate.qml @@ -4,13 +4,13 @@ import QtQuick.Layouts 1.12 import QtGraphicalEffects 1.0 import Qt.labs.platform 1.0 as Platform -import Spectral 0.1 -import Spectral.Setting 0.1 +import org.kde.neochat 0.1 +import NeoChat.Setting 0.1 -import Spectral.Component 2.0 -import Spectral.Dialog 2.0 -import Spectral.Menu.Timeline 2.0 -import Spectral.Effect 2.0 +import NeoChat.Component 2.0 +import NeoChat.Dialog 2.0 +import NeoChat.Menu.Timeline 2.0 +import NeoChat.Effect 2.0 Image { readonly property bool isAnimated: contentType === "image/gif" diff --git a/imports/Spectral/Component/Timeline/MessageDelegate.qml b/imports/NeoChat/Component/Timeline/MessageDelegate.qml similarity index 97% rename from imports/Spectral/Component/Timeline/MessageDelegate.qml rename to imports/NeoChat/Component/Timeline/MessageDelegate.qml index 29e67b0b1..0ccae8577 100644 --- a/imports/Spectral/Component/Timeline/MessageDelegate.qml +++ b/imports/NeoChat/Component/Timeline/MessageDelegate.qml @@ -11,9 +11,9 @@ import QtGraphicalEffects 1.12 import org.kde.kirigami 2.13 as Kirigami -import Spectral 0.1 -import Spectral.Setting 0.1 -import Spectral.Component 2.0 +import org.kde.neochat 0.1 +import NeoChat.Setting 0.1 +import NeoChat.Component 2.0 RowLayout { default property alias innerObject : column.children diff --git a/imports/Spectral/Component/Timeline/ReactionDelegate.qml b/imports/NeoChat/Component/Timeline/ReactionDelegate.qml similarity index 100% rename from imports/Spectral/Component/Timeline/ReactionDelegate.qml rename to imports/NeoChat/Component/Timeline/ReactionDelegate.qml diff --git a/imports/Spectral/Component/Timeline/SectionDelegate.qml b/imports/NeoChat/Component/Timeline/SectionDelegate.qml similarity index 100% rename from imports/Spectral/Component/Timeline/SectionDelegate.qml rename to imports/NeoChat/Component/Timeline/SectionDelegate.qml diff --git a/imports/Spectral/Component/Timeline/StateDelegate.qml b/imports/NeoChat/Component/Timeline/StateDelegate.qml similarity index 92% rename from imports/Spectral/Component/Timeline/StateDelegate.qml rename to imports/NeoChat/Component/Timeline/StateDelegate.qml index 4cb7f4ded..98be63fe4 100644 --- a/imports/Spectral/Component/Timeline/StateDelegate.qml +++ b/imports/NeoChat/Component/Timeline/StateDelegate.qml @@ -4,10 +4,10 @@ import QtQuick.Layouts 1.12 import QtQuick.Controls.Material 2.12 import org.kde.kirigami 2.13 as Kirigami -import Spectral.Component 2.0 -import Spectral.Dialog 2.0 -import Spectral.Effect 2.0 -import Spectral.Setting 0.1 +import NeoChat.Component 2.0 +import NeoChat.Dialog 2.0 +import NeoChat.Effect 2.0 +import NeoChat.Setting 0.1 RowLayout { id: row diff --git a/imports/Spectral/Component/Timeline/TextDelegate.qml b/imports/NeoChat/Component/Timeline/TextDelegate.qml similarity index 100% rename from imports/Spectral/Component/Timeline/TextDelegate.qml rename to imports/NeoChat/Component/Timeline/TextDelegate.qml diff --git a/imports/Spectral/Component/Timeline/TimelineContainer.qml b/imports/NeoChat/Component/Timeline/TimelineContainer.qml similarity index 100% rename from imports/Spectral/Component/Timeline/TimelineContainer.qml rename to imports/NeoChat/Component/Timeline/TimelineContainer.qml diff --git a/imports/Spectral/Component/Timeline/VideoDelegate.qml b/imports/NeoChat/Component/Timeline/VideoDelegate.qml similarity index 97% rename from imports/Spectral/Component/Timeline/VideoDelegate.qml rename to imports/NeoChat/Component/Timeline/VideoDelegate.qml index 3967d875e..3b5c3a986 100644 --- a/imports/Spectral/Component/Timeline/VideoDelegate.qml +++ b/imports/NeoChat/Component/Timeline/VideoDelegate.qml @@ -7,14 +7,14 @@ import QtMultimedia 5.12 import Qt.labs.platform 1.0 as Platform import org.kde.kirigami 2.13 as Kirigami -import Spectral 0.1 -import Spectral.Setting 0.1 +import org.kde.neochat 0.1 +import NeoChat.Setting 0.1 -import Spectral.Component 2.0 -import Spectral.Dialog 2.0 -import Spectral.Menu.Timeline 2.0 -import Spectral.Effect 2.0 -import Spectral.Font 0.1 +import NeoChat.Component 2.0 +import NeoChat.Dialog 2.0 +import NeoChat.Menu.Timeline 2.0 +import NeoChat.Effect 2.0 +import NeoChat.Font 0.1 RowLayout { readonly property bool avatarVisible: showAuthor && !sentByMe diff --git a/imports/Spectral/Component/Timeline/qmldir b/imports/NeoChat/Component/Timeline/qmldir similarity index 91% rename from imports/Spectral/Component/Timeline/qmldir rename to imports/NeoChat/Component/Timeline/qmldir index 95d71ccec..a7143fbf4 100644 --- a/imports/Spectral/Component/Timeline/qmldir +++ b/imports/NeoChat/Component/Timeline/qmldir @@ -1,4 +1,4 @@ -module Spectral.Component.Timeline +module NeoChat.Component.Timeline TimelineContainer 2.0 TimelineContainer.qml MessageDelegate 2.0 MessageDelegate.qml TextDelegate 2.0 TextDelegate.qml diff --git a/imports/Spectral/Component/qmldir b/imports/NeoChat/Component/qmldir similarity index 82% rename from imports/Spectral/Component/qmldir rename to imports/NeoChat/Component/qmldir index 4ec3b1ecd..8234dc66b 100644 --- a/imports/Spectral/Component/qmldir +++ b/imports/NeoChat/Component/qmldir @@ -1,4 +1,4 @@ -module Spectral.Component +module NeoChat.Component AutoMouseArea 2.0 AutoMouseArea.qml MaterialIcon 2.0 MaterialIcon.qml SideNavButton 2.0 SideNavButton.qml @@ -7,3 +7,4 @@ AutoListView 2.0 AutoListView.qml AutoTextField 2.0 AutoTextField.qml FullScreenImage 2.0 FullScreenImage.qml AutoRectangle 2.0 AutoRectangle.qml +ChatTextInput 2.0 ChatTextInput.qml diff --git a/imports/Spectral/Dialog/AcceptInvitationDialog.qml b/imports/NeoChat/Dialog/AcceptInvitationDialog.qml similarity index 100% rename from imports/Spectral/Dialog/AcceptInvitationDialog.qml rename to imports/NeoChat/Dialog/AcceptInvitationDialog.qml diff --git a/imports/Spectral/Dialog/AccountDetailDialog.qml b/imports/NeoChat/Dialog/AccountDetailDialog.qml similarity index 98% rename from imports/Spectral/Dialog/AccountDetailDialog.qml rename to imports/NeoChat/Dialog/AccountDetailDialog.qml index f7d1bccd5..bdbd685ab 100644 --- a/imports/Spectral/Dialog/AccountDetailDialog.qml +++ b/imports/NeoChat/Dialog/AccountDetailDialog.qml @@ -3,11 +3,11 @@ import QtQuick.Controls 2.12 import QtQuick.Layouts 1.12 import org.kde.kirigami 2.13 as Kirigami -import Spectral.Component 2.0 -import Spectral.Effect 2.0 +import NeoChat.Component 2.0 +import NeoChat.Effect 2.0 -import Spectral 0.1 -import Spectral.Setting 0.1 +import org.kde.neochat 0.1 +import NeoChat.Setting 0.1 Dialog { anchors.centerIn: parent diff --git a/imports/Spectral/Dialog/CreateRoomDialog.qml b/imports/NeoChat/Dialog/CreateRoomDialog.qml similarity index 92% rename from imports/Spectral/Dialog/CreateRoomDialog.qml rename to imports/NeoChat/Dialog/CreateRoomDialog.qml index 6c29f8a2f..5bf70ed2f 100644 --- a/imports/Spectral/Dialog/CreateRoomDialog.qml +++ b/imports/NeoChat/Dialog/CreateRoomDialog.qml @@ -2,9 +2,9 @@ import QtQuick 2.12 import QtQuick.Controls 2.12 import QtQuick.Layouts 1.12 -import Spectral.Component 2.0 +import NeoChat.Component 2.0 -import Spectral 0.1 +import org.kde.neochat 0.1 Dialog { anchors.centerIn: parent diff --git a/imports/Spectral/Dialog/FontFamilyDialog.qml b/imports/NeoChat/Dialog/FontFamilyDialog.qml similarity index 89% rename from imports/Spectral/Dialog/FontFamilyDialog.qml rename to imports/NeoChat/Dialog/FontFamilyDialog.qml index 7fda066ea..e56a40724 100644 --- a/imports/Spectral/Dialog/FontFamilyDialog.qml +++ b/imports/NeoChat/Dialog/FontFamilyDialog.qml @@ -2,8 +2,8 @@ import QtQuick 2.12 import QtQuick.Controls 2.12 import QtQuick.Layouts 1.12 -import Spectral.Component 2.0 -import Spectral.Setting 0.1 +import NeoChat.Component 2.0 +import NeoChat.Setting 0.1 Dialog { anchors.centerIn: parent diff --git a/imports/Spectral/Dialog/InviteUserDialog.qml b/imports/NeoChat/Dialog/InviteUserDialog.qml similarity index 97% rename from imports/Spectral/Dialog/InviteUserDialog.qml rename to imports/NeoChat/Dialog/InviteUserDialog.qml index 708ab84eb..f9556936b 100644 --- a/imports/Spectral/Dialog/InviteUserDialog.qml +++ b/imports/NeoChat/Dialog/InviteUserDialog.qml @@ -3,11 +3,11 @@ import QtQuick.Controls 2.12 import QtQuick.Layouts 1.12 import org.kde.kirigami 2.13 as Kirigami -import Spectral.Component 2.0 -import Spectral.Effect 2.0 -import Spectral.Setting 0.1 +import NeoChat.Component 2.0 +import NeoChat.Effect 2.0 +import NeoChat.Setting 0.1 -import Spectral 0.1 +import org.kde.neochat 0.1 Dialog { property var room diff --git a/imports/Spectral/Dialog/JoinRoomDialog.qml b/imports/NeoChat/Dialog/JoinRoomDialog.qml similarity index 98% rename from imports/Spectral/Dialog/JoinRoomDialog.qml rename to imports/NeoChat/Dialog/JoinRoomDialog.qml index e642d0920..3f7feae02 100644 --- a/imports/Spectral/Dialog/JoinRoomDialog.qml +++ b/imports/NeoChat/Dialog/JoinRoomDialog.qml @@ -3,11 +3,11 @@ import QtQuick.Controls 2.12 import QtQuick.Layouts 1.12 import org.kde.kirigami 2.13 as Kirigami -import Spectral.Component 2.0 -import Spectral.Effect 2.0 -import Spectral.Setting 0.1 +import NeoChat.Component 2.0 +import NeoChat.Effect 2.0 +import NeoChat.Setting 0.1 -import Spectral 0.1 +import org.kde.neochat 0.1 Dialog { property var connection diff --git a/imports/Spectral/Dialog/MessageSourceDialog.qml b/imports/NeoChat/Dialog/MessageSourceDialog.qml similarity index 100% rename from imports/Spectral/Dialog/MessageSourceDialog.qml rename to imports/NeoChat/Dialog/MessageSourceDialog.qml diff --git a/imports/Spectral/Dialog/OpenFileDialog.qml b/imports/NeoChat/Dialog/OpenFileDialog.qml similarity index 100% rename from imports/Spectral/Dialog/OpenFileDialog.qml rename to imports/NeoChat/Dialog/OpenFileDialog.qml diff --git a/imports/Spectral/Dialog/OpenFolderDialog.qml b/imports/NeoChat/Dialog/OpenFolderDialog.qml similarity index 100% rename from imports/Spectral/Dialog/OpenFolderDialog.qml rename to imports/NeoChat/Dialog/OpenFolderDialog.qml diff --git a/imports/Spectral/Dialog/RoomSettingsDialog.qml b/imports/NeoChat/Dialog/RoomSettingsDialog.qml similarity index 98% rename from imports/Spectral/Dialog/RoomSettingsDialog.qml rename to imports/NeoChat/Dialog/RoomSettingsDialog.qml index 3b97659bf..cf22a355f 100644 --- a/imports/Spectral/Dialog/RoomSettingsDialog.qml +++ b/imports/NeoChat/Dialog/RoomSettingsDialog.qml @@ -3,11 +3,11 @@ import QtQuick.Controls 2.12 import QtQuick.Layouts 1.12 import org.kde.kirigami 2.13 as Kirigami -import Spectral.Component 2.0 -import Spectral.Effect 2.0 -import Spectral.Setting 0.1 +import NeoChat.Component 2.0 +import NeoChat.Effect 2.0 +import NeoChat.Setting 0.1 -import Spectral 0.1 +import org.kde.neochat 0.1 Dialog { property var room diff --git a/imports/Spectral/Dialog/StartChatDialog.qml b/imports/NeoChat/Dialog/StartChatDialog.qml similarity index 97% rename from imports/Spectral/Dialog/StartChatDialog.qml rename to imports/NeoChat/Dialog/StartChatDialog.qml index 481c7c14d..dd07c73de 100644 --- a/imports/Spectral/Dialog/StartChatDialog.qml +++ b/imports/NeoChat/Dialog/StartChatDialog.qml @@ -2,11 +2,11 @@ import QtQuick 2.12 import QtQuick.Controls 2.12 import QtQuick.Layouts 1.12 -import Spectral.Component 2.0 -import Spectral.Effect 2.0 -import Spectral.Setting 0.1 +import NeoChat.Component 2.0 +import NeoChat.Effect 2.0 +import NeoChat.Setting 0.1 -import Spectral 0.1 +import org.kde.neochat 0.1 Dialog { property var connection diff --git a/imports/Spectral/Dialog/UserDetailDialog.qml b/imports/NeoChat/Dialog/UserDetailDialog.qml similarity index 97% rename from imports/Spectral/Dialog/UserDetailDialog.qml rename to imports/NeoChat/Dialog/UserDetailDialog.qml index d4260ed27..835245bd7 100644 --- a/imports/Spectral/Dialog/UserDetailDialog.qml +++ b/imports/NeoChat/Dialog/UserDetailDialog.qml @@ -3,9 +3,9 @@ import QtQuick.Controls 2.12 import QtQuick.Layouts 1.12 import org.kde.kirigami 2.13 as Kirigami -import Spectral.Component 2.0 -import Spectral.Effect 2.0 -import Spectral.Setting 0.1 +import NeoChat.Component 2.0 +import NeoChat.Effect 2.0 +import NeoChat.Setting 0.1 Dialog { property var room diff --git a/imports/Spectral/Dialog/qmldir b/imports/NeoChat/Dialog/qmldir similarity index 96% rename from imports/Spectral/Dialog/qmldir rename to imports/NeoChat/Dialog/qmldir index 70ca5b9e6..1c69fde11 100644 --- a/imports/Spectral/Dialog/qmldir +++ b/imports/NeoChat/Dialog/qmldir @@ -1,4 +1,4 @@ -module Spectral.Dialog +module NeoChat.Dialog RoomSettingsDialog 2.0 RoomSettingsDialog.qml UserDetailDialog 2.0 UserDetailDialog.qml MessageSourceDialog 2.0 MessageSourceDialog.qml diff --git a/imports/Spectral/Effect/CircleMask.qml b/imports/NeoChat/Effect/CircleMask.qml similarity index 100% rename from imports/Spectral/Effect/CircleMask.qml rename to imports/NeoChat/Effect/CircleMask.qml diff --git a/imports/Spectral/Effect/ElevationEffect.qml b/imports/NeoChat/Effect/ElevationEffect.qml similarity index 100% rename from imports/Spectral/Effect/ElevationEffect.qml rename to imports/NeoChat/Effect/ElevationEffect.qml diff --git a/imports/Spectral/Effect/RippleEffect.qml b/imports/NeoChat/Effect/RippleEffect.qml similarity index 99% rename from imports/Spectral/Effect/RippleEffect.qml rename to imports/NeoChat/Effect/RippleEffect.qml index 33a002f59..eff782b2b 100644 --- a/imports/Spectral/Effect/RippleEffect.qml +++ b/imports/NeoChat/Effect/RippleEffect.qml @@ -2,8 +2,8 @@ import QtQuick 2.12 import QtQuick.Controls 2.12 import QtGraphicalEffects 1.0 -import Spectral.Component 2.0 -import Spectral.Setting 0.1 +import NeoChat.Component 2.0 +import NeoChat.Setting 0.1 AutoMouseArea { id: ripple diff --git a/imports/Spectral/Effect/qmldir b/imports/NeoChat/Effect/qmldir similarity index 76% rename from imports/Spectral/Effect/qmldir rename to imports/NeoChat/Effect/qmldir index 89f10e489..deab3499d 100644 --- a/imports/Spectral/Effect/qmldir +++ b/imports/NeoChat/Effect/qmldir @@ -1,3 +1,3 @@ -module Spectral.Effect +module NeoChat.Effect ElevationEffect 2.0 ElevationEffect.qml RippleEffect 2.0 RippleEffect.qml diff --git a/imports/NeoChat/Menu/RoomListContextMenu.qml b/imports/NeoChat/Menu/RoomListContextMenu.qml new file mode 100644 index 000000000..79a6226e7 --- /dev/null +++ b/imports/NeoChat/Menu/RoomListContextMenu.qml @@ -0,0 +1,47 @@ +/** + * SPDX-FileCopyrightText: 2019 Black Hat + * SPDX-FileCopyrightText: 2020 Carl Schwan + * + * SPDX-LicenseIdentifier: GPL-3.0-only + */ +import QtQuick 2.12 +import QtQuick.Controls 2.12 + +/** + * Context menu when clicking on a room in the room list + */ +Menu { + id: root + property var room + + MenuItem { + text: i18n("Favourite") + checkable: true + checked: room.isFavourite + + onTriggered: room.isFavourite ? room.removeTag("m.favourite") : room.addTag("m.favourite", 1.0) + } + + MenuItem { + text: i18n("Deprioritize") + checkable: true + checked: room.isLowPriority + + onTriggered: room.isLowPriority ? room.removeTag("m.lowpriority") : room.addTag("m.lowpriority", 1.0) + } + + MenuSeparator {} + + MenuItem { + text: i18n("Mark as Read") + + onTriggered: room.markAllMessagesAsRead() + } + + MenuItem { + text: i18n("Leave Room") + onTriggered: room.forget() + } + + onClosed: destroy() +} diff --git a/imports/Spectral/Menu/Timeline/FileDelegateContextMenu.qml b/imports/NeoChat/Menu/Timeline/FileDelegateContextMenu.qml similarity index 95% rename from imports/Spectral/Menu/Timeline/FileDelegateContextMenu.qml rename to imports/NeoChat/Menu/Timeline/FileDelegateContextMenu.qml index 650e57381..cb1ba3ae8 100644 --- a/imports/Spectral/Menu/Timeline/FileDelegateContextMenu.qml +++ b/imports/NeoChat/Menu/Timeline/FileDelegateContextMenu.qml @@ -1,7 +1,7 @@ import QtQuick 2.12 import QtQuick.Controls 2.12 -import Spectral.Dialog 2.0 +import NeoChat.Dialog 2.0 Menu { signal viewSource() diff --git a/imports/Spectral/Menu/Timeline/MessageDelegateContextMenu.qml b/imports/NeoChat/Menu/Timeline/MessageDelegateContextMenu.qml similarity index 99% rename from imports/Spectral/Menu/Timeline/MessageDelegateContextMenu.qml rename to imports/NeoChat/Menu/Timeline/MessageDelegateContextMenu.qml index 7d31e4aa5..0f248db6d 100644 --- a/imports/Spectral/Menu/Timeline/MessageDelegateContextMenu.qml +++ b/imports/NeoChat/Menu/Timeline/MessageDelegateContextMenu.qml @@ -9,7 +9,7 @@ import QtQuick.Controls 2.12 as QQC2 import QtQuick.Layouts 1.12 import org.kde.kirigami 2.13 as Kirigami -import Spectral.Dialog 2.0 +import NeoChat.Dialog 2.0 Kirigami.OverlaySheet { id: root diff --git a/imports/Spectral/Menu/Timeline/qmldir b/imports/NeoChat/Menu/Timeline/qmldir similarity index 79% rename from imports/Spectral/Menu/Timeline/qmldir rename to imports/NeoChat/Menu/Timeline/qmldir index 20b869c17..0dd1e97bd 100644 --- a/imports/Spectral/Menu/Timeline/qmldir +++ b/imports/NeoChat/Menu/Timeline/qmldir @@ -1,3 +1,3 @@ -module Spectral.Menu.Timeline +module NeoChat.Menu.Timeline MessageDelegateContextMenu 2.0 MessageDelegateContextMenu.qml FileDelegateContextMenu 2.0 FileDelegateContextMenu.qml diff --git a/imports/Spectral/Menu/qmldir b/imports/NeoChat/Menu/qmldir similarity index 69% rename from imports/Spectral/Menu/qmldir rename to imports/NeoChat/Menu/qmldir index c52d0fd48..5e9d0448a 100644 --- a/imports/Spectral/Menu/qmldir +++ b/imports/NeoChat/Menu/qmldir @@ -1,2 +1,2 @@ -module Spectral.Menu +module NeoChat.Menu RoomListContextMenu 2.0 RoomListContextMenu.qml diff --git a/qml/AccountsPage.qml b/imports/NeoChat/Page/AccountsPage.qml similarity index 99% rename from qml/AccountsPage.qml rename to imports/NeoChat/Page/AccountsPage.qml index b9ef2fa88..80d378a06 100644 --- a/qml/AccountsPage.qml +++ b/imports/NeoChat/Page/AccountsPage.qml @@ -10,7 +10,7 @@ import QtQuick.Layouts 1.14 import org.kde.kirigami 2.12 as Kirigami -import Spectral 0.1 +import NeoChat 0.1 Kirigami.ScrollablePage { title: i18n("Accounts") diff --git a/qml/LoadingPage.qml b/imports/NeoChat/Page/LoadingPage.qml similarity index 100% rename from qml/LoadingPage.qml rename to imports/NeoChat/Page/LoadingPage.qml diff --git a/qml/LoginPage.qml b/imports/NeoChat/Page/LoginPage.qml similarity index 97% rename from qml/LoginPage.qml rename to imports/NeoChat/Page/LoginPage.qml index 230b0826d..22d43d764 100644 --- a/qml/LoginPage.qml +++ b/imports/NeoChat/Page/LoginPage.qml @@ -8,9 +8,9 @@ import QtQuick 2.12 import QtQuick.Controls 2.12 as QQC2 import QtQuick.Layouts 1.12 -import Spectral 0.1 +import NeoChat 0.1 -import Spectral.Component 2.0 +import NeoChat.Component 2.0 import org.kde.kirigami 2.12 as Kirigami diff --git a/qml/RoomListPage.qml b/imports/NeoChat/Page/RoomListPage.qml similarity index 98% rename from qml/RoomListPage.qml rename to imports/NeoChat/Page/RoomListPage.qml index ef9c8a94f..ee361f253 100644 --- a/qml/RoomListPage.qml +++ b/imports/NeoChat/Page/RoomListPage.qml @@ -9,12 +9,11 @@ import QtQuick.Controls 2.12 as QQC2 import QtQuick.Layouts 1.12 import org.kde.kirigami 2.13 as Kirigami - import org.kde.kitemmodels 1.0 -import Spectral.Component 2.0 -import Spectral 0.1 +import org.kde.neochat 0.1 -import org.kde.neochat 1.0 +import NeoChat.Component 2.0 +import NeoChat.Menu 2.0 Kirigami.ScrollablePage { id: page diff --git a/qml/RoomPage.qml b/imports/NeoChat/Page/RoomPage.qml similarity index 98% rename from qml/RoomPage.qml rename to imports/NeoChat/Page/RoomPage.qml index dae2bb92c..a691af0f1 100644 --- a/qml/RoomPage.qml +++ b/imports/NeoChat/Page/RoomPage.qml @@ -6,14 +6,13 @@ import QtQuick.Controls.Material 2.12 import org.kde.kirigami 2.13 as Kirigami import org.kde.kitemmodels 1.0 -import org.kde.neochat 1.0 +import org.kde.neochat 0.1 -import Spectral.Component 2.0 -import Spectral.Component.Timeline 2.0 -import Spectral.Dialog 2.0 -import Spectral.Effect 2.0 -import Spectral.Menu.Timeline 2.0 -import Spectral 0.1 +import NeoChat.Component 2.0 +import NeoChat.Component.Timeline 2.0 +import NeoChat.Dialog 2.0 +import NeoChat.Effect 2.0 +import NeoChat.Menu.Timeline 2.0 Kirigami.ScrollablePage { id: page diff --git a/imports/NeoChat/Page/qmldir b/imports/NeoChat/Page/qmldir new file mode 100644 index 000000000..254dc858a --- /dev/null +++ b/imports/NeoChat/Page/qmldir @@ -0,0 +1,5 @@ +module NeoChat.Page +LoadingPage 2.0 LoadingPage.qml +LoginPage 2.0 LoginPage.qml +RoomListPage 2.0 RoomListPage.qml +RoomPage 2.0 RoomPage.qml diff --git a/imports/Spectral/Panel/SpectralSidebar.qml b/imports/NeoChat/Panel/NeoChatSidebar.qml similarity index 77% rename from imports/Spectral/Panel/SpectralSidebar.qml rename to imports/NeoChat/Panel/NeoChatSidebar.qml index 1eb4b93fa..59a32bd06 100644 --- a/imports/Spectral/Panel/SpectralSidebar.qml +++ b/imports/NeoChat/Panel/NeoChatSidebar.qml @@ -7,9 +7,9 @@ import org.kde.kirigami 2.12 as Kirigami import SortFilterProxyModel 0.2 -import Spectral.Component 2.0 -import Spectral.Component.Timeline 2.0 -import Spectral 0.1 +import NeoChat.Component 2.0 +import NeoChat.Component.Timeline 2.0 +import org.kde.neochat 0.1 Kirigami.GlobalDrawer { id: root diff --git a/imports/Spectral/Panel/RoomDrawer.qml b/imports/NeoChat/Panel/RoomDrawer.qml similarity index 97% rename from imports/Spectral/Panel/RoomDrawer.qml rename to imports/NeoChat/Panel/RoomDrawer.qml index 6b43adf11..2655a68fd 100644 --- a/imports/Spectral/Panel/RoomDrawer.qml +++ b/imports/NeoChat/Panel/RoomDrawer.qml @@ -5,12 +5,12 @@ import QtQuick.Layouts 1.12 import org.kde.kirigami 2.13 as Kirigami -import Spectral.Component 2.0 -import Spectral.Dialog 2.0 -import Spectral.Effect 2.0 -import Spectral.Setting 0.1 +import NeoChat.Component 2.0 +import NeoChat.Dialog 2.0 +import NeoChat.Effect 2.0 +import NeoChat.Setting 0.1 -import Spectral 0.1 +import org.kde.neochat 0.1 Kirigami.OverlayDrawer { property var room diff --git a/imports/Spectral/Panel/RoomHeader.qml b/imports/NeoChat/Panel/RoomHeader.qml similarity index 90% rename from imports/Spectral/Panel/RoomHeader.qml rename to imports/NeoChat/Panel/RoomHeader.qml index a682f6c3a..859953d76 100644 --- a/imports/Spectral/Panel/RoomHeader.qml +++ b/imports/NeoChat/Panel/RoomHeader.qml @@ -3,10 +3,10 @@ import QtQuick.Controls 2.12 import QtQuick.Layouts 1.12 import QtQuick.Controls.Material 2.12 -import Spectral 0.1 -import Spectral.Effect 2.0 -import Spectral.Component 2.0 -import Spectral.Setting 0.1 +import org.kde.neochat 0.1 +import NeoChat.Effect 2.0 +import NeoChat.Component 2.0 +import NeoChat.Setting 0.1 Control { signal clicked() diff --git a/imports/Spectral/Panel/RoomListPanel.qml b/imports/NeoChat/Panel/RoomListPanel.qml similarity index 98% rename from imports/Spectral/Panel/RoomListPanel.qml rename to imports/NeoChat/Panel/RoomListPanel.qml index 6ea76bcb9..02325739a 100644 --- a/imports/Spectral/Panel/RoomListPanel.qml +++ b/imports/NeoChat/Panel/RoomListPanel.qml @@ -5,8 +5,8 @@ import QtQuick.Layouts 1.12 import org.kde.kirigami 2.13 as Kirigami import org.kde.kitemmodels 1.0 -import Spectral.Component 2.0 -import Spectral 0.1 +import NeoChat.Component 2.0 +import org.kde.neochat 0.1 Kirigami.ScrollablePage { id: page diff --git a/imports/Spectral/Panel/qmldir b/imports/NeoChat/Panel/qmldir similarity index 60% rename from imports/Spectral/Panel/qmldir rename to imports/NeoChat/Panel/qmldir index b405d340d..fbe7adac8 100644 --- a/imports/Spectral/Panel/qmldir +++ b/imports/NeoChat/Panel/qmldir @@ -1,5 +1,5 @@ -module Spectral.Panel +module NeoChat.Panel RoomPanel 2.0 RoomPanel.qml RoomListPanel 2.0 RoomListPanel.qml RoomDrawer 2.0 RoomDrawer.qml -SpectralSidebar 2.0 SpectralSidebar.qml +NeoChatSidebar 2.0 NeoChatSidebar.qml diff --git a/imports/Spectral/Setting/Palette.qml b/imports/NeoChat/Setting/Palette.qml similarity index 100% rename from imports/Spectral/Setting/Palette.qml rename to imports/NeoChat/Setting/Palette.qml diff --git a/imports/Spectral/Setting/Setting.qml b/imports/NeoChat/Setting/Setting.qml similarity index 100% rename from imports/Spectral/Setting/Setting.qml rename to imports/NeoChat/Setting/Setting.qml diff --git a/imports/Spectral/Setting/qmldir b/imports/NeoChat/Setting/qmldir similarity index 74% rename from imports/Spectral/Setting/qmldir rename to imports/NeoChat/Setting/qmldir index 2c923cd47..d20825b59 100644 --- a/imports/Spectral/Setting/qmldir +++ b/imports/NeoChat/Setting/qmldir @@ -1,3 +1,3 @@ -module Spectral.Setting +module NeoChat.Setting singleton MSettings 0.1 Setting.qml singleton MPalette 0.1 Palette.qml diff --git a/qml/main.qml b/qml/main.qml index 216f9e84d..81f414dad 100644 --- a/qml/main.qml +++ b/qml/main.qml @@ -10,9 +10,10 @@ import QtQuick.Layouts 1.14 import org.kde.kirigami 2.12 as Kirigami -import Spectral 0.1 -import Spectral.Component 2.0 -import Spectral.Panel 2.0 +import org.kde.neochat 0.1 +import NeoChat.Component 2.0 +import NeoChat.Panel 2.0 +import NeoChat.Page 2.0 Kirigami.ApplicationWindow { id: root diff --git a/res.qrc b/res.qrc index a985eac07..295f6770c 100644 --- a/res.qrc +++ b/res.qrc @@ -1,62 +1,62 @@ - qml/main.qml - qml/LoginPage.qml - qml/LoadingPage.qml - qml/RoomListPage.qml - qml/RoomPage.qml - qml/ChatTextInput.qml - qml/RoomListContextMenu.qml - qml/AccountsPage.qml - imports/Spectral/Component/Emoji/EmojiPicker.qml - imports/Spectral/Component/Emoji/qmldir - imports/Spectral/Component/Timeline/MessageDelegate.qml - imports/Spectral/Component/Timeline/qmldir - imports/Spectral/Component/Timeline/StateDelegate.qml - imports/Spectral/Component/AutoMouseArea.qml - imports/Spectral/Component/qmldir - imports/Spectral/Effect/ElevationEffect.qml - imports/Spectral/Effect/qmldir - assets/img/icon.png - imports/Spectral/Setting/Setting.qml - imports/Spectral/Setting/qmldir - imports/Spectral/Panel/qmldir - imports/Spectral/Panel/RoomDrawer.qml - imports/Spectral/Panel/RoomHeader.qml - imports/Spectral/Panel/SpectralSidebar.qml - imports/Spectral/Component/ScrollHelper.qml - imports/Spectral/Component/AutoListView.qml - imports/Spectral/Component/AutoTextField.qml - imports/Spectral/Component/Timeline/SectionDelegate.qml assets/img/matrix.svg - imports/Spectral/Effect/RippleEffect.qml - imports/Spectral/Effect/CircleMask.qml - imports/Spectral/Component/Timeline/ImageDelegate.qml - imports/Spectral/Setting/Palette.qml - imports/Spectral/Component/Timeline/FileDelegate.qml - imports/Spectral/Component/FullScreenImage.qml - imports/Spectral/Dialog/qmldir - imports/Spectral/Dialog/RoomSettingsDialog.qml - imports/Spectral/Dialog/UserDetailDialog.qml - imports/Spectral/Dialog/MessageSourceDialog.qml - imports/Spectral/Dialog/CreateRoomDialog.qml - imports/Spectral/Dialog/JoinRoomDialog.qml - imports/Spectral/Dialog/InviteUserDialog.qml - imports/Spectral/Dialog/AcceptInvitationDialog.qml - imports/Spectral/Menu/qmldir - imports/Spectral/Menu/Timeline/qmldir - imports/Spectral/Menu/Timeline/MessageDelegateContextMenu.qml - imports/Spectral/Menu/Timeline/FileDelegateContextMenu.qml - imports/Spectral/Dialog/FontFamilyDialog.qml - imports/Spectral/Dialog/AccountDetailDialog.qml - imports/Spectral/Dialog/OpenFileDialog.qml - imports/Spectral/Dialog/OpenFolderDialog.qml - imports/Spectral/Component/Timeline/VideoDelegate.qml - imports/Spectral/Component/AutoRectangle.qml - imports/Spectral/Component/Timeline/ReactionDelegate.qml - imports/Spectral/Component/Timeline/AudioDelegate.qml - imports/Spectral/Dialog/StartChatDialog.qml - imports/Spectral/Component/Timeline/TextDelegate.qml - imports/Spectral/Component/Timeline/TimelineContainer.qml + assets/img/icon.png + qml/main.qml + imports/NeoChat/Page/qmldir + imports/NeoChat/Page/LoginPage.qml + imports/NeoChat/Page/LoadingPage.qml + imports/NeoChat/Page/RoomListPage.qml + imports/NeoChat/Page/RoomPage.qml + imports/NeoChat/Component/qmldir + imports/NeoChat/Component/ChatTextInput.qml + imports/NeoChat/Component/AutoMouseArea.qml + imports/NeoChat/Component/ScrollHelper.qml + imports/NeoChat/Component/AutoListView.qml + imports/NeoChat/Component/AutoTextField.qml + imports/NeoChat/Component/AutoRectangle.qml + imports/NeoChat/Component/FullScreenImage.qml + imports/NeoChat/Component/Emoji/EmojiPicker.qml + imports/NeoChat/Component/Emoji/qmldir + imports/NeoChat/Component/Timeline/MessageDelegate.qml + imports/NeoChat/Component/Timeline/qmldir + imports/NeoChat/Component/Timeline/StateDelegate.qml + imports/NeoChat/Component/Timeline/TextDelegate.qml + imports/NeoChat/Component/Timeline/TimelineContainer.qml + imports/NeoChat/Component/Timeline/SectionDelegate.qml + imports/NeoChat/Component/Timeline/VideoDelegate.qml + imports/NeoChat/Component/Timeline/ReactionDelegate.qml + imports/NeoChat/Component/Timeline/AudioDelegate.qml + imports/NeoChat/Component/Timeline/FileDelegate.qml + imports/NeoChat/Component/Timeline/ImageDelegate.qml + imports/NeoChat/Setting/Setting.qml + imports/NeoChat/Setting/qmldir + imports/NeoChat/Setting/Palette.qml + imports/NeoChat/Panel/qmldir + imports/NeoChat/Panel/RoomDrawer.qml + imports/NeoChat/Panel/RoomHeader.qml + imports/NeoChat/Panel/NeoChatSidebar.qml + imports/NeoChat/Effect/RippleEffect.qml + imports/NeoChat/Effect/CircleMask.qml + imports/NeoChat/Effect/ElevationEffect.qml + imports/NeoChat/Effect/qmldir + imports/NeoChat/Dialog/qmldir + imports/NeoChat/Dialog/RoomSettingsDialog.qml + imports/NeoChat/Dialog/UserDetailDialog.qml + imports/NeoChat/Dialog/MessageSourceDialog.qml + imports/NeoChat/Dialog/CreateRoomDialog.qml + imports/NeoChat/Dialog/JoinRoomDialog.qml + imports/NeoChat/Dialog/InviteUserDialog.qml + imports/NeoChat/Dialog/AcceptInvitationDialog.qml + imports/NeoChat/Dialog/StartChatDialog.qml + imports/NeoChat/Dialog/FontFamilyDialog.qml + imports/NeoChat/Dialog/AccountDetailDialog.qml + imports/NeoChat/Dialog/OpenFileDialog.qml + imports/NeoChat/Dialog/OpenFolderDialog.qml + imports/NeoChat/Menu/qmldir + imports/NeoChat/Menu/Timeline/qmldir + imports/NeoChat/Menu/Timeline/MessageDelegateContextMenu.qml + imports/NeoChat/Menu/Timeline/FileDelegateContextMenu.qml + imports/NeoChat/Menu/RoomListContextMenu.qml diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 093bd41e4..b30b7bdae 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -6,8 +6,8 @@ add_executable(neochat matriximageprovider.cpp messageeventmodel.cpp roomlistmodel.cpp - spectralroom.cpp - spectraluser.cpp + neochatroom.cpp + neochatuser.cpp trayicon.cpp userlistmodel.cpp publicroomlistmodel.cpp diff --git a/src/controller.cpp b/src/controller.cpp index 4d22f6e50..850f723d8 100644 --- a/src/controller.cpp +++ b/src/controller.cpp @@ -38,8 +38,8 @@ #include "events/eventcontent.h" #include "events/roommessageevent.h" #include "settings.h" -#include "spectralroom.h" -#include "spectraluser.h" +#include "neochatroom.h" +#include "neochatuser.h" #include "utils.h" Controller::Controller(QObject *parent) @@ -47,8 +47,8 @@ Controller::Controller(QObject *parent) { QApplication::setQuitOnLastWindowClosed(false); - Connection::setRoomType(); - Connection::setUserType(); + Connection::setRoomType(); + Connection::setUserType(); connect(&m_ncm, &QNetworkConfigurationManager::onlineStateChanged, this, &Controller::isOnlineChanged); @@ -83,7 +83,7 @@ void Controller::loginWithCredentials(QString serverAddr, QString user, QString } if (deviceName.isEmpty()) { - deviceName = "Spectral " + QSysInfo::machineHostName() + " " + QSysInfo::productType() + " " + QSysInfo::productVersion() + " " + QSysInfo::currentCpuArchitecture(); + deviceName = "NeoChat " + QSysInfo::machineHostName() + " " + QSysInfo::productType() + " " + QSysInfo::productVersion() + " " + QSysInfo::currentCpuArchitecture(); } QUrl serverUrl(serverAddr); diff --git a/src/main.cpp b/src/main.cpp index 02d4d74d6..079132d7b 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -31,8 +31,8 @@ #include "room.h" #include "roomlistmodel.h" #include "sortfilterroomlistmodel.h" -#include "spectralroom.h" -#include "spectraluser.h" +#include "neochatroom.h" +#include "neochatuser.h" #include "trayicon.h" #include "userdirectorylistmodel.h" #include "userlistmodel.h" @@ -60,21 +60,21 @@ int main(int argc, char *argv[]) Clipboard clipboard; - qmlRegisterSingletonInstance("Spectral", 0, 1, "Controller", &Controller::instance()); + qmlRegisterSingletonInstance("org.kde.neochat", 0, 1, "Controller", &Controller::instance()); qmlRegisterSingletonInstance("org.kde.neochat", 1, 0, "Clipboard", &clipboard); - qmlRegisterType("Spectral", 0, 1, "AccountListModel"); - qmlRegisterType("Spectral", 0, 1, "RoomListModel"); - qmlRegisterType("Spectral", 0, 1, "UserListModel"); - qmlRegisterType("Spectral", 0, 1, "MessageEventModel"); - qmlRegisterType("Spectral", 0, 1, "PublicRoomListModel"); - qmlRegisterType("Spectral", 0, 1, "UserDirectoryListModel"); - qmlRegisterType("Spectral", 0, 1, "EmojiModel"); - qmlRegisterType("Spectral", 0, 1, "NotificationsManager"); - qmlRegisterType("Spectral", 0, 1, "TrayIcon"); - qmlRegisterType("org.kde.neochat", 1, 0, "SortFilterRoomListModel"); - qmlRegisterUncreatableType("Spectral", 0, 1, "RoomMessageEvent", "ENUM"); - qmlRegisterUncreatableType("Spectral", 0, 1, "RoomType", "ENUM"); - qmlRegisterUncreatableType("Spectral", 0, 1, "UserType", "ENUM"); + qmlRegisterType("org.kde.neochat", 0, 1, "AccountListModel"); + qmlRegisterType("org.kde.neochat", 0, 1, "RoomListModel"); + qmlRegisterType("org.kde.neochat", 0, 1, "UserListModel"); + qmlRegisterType("org.kde.neochat", 0, 1, "MessageEventModel"); + qmlRegisterType("org.kde.neochat", 0, 1, "PublicRoomListModel"); + qmlRegisterType("org.kde.neochat", 0, 1, "UserDirectoryListModel"); + qmlRegisterType("org.kde.neochat", 0, 1, "EmojiModel"); + qmlRegisterType("org.kde.neochat", 0, 1, "NotificationsManager"); + qmlRegisterType("org.kde.neochat", 0, 1, "TrayIcon"); + qmlRegisterType("org.kde.neochat", 0, 1, "SortFilterRoomListModel"); + qmlRegisterUncreatableType("org.kde.neochat", 0, 1, "RoomMessageEvent", "ENUM"); + qmlRegisterUncreatableType("org.kde.neochat", 0, 1, "RoomType", "ENUM"); + qmlRegisterUncreatableType("org.kde.neochat", 0, 1, "UserType", "ENUM"); qRegisterMetaType("User*"); qRegisterMetaType("const User*"); @@ -82,8 +82,8 @@ int main(int argc, char *argv[]) qRegisterMetaType("Room*"); qRegisterMetaType("Connection*"); qRegisterMetaType("MessageEventType"); - qRegisterMetaType("SpectralRoom*"); - qRegisterMetaType("SpectralUser*"); + qRegisterMetaType("NeoChatRoom*"); + qRegisterMetaType("NeoChatUser*"); qRegisterMetaType("GetRoomEventsJob*"); qRegisterMetaTypeStreamOperators(); diff --git a/src/messageeventmodel.cpp b/src/messageeventmodel.cpp index fe72fb898..a86d97225 100644 --- a/src/messageeventmodel.cpp +++ b/src/messageeventmodel.cpp @@ -44,16 +44,16 @@ MessageEventModel::MessageEventModel(QObject *parent) , m_currentRoom(nullptr) { using namespace Quotient; - qmlRegisterAnonymousType("Spectral", 1); + qmlRegisterAnonymousType("NeoChat", 1); qRegisterMetaType(); - qmlRegisterUncreatableType("Spectral", 0, 1, "EventStatus", "EventStatus is not an creatable type"); + qmlRegisterUncreatableType("NeoChat", 0, 1, "EventStatus", "EventStatus is not an creatable type"); } MessageEventModel::~MessageEventModel() { } -void MessageEventModel::setRoom(SpectralRoom *room) +void MessageEventModel::setRoom(NeoChatRoom *room) { if (room == m_currentRoom) return; @@ -253,7 +253,7 @@ int MessageEventModel::rowCount(const QModelIndex &parent) const return m_currentRoom->timelineSize(); } -inline QVariantMap userAtEvent(SpectralUser *user, SpectralRoom *room, const RoomEvent &evt) +inline QVariantMap userAtEvent(NeoChatUser *user, NeoChatRoom *room, const RoomEvent &evt) { Q_UNUSED(evt) return QVariantMap { @@ -323,7 +323,7 @@ QVariant MessageEventModel::data(const QModelIndex &idx, int role) const return EventTypeRegistry::getMatrixType(evt.type()); if (role == AuthorRole) { - auto author = static_cast(isPending ? m_currentRoom->localUser() : m_currentRoom->user(evt.senderId())); + auto author = static_cast(isPending ? m_currentRoom->localUser() : m_currentRoom->user(evt.senderId())); return userAtEvent(author, m_currentRoom, evt); } @@ -423,7 +423,7 @@ QVariant MessageEventModel::data(const QModelIndex &idx, int role) const return {}; const auto &replyEvt = **replyIt; - return QVariantMap {{"eventId", replyEventId}, {"display", m_currentRoom->eventToString(replyEvt, Qt::RichText)}, {"author", userAtEvent(static_cast(m_currentRoom->user(replyEvt.senderId())), m_currentRoom, evt)}}; + return QVariantMap {{"eventId", replyEventId}, {"display", m_currentRoom->eventToString(replyEvt, Qt::RichText)}, {"author", userAtEvent(static_cast(m_currentRoom->user(replyEvt.senderId())), m_currentRoom, evt)}}; } if (role == ShowAuthorRole) { @@ -452,12 +452,12 @@ QVariant MessageEventModel::data(const QModelIndex &idx, int role) const const auto &annotations = m_currentRoom->relatedEvents(evt, EventRelation::Annotation()); if (annotations.isEmpty()) return {}; - QMap> reactions = {}; + QMap> reactions = {}; for (const auto &a : annotations) { if (a->isRedacted()) // Just in case? continue; if (auto e = eventCast(a)) - reactions[e->relation().key].append(static_cast(m_currentRoom->user(e->senderId()))); + reactions[e->relation().key].append(static_cast(m_currentRoom->user(e->senderId()))); } if (reactions.isEmpty()) { @@ -471,7 +471,7 @@ QVariant MessageEventModel::data(const QModelIndex &idx, int role) const for (auto author : i.value()) { authors.append(userAtEvent(author, m_currentRoom, evt)); } - bool hasLocalUser = i.value().contains(static_cast(m_currentRoom->localUser())); + bool hasLocalUser = i.value().contains(static_cast(m_currentRoom->localUser())); res.append(QVariantMap {{"reaction", i.key()}, {"count", i.value().count()}, {"authors", authors}, {"hasLocalUser", hasLocalUser}}); ++i; } diff --git a/src/messageeventmodel.h b/src/messageeventmodel.h index c78965e96..950f13455 100644 --- a/src/messageeventmodel.h +++ b/src/messageeventmodel.h @@ -4,12 +4,12 @@ #include #include "room.h" -#include "spectralroom.h" +#include "neochatroom.h" class MessageEventModel : public QAbstractListModel { Q_OBJECT - Q_PROPERTY(SpectralRoom *room READ room WRITE setRoom NOTIFY roomChanged) + Q_PROPERTY(NeoChatRoom *room READ room WRITE setRoom NOTIFY roomChanged) public: enum EventRoles { @@ -50,11 +50,11 @@ public: explicit MessageEventModel(QObject *parent = nullptr); ~MessageEventModel() override; - SpectralRoom *room() const + NeoChatRoom *room() const { return m_currentRoom; } - void setRoom(SpectralRoom *room); + void setRoom(NeoChatRoom *room); int rowCount(const QModelIndex &parent = QModelIndex()) const override; QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override; @@ -67,7 +67,7 @@ private Q_SLOTS: void refreshRow(int row); private: - SpectralRoom *m_currentRoom = nullptr; + NeoChatRoom *m_currentRoom = nullptr; QString lastReadEventId; int rowBelowInserted = -1; bool movingEvent = 0; diff --git a/src/spectralroom.cpp b/src/neochatroom.cpp similarity index 88% rename from src/spectralroom.cpp rename to src/neochatroom.cpp index c5d40b664..357706168 100644 --- a/src/spectralroom.cpp +++ b/src/neochatroom.cpp @@ -1,4 +1,4 @@ -#include "spectralroom.h" +#include "neochatroom.h" #include @@ -27,18 +27,18 @@ #include "user.h" #include "utils.h" -SpectralRoom::SpectralRoom(Connection *connection, QString roomId, JoinState joinState) +NeoChatRoom::NeoChatRoom(Connection *connection, QString roomId, JoinState joinState) : Room(connection, std::move(roomId), joinState) { - connect(this, &SpectralRoom::notificationCountChanged, this, &SpectralRoom::countChanged); - connect(this, &SpectralRoom::highlightCountChanged, this, &SpectralRoom::countChanged); + connect(this, &NeoChatRoom::notificationCountChanged, this, &NeoChatRoom::countChanged); + connect(this, &NeoChatRoom::highlightCountChanged, this, &NeoChatRoom::countChanged); connect(this, &Room::fileTransferCompleted, this, [=] { setFileUploadingProgress(0); setHasFileUploading(false); }); } -void SpectralRoom::uploadFile(const QUrl &url, const QString &body) +void NeoChatRoom::uploadFile(const QUrl &url, const QString &body) { if (url.isEmpty()) return; @@ -65,17 +65,17 @@ void SpectralRoom::uploadFile(const QUrl &url, const QString &body) }); } -void SpectralRoom::acceptInvitation() +void NeoChatRoom::acceptInvitation() { connection()->joinRoom(id()); } -void SpectralRoom::forget() +void NeoChatRoom::forget() { connection()->forgetRoom(id()); } -QVariantList SpectralRoom::getUsersTyping() const +QVariantList NeoChatRoom::getUsersTyping() const { auto users = usersTyping(); users.removeAll(localUser()); @@ -86,12 +86,12 @@ QVariantList SpectralRoom::getUsersTyping() const return userVariants; } -void SpectralRoom::sendTypingNotification(bool isTyping) +void NeoChatRoom::sendTypingNotification(bool isTyping) { connection()->callApi(BackgroundRequest, localUser()->id(), id(), isTyping, 10000); } -QString SpectralRoom::lastEvent() const +QString NeoChatRoom::lastEvent() const { for (auto i = messageEvents().rbegin(); i < messageEvents().rend(); i++) { const RoomEvent *evt = i->get(); @@ -118,12 +118,12 @@ QString SpectralRoom::lastEvent() const return ""; } -bool SpectralRoom::isEventHighlighted(const RoomEvent *e) const +bool NeoChatRoom::isEventHighlighted(const RoomEvent *e) const { return highlights.contains(e); } -void SpectralRoom::checkForHighlights(const Quotient::TimelineItem &ti) +void NeoChatRoom::checkForHighlights(const Quotient::TimelineItem &ti) { auto localUserId = localUser()->id(); if (ti->senderId() == localUserId) @@ -135,21 +135,21 @@ void SpectralRoom::checkForHighlights(const Quotient::TimelineItem &ti) } } -void SpectralRoom::onAddNewTimelineEvents(timeline_iter_t from) +void NeoChatRoom::onAddNewTimelineEvents(timeline_iter_t from) { std::for_each(from, messageEvents().cend(), [this](const TimelineItem &ti) { checkForHighlights(ti); }); } -void SpectralRoom::onAddHistoricalTimelineEvents(rev_iter_t from) +void NeoChatRoom::onAddHistoricalTimelineEvents(rev_iter_t from) { std::for_each(from, messageEvents().crend(), [this](const TimelineItem &ti) { checkForHighlights(ti); }); } -void SpectralRoom::onRedaction(const RoomEvent &prevEvent, const RoomEvent & /*after*/) +void NeoChatRoom::onRedaction(const RoomEvent &prevEvent, const RoomEvent & /*after*/) { if (const auto &e = eventCast(&prevEvent)) { if (auto relatedEventId = e->relation().eventId; !relatedEventId.isEmpty()) { @@ -158,7 +158,7 @@ void SpectralRoom::onRedaction(const RoomEvent &prevEvent, const RoomEvent & /*a } } -void SpectralRoom::countChanged() +void NeoChatRoom::countChanged() { if (displayed() && !hasUnreadMessages()) { resetNotificationCount(); @@ -166,24 +166,24 @@ void SpectralRoom::countChanged() } } -QDateTime SpectralRoom::lastActiveTime() const +QDateTime NeoChatRoom::lastActiveTime() const { if (timelineSize() == 0) return QDateTime(); return messageEvents().rbegin()->get()->originTimestamp(); } -int SpectralRoom::savedTopVisibleIndex() const +int NeoChatRoom::savedTopVisibleIndex() const { return firstDisplayedMarker() == timelineEdge() ? 0 : int(firstDisplayedMarker() - messageEvents().rbegin()); } -int SpectralRoom::savedBottomVisibleIndex() const +int NeoChatRoom::savedBottomVisibleIndex() const { return lastDisplayedMarker() == timelineEdge() ? 0 : int(lastDisplayedMarker() - messageEvents().rbegin()); } -void SpectralRoom::saveViewport(int topIndex, int bottomIndex) +void NeoChatRoom::saveViewport(int topIndex, int bottomIndex) { if (topIndex == -1 || bottomIndex == -1 || (bottomIndex == savedBottomVisibleIndex() && (bottomIndex == 0 || topIndex == savedTopVisibleIndex()))) return; @@ -196,7 +196,7 @@ void SpectralRoom::saveViewport(int topIndex, int bottomIndex) setLastDisplayedEvent(maxTimelineIndex() - bottomIndex); } -QVariantList SpectralRoom::getUsers(const QString &keyword) const +QVariantList NeoChatRoom::getUsers(const QString &keyword) const { const auto userList = users(); QVariantList matchedList; @@ -208,12 +208,12 @@ QVariantList SpectralRoom::getUsers(const QString &keyword) const return matchedList; } -QUrl SpectralRoom::urlToMxcUrl(QUrl mxcUrl) +QUrl NeoChatRoom::urlToMxcUrl(QUrl mxcUrl) { return DownloadFileJob::makeRequestUrl(connection()->homeserver(), mxcUrl); } -QString SpectralRoom::avatarMediaId() const +QString NeoChatRoom::avatarMediaId() const { if (const auto avatar = Room::avatarMediaId(); !avatar.isEmpty()) { return avatar; @@ -230,7 +230,7 @@ QString SpectralRoom::avatarMediaId() const return {}; } -QString SpectralRoom::eventToString(const RoomEvent &evt, Qt::TextFormat format, bool removeReply) const +QString NeoChatRoom::eventToString(const RoomEvent &evt, Qt::TextFormat format, bool removeReply) const { const bool prettyPrint = (format == Qt::RichText); @@ -358,7 +358,7 @@ QString SpectralRoom::eventToString(const RoomEvent &evt, Qt::TextFormat format, tr("Unknown event")); } -void SpectralRoom::changeAvatar(QUrl localFile) +void NeoChatRoom::changeAvatar(QUrl localFile) { const auto job = connection()->uploadFile(localFile.toLocalFile()); if (isJobRunning(job)) { @@ -368,7 +368,7 @@ void SpectralRoom::changeAvatar(QUrl localFile) } } -void SpectralRoom::addLocalAlias(const QString &alias) +void NeoChatRoom::addLocalAlias(const QString &alias) { auto a = aliases(); if (a.contains(alias)) @@ -379,7 +379,7 @@ void SpectralRoom::addLocalAlias(const QString &alias) setLocalAliases(a); } -void SpectralRoom::removeLocalAlias(const QString &alias) +void NeoChatRoom::removeLocalAlias(const QString &alias) { auto a = aliases(); if (!a.contains(alias)) @@ -390,7 +390,7 @@ void SpectralRoom::removeLocalAlias(const QString &alias) setLocalAliases(a); } -QString SpectralRoom::markdownToHTML(const QString &markdown) +QString NeoChatRoom::markdownToHTML(const QString &markdown) { const auto str = markdown.toUtf8(); char *tmp_buf = cmark_markdown_to_html(str.constData(), str.size(), CMARK_OPT_DEFAULT); @@ -407,7 +407,7 @@ QString SpectralRoom::markdownToHTML(const QString &markdown) return result; } -void SpectralRoom::postArbitaryMessage(const QString &text, MessageEventType type, const QString &replyEventId) +void NeoChatRoom::postArbitaryMessage(const QString &text, MessageEventType type, const QString &replyEventId) { const auto parsedHTML = markdownToHTML(text); const bool isRichText = Qt::mightBeRichText(parsedHTML); @@ -443,7 +443,7 @@ QString msgTypeToString(MessageEventType msgType) } } -void SpectralRoom::postPlainMessage(const QString &text, MessageEventType type, const QString &replyEventId) +void NeoChatRoom::postPlainMessage(const QString &text, MessageEventType type, const QString &replyEventId) { bool isReply = !replyEventId.isEmpty(); const auto replyIt = findInTimeline(replyEventId); @@ -487,7 +487,7 @@ void SpectralRoom::postPlainMessage(const QString &text, MessageEventType type, Room::postMessage(text, type); } -void SpectralRoom::postHtmlMessage(const QString &text, const QString &html, MessageEventType type, const QString &replyEventId) +void NeoChatRoom::postHtmlMessage(const QString &text, const QString &html, MessageEventType type, const QString &replyEventId) { bool isReply = !replyEventId.isEmpty(); const auto replyIt = findInTimeline(replyEventId); @@ -531,7 +531,7 @@ void SpectralRoom::postHtmlMessage(const QString &text, const QString &html, Mes Room::postHtmlMessage(text, html, type); } -void SpectralRoom::toggleReaction(const QString &eventId, const QString &reaction) +void NeoChatRoom::toggleReaction(const QString &eventId, const QString &reaction) { if (eventId.isEmpty() || reaction.isEmpty()) return; @@ -568,7 +568,7 @@ void SpectralRoom::toggleReaction(const QString &eventId, const QString &reactio } } -bool SpectralRoom::containsUser(QString userID) const +bool NeoChatRoom::containsUser(QString userID) const { auto u = Room::user(userID); @@ -578,7 +578,7 @@ bool SpectralRoom::containsUser(QString userID) const return Room::memberJoinState(u) != JoinState::Leave; } -bool SpectralRoom::canSendEvent(const QString &eventType) const +bool NeoChatRoom::canSendEvent(const QString &eventType) const { auto plEvent = getCurrentState(); auto pl = plEvent->powerLevelForEvent(eventType); @@ -587,7 +587,7 @@ bool SpectralRoom::canSendEvent(const QString &eventType) const return currentPl >= pl; } -bool SpectralRoom::canSendState(const QString &eventType) const +bool NeoChatRoom::canSendState(const QString &eventType) const { auto plEvent = getCurrentState(); auto pl = plEvent->powerLevelForState(eventType); diff --git a/src/spectralroom.h b/src/neochatroom.h similarity index 94% rename from src/spectralroom.h rename to src/neochatroom.h index 3862dea2c..abe308319 100644 --- a/src/spectralroom.h +++ b/src/neochatroom.h @@ -1,5 +1,4 @@ -#ifndef SpectralRoom_H -#define SpectralRoom_H +#pragma once #include #include @@ -14,11 +13,11 @@ #include #include "room.h" -#include "spectraluser.h" +#include "neochatuser.h" using namespace Quotient; -class SpectralRoom : public Room +class NeoChatRoom : public Room { Q_OBJECT Q_PROPERTY(QVariantList usersTyping READ getUsersTyping NOTIFY typingChanged) @@ -28,7 +27,7 @@ class SpectralRoom : public Room Q_PROPERTY(QString avatarMediaId READ avatarMediaId NOTIFY avatarChanged STORED false) public: - explicit SpectralRoom(Connection *connection, QString roomId, JoinState joinState = {}); + explicit NeoChatRoom(Connection *connection, QString roomId, JoinState joinState = {}); QVariantList getUsersTyping() const; @@ -118,5 +117,3 @@ public Q_SLOTS: void removeLocalAlias(const QString &alias); void toggleReaction(const QString &eventId, const QString &reaction); }; - -#endif // SpectralRoom_H diff --git a/src/spectraluser.cpp b/src/neochatuser.cpp similarity index 83% rename from src/spectraluser.cpp rename to src/neochatuser.cpp index efa89631f..8324f1fab 100644 --- a/src/spectraluser.cpp +++ b/src/neochatuser.cpp @@ -1,13 +1,13 @@ -#include "spectraluser.h" +#include "neochatuser.h" #include "csapi/profile.h" -QColor SpectralUser::color() +QColor NeoChatUser::color() { return QColor::fromHslF(hueF(), 0.7, 0.5, 1); } //TODO libQuotient 0.7: remove default name -void SpectralUser::setDefaultName(QString defaultName) +void NeoChatUser::setDefaultName(QString defaultName) { rename(defaultName); connect(this, &Quotient::User::defaultNameChanged, this, [this]() { @@ -17,7 +17,7 @@ void SpectralUser::setDefaultName(QString defaultName) }); } -QString SpectralUser::defaultName() +QString NeoChatUser::defaultName() { if(m_defaultName.isEmpty()) { GetDisplayNameJob *job = connection()->callApi(id()); diff --git a/src/spectraluser.h b/src/neochatuser.h similarity index 75% rename from src/spectraluser.h rename to src/neochatuser.h index 635b06e2b..b959e2cd8 100644 --- a/src/spectraluser.h +++ b/src/neochatuser.h @@ -1,5 +1,4 @@ -#ifndef SpectralUser_H -#define SpectralUser_H +#pragma once #include @@ -8,13 +7,13 @@ using namespace Quotient; -class SpectralUser : public User +class NeoChatUser : public User { Q_OBJECT Q_PROPERTY(QColor color READ color CONSTANT) Q_PROPERTY(QString defaultName READ defaultName WRITE setDefaultName NOTIFY nameChanged) public: - SpectralUser(QString userId, Connection *connection) + NeoChatUser(QString userId, Connection *connection) : User(userId, connection) { } @@ -31,5 +30,3 @@ Q_SIGNALS: private: QString m_defaultName; }; - -#endif // SpectralUser_H diff --git a/src/roomlistmodel.cpp b/src/roomlistmodel.cpp index b3ecd55af..96ef969ab 100644 --- a/src/roomlistmodel.cpp +++ b/src/roomlistmodel.cpp @@ -38,7 +38,7 @@ void RoomListModel::setConnection(Connection *connection) m_connection = connection; - for (SpectralRoom *room : qAsConst(m_rooms)) { + for (NeoChatRoom *room : qAsConst(m_rooms)) { room->disconnect(this); } @@ -52,7 +52,7 @@ void RoomListModel::setConnection(Connection *connection) for (const QString &roomID : values) { auto room = connection->room(roomID); if (room) - refresh(static_cast(room)); + refresh(static_cast(room)); } }); @@ -72,14 +72,14 @@ void RoomListModel::doResetModel() refreshNotificationCount(); } -SpectralRoom *RoomListModel::roomAt(int row) const +NeoChatRoom *RoomListModel::roomAt(int row) const { return m_rooms.at(row); } void RoomListModel::doAddRoom(Room *r) { - if (auto room = static_cast(r)) { + if (auto room = static_cast(r)) { m_rooms.append(room); connectRoomSignals(room); Q_EMIT roomAdded(room); @@ -89,7 +89,7 @@ void RoomListModel::doAddRoom(Room *r) } } -void RoomListModel::connectRoomSignals(SpectralRoom *room) +void RoomListModel::connectRoomSignals(NeoChatRoom *room) { connect(room, &Room::displaynameChanged, this, [=] { refresh(room); @@ -159,7 +159,7 @@ void RoomListModel::updateRoom(Room *room, Room *prev) // the previously left room (in both cases prev has the previous state). if (prev == room) { qCritical() << "RoomListModel::updateRoom: room tried to replace itself"; - refresh(static_cast(room)); + refresh(static_cast(room)); return; } if (prev && room->id() != prev->id()) { @@ -167,8 +167,8 @@ void RoomListModel::updateRoom(Room *room, Room *prev) // That doesn't look right but technically we still can do it. } // Ok, we're through with pre-checks, now for the real thing. - auto newRoom = static_cast(room); - const auto it = std::find_if(m_rooms.begin(), m_rooms.end(), [=](const SpectralRoom *r) { + auto newRoom = static_cast(room); + const auto it = std::find_if(m_rooms.begin(), m_rooms.end(), [=](const NeoChatRoom *r) { return r == prev || r == newRoom; }); if (it != m_rooms.end()) { @@ -216,7 +216,7 @@ QVariant RoomListModel::data(const QModelIndex &index, int role) const qDebug() << "UserListModel: something wrong here..."; return QVariant(); } - SpectralRoom *room = m_rooms.at(index.row()); + NeoChatRoom *room = m_rooms.at(index.row()); if (role == NameRole) return room->displayName(); if (role == AvatarRole) @@ -256,7 +256,7 @@ QVariant RoomListModel::data(const QModelIndex &index, int role) const return QVariant(); } -void RoomListModel::refresh(SpectralRoom *room, const QVector &roles) +void RoomListModel::refresh(NeoChatRoom *room, const QVector &roles) { const auto it = std::find(m_rooms.begin(), m_rooms.end(), room); if (it == m_rooms.end()) { diff --git a/src/roomlistmodel.h b/src/roomlistmodel.h index b1fbcb11e..2b050a708 100644 --- a/src/roomlistmodel.h +++ b/src/roomlistmodel.h @@ -4,7 +4,7 @@ #include "connection.h" #include "events/roomevent.h" #include "room.h" -#include "spectralroom.h" +#include "neochatroom.h" #include @@ -58,7 +58,7 @@ public: void setConnection(Connection *connection); void doResetModel(); - Q_INVOKABLE SpectralRoom *roomAt(int row) const; + Q_INVOKABLE NeoChatRoom *roomAt(int row) const; QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override; Q_INVOKABLE int rowCount(const QModelIndex &parent = QModelIndex()) const override; @@ -78,24 +78,24 @@ private Q_SLOTS: void doAddRoom(Quotient::Room *room); void updateRoom(Quotient::Room *room, Quotient::Room *prev); void deleteRoom(Quotient::Room *room); - void refresh(SpectralRoom *room, const QVector &roles = {}); + void refresh(NeoChatRoom *room, const QVector &roles = {}); void refreshNotificationCount(); private: Connection *m_connection = nullptr; - QList m_rooms; + QList m_rooms; QMap m_categoryVisibility; int m_notificationCount = 0; - void connectRoomSignals(SpectralRoom *room); + void connectRoomSignals(NeoChatRoom *room); Q_SIGNALS: void connectionChanged(); void notificationCountChanged(); - void roomAdded(SpectralRoom *room); + void roomAdded(NeoChatRoom *room); void newMessage(const QString &roomId, const QString &eventId, const QString &roomName, const QString &senderName, const QString &text, const QImage &icon); void newHighlight(const QString &roomId, const QString &eventId, const QString &roomName, const QString &senderName, const QString &text, const QImage &icon); }; diff --git a/src/userlistmodel.cpp b/src/userlistmodel.cpp index fa0c7e366..8d392bf53 100644 --- a/src/userlistmodel.cpp +++ b/src/userlistmodel.cpp @@ -10,7 +10,7 @@ #include #include -#include "spectraluser.h" +#include "neochatuser.h" UserListModel::UserListModel(QObject *parent) : QAbstractListModel(parent)