Add option to accept invitation

This commit is contained in:
Carl Schwan
2020-11-19 07:35:00 +00:00
parent 10935bfb15
commit b4e1c6979f
6 changed files with 81 additions and 66 deletions

View File

@@ -1,55 +0,0 @@
/**
* SPDX-FileCopyrightText: 2019 Black Hat <bhat@encom.eu.org>
*
* SPDX-License-Identifier: GPL-3.0-only
*/
import QtQuick 2.12
import QtQuick.Controls 2.12
Dialog {
property var room
anchors.centerIn: parent
width: 360
id: root
title: i18n("Invitation Received")
modal: true
contentItem: Label {
text: i18n("Accept this invitation?")
}
footer: DialogButtonBox {
Button {
text: i18n("Accept")
flat: true
onClicked: {
room.acceptInvitation()
close()
}
}
Button {
text: i18n("Reject")
flat: true
onClicked: {
room.forget()
close()
}
}
Button {
text: i18n("Cancel")
flat: true
onClicked: close()
}
}
onClosed: destroy()
}

View File

@@ -3,9 +3,7 @@ RoomSettingsDialog 1.0 RoomSettingsDialog.qml
UserDetailDialog 1.0 UserDetailDialog.qml UserDetailDialog 1.0 UserDetailDialog.qml
LoginDialog 1.0 LoginDialog.qml LoginDialog 1.0 LoginDialog.qml
CreateRoomDialog 1.0 CreateRoomDialog.qml CreateRoomDialog 1.0 CreateRoomDialog.qml
InviteUserDialog 1.0 InviteUserDialog.qml
AcceptInvitationDialog 1.0 AcceptInvitationDialog.qml AcceptInvitationDialog 1.0 AcceptInvitationDialog.qml
FontFamilyDialog 1.0 FontFamilyDialog.qml
OpenFileDialog 1.0 OpenFileDialog.qml OpenFileDialog 1.0 OpenFileDialog.qml
OpenFolderDialog 1.0 OpenFolderDialog.qml OpenFolderDialog 1.0 OpenFolderDialog.qml
ImageClipboardDialog 1.0 ImageClipboardDialog.qml ImageClipboardDialog 1.0 ImageClipboardDialog.qml

View File

@@ -0,0 +1,52 @@
/**
* SPDX-FileCopyrightText: 2019 Black Hat <bhat@encom.eu.org>
* SPDX-FileCopyrightText: 2020 Carl Schwan <carl@carlschwan.eu>
*
* SPDX-License-Identifier: GPL-3.0-only
*/
import QtQuick 2.12
import QtQuick.Controls 2.12
import org.kde.kirigami 2.14 as Kirigami
import QtQuick.Layouts 1.12
Kirigami.Page {
id: root
property var room
title: i18n("Invitation Received - %1", room.displayName)
Kirigami.PlaceholderMessage {
anchors.centerIn: parent
text: i18n("Accept this invitation?")
RowLayout {
Button {
flat: true
Layout.alignment : Qt.AlignHCenter
text: i18n("Cancel")
onClicked: roomManager.getBack();
}
Button {
Layout.alignment : Qt.AlignHCenter
text: i18n("Reject")
flat: true
onClicked: {
room.forget()
roomManager.getBack();
}
}
Button {
Layout.alignment : Qt.AlignHCenter
text: i18n("Accept")
onClicked: {
room.acceptInvitation();
roomManager.enterRoom(room);
}
}
}
}
}

View File

@@ -86,9 +86,14 @@ Kirigami.ScrollablePage {
action: Kirigami.Action { action: Kirigami.Action {
id: enterRoomAction id: enterRoomAction
onTriggered: { onTriggered: {
var roomItem = roomManager.enterRoom(currentRoom) console.log(RoomType.Invited)
roomListItem.KeyNavigation.right = roomItem if (category === RoomType.Invited) {
roomItem.focus = true; roomManager.openInvitation(currentRoom);
} else {
var roomItem = roomManager.enterRoom(currentRoom)
roomListItem.KeyNavigation.right = roomItem
roomItem.focus = true;
}
} }
} }
actions: [ actions: [
@@ -181,7 +186,7 @@ Kirigami.ScrollablePage {
if (mouse.button == Qt.RightButton) { if (mouse.button == Qt.RightButton) {
roomListContextMenu.createObject(roomLayout, {"room": currentRoom}).popup() roomListContextMenu.createObject(roomLayout, {"room": currentRoom}).popup()
} else { } else {
roomManager.enterRoom(currentRoom) enterRoomAction.trigger();
} }
} }
} }

View File

@@ -28,6 +28,7 @@ Kirigami.ApplicationWindow {
property var currentRoom: null property var currentRoom: null
property alias pageStack: root.pageStack property alias pageStack: root.pageStack
property bool invitationOpen: false
readonly property bool hasOpenRoom: currentRoom !== null readonly property bool hasOpenRoom: currentRoom !== null
@@ -44,18 +45,32 @@ Kirigami.ApplicationWindow {
} }
} }
function enterRoom(room) { function enterRoom(room) {
if (currentRoom != null) { let item = null;
if (currentRoom != null || invitationOpen) {
currentRoom = null; currentRoom = null;
pageStack.removePage(pageStack.lastItem); item = pageStack.replace(roomPage, { 'currentRoom': room, });
} else {
item = pageStack.push(roomPage, { 'currentRoom': room, });
} }
var item = pageStack.push(roomPage, { 'currentRoom': room, });
currentRoom = room; currentRoom = room;
Config.openRoom = room.id; Config.openRoom = room.id;
Config.save(); Config.save();
return item; return item;
} }
function openInvitation(room) {
if (currentRoom != null) {
currentRoom = null;
pageStack.removePage(pageStack.lastItem);
}
invitationOpen = true;
pageStack.push("qrc:/imports/NeoChat/Page/InvitationPage.qml", {"room": room});
}
function getBack() {
pageStack.replace(roomPage, { 'currentRoom': currentRoom, });
}
} }
contextDrawer: RoomDrawer { contextDrawer: RoomDrawer {

View File

@@ -12,6 +12,7 @@
<file>imports/NeoChat/Page/JoinRoomPage.qml</file> <file>imports/NeoChat/Page/JoinRoomPage.qml</file>
<file>imports/NeoChat/Page/InviteUserPage.qml</file> <file>imports/NeoChat/Page/InviteUserPage.qml</file>
<file>imports/NeoChat/Page/SettingsPage.qml</file> <file>imports/NeoChat/Page/SettingsPage.qml</file>
<file>imports/NeoChat/Page/InvitationPage.qml</file>
<file>imports/NeoChat/Component/qmldir</file> <file>imports/NeoChat/Component/qmldir</file>
<file>imports/NeoChat/Component/ChatTextInput.qml</file> <file>imports/NeoChat/Component/ChatTextInput.qml</file>
<file>imports/NeoChat/Component/AutoMouseArea.qml</file> <file>imports/NeoChat/Component/AutoMouseArea.qml</file>
@@ -48,7 +49,6 @@
<file>imports/NeoChat/Dialog/UserDetailDialog.qml</file> <file>imports/NeoChat/Dialog/UserDetailDialog.qml</file>
<file>imports/NeoChat/Menu/Timeline/MessageSourceSheet.qml</file> <file>imports/NeoChat/Menu/Timeline/MessageSourceSheet.qml</file>
<file>imports/NeoChat/Dialog/CreateRoomDialog.qml</file> <file>imports/NeoChat/Dialog/CreateRoomDialog.qml</file>
<file>imports/NeoChat/Dialog/AcceptInvitationDialog.qml</file>
<file>imports/NeoChat/Dialog/StartChatDialog.qml</file> <file>imports/NeoChat/Dialog/StartChatDialog.qml</file>
<file>imports/NeoChat/Dialog/OpenFileDialog.qml</file> <file>imports/NeoChat/Dialog/OpenFileDialog.qml</file>
<file>imports/NeoChat/Dialog/OpenFolderDialog.qml</file> <file>imports/NeoChat/Dialog/OpenFolderDialog.qml</file>