Skip to content
Snippets Groups Projects
Root.qml 6.92 KiB
Newer Older
  • Learn to ignore specific revisions
  • // SPDX-FileCopyrightText: 2021 Nheko Contributors
    
    // SPDX-FileCopyrightText: 2022 Nheko Contributors
    
    //
    // SPDX-License-Identifier: GPL-3.0-or-later
    
    import "./delegates"
    import "./device-verification"
    
    import "./dialogs"
    
    import "./emoji"
    import "./voip"
    import Qt.labs.platform 1.1 as Platform
    
    import QtQuick 2.15
    import QtQuick.Controls 2.15
    
    import QtQuick.Layouts 1.3
    
    import QtQuick.Window 2.15
    
    import im.nheko 1.0
    import im.nheko.EmojiModel 1.0
    
    Page {
        id: timelineRoot
    
        palette: Nheko.colors
    
        FontMetrics {
            id: fontMetrics
        }
    
        EmojiPicker {
            id: emojiPopup
    
            colors: palette
            model: TimelineManager.completerFor("allemoji", "")
        }
    
        Component {
            id: userProfileComponent
    
            UserProfile {
            }
    
        }
    
        Component {
            id: roomSettingsComponent
    
            RoomSettings {
            }
    
        }
    
    
    Loren Burkholder's avatar
    Loren Burkholder committed
        Component {
            id: roomMembersComponent
    
            RoomMembers {
            }
    
    Loren Burkholder's avatar
    Loren Burkholder committed
    
    
        Component {
            id: mobileCallInviteDialog
    
            CallInvite {
            }
    
        }
    
        Component {
            id: quickSwitcherComponent
    
            QuickSwitcher {
            }
    
        }
    
    
    Loren Burkholder's avatar
    Loren Burkholder committed
        Component {
            id: deviceVerificationDialog
    
            DeviceVerification {
            }
    
        }
    
    Loren Burkholder's avatar
    Loren Burkholder committed
    
    
    Loren Burkholder's avatar
    Loren Burkholder committed
        Component {
            id: inviteDialog
    
            InviteDialog {
            }
    
    Loren Burkholder's avatar
    Loren Burkholder committed
    
    
        Component {
            id: packSettingsComponent
    
            ImagePackSettingsDialog {
            }
    
        }
    
    
        Component {
            id: readReceiptsDialog
    
            ReadReceipts {
            }
    
        }
    
    
        Component {
            id: rawMessageDialog
    
            RawMessageDialog {
            }
    
        }
    
    
    Loren Burkholder's avatar
    Loren Burkholder committed
        Component {
            id: logoutDialog
    
            LogoutDialog {
            }
    
        Component {
            id: joinRoomDialog
    
            JoinRoomDialog {
            }
    
        Component {
            id: leaveRoomComponent
    
            LeaveRoomDialog {
            }
    
        Shortcut {
            sequence: "Ctrl+K"
            onActivated: {
                var quickSwitch = quickSwitcherComponent.createObject(timelineRoot);
                TimelineManager.focusTimeline();
                quickSwitch.open();
            }
        }
    
    
            // Add alternative shortcut, because sometimes Alt+A is stolen by the TextEdit
            sequences: ["Alt+A", "Ctrl+Shift+A"]
            context: Qt.ApplicationShortcut
    
            onActivated: Rooms.nextRoomWithActivity()
        }
    
    
    Nicolas Werner's avatar
    Nicolas Werner committed
        Shortcut {
            sequence: "Ctrl+Down"
    
            onActivated: Rooms.nextRoom()
    
    Nicolas Werner's avatar
    Nicolas Werner committed
        Shortcut {
            sequence: "Ctrl+Up"
    
            onActivated: Rooms.previousRoom()
    
    Loren Burkholder's avatar
    Loren Burkholder committed
        Connections {
            function onOpenLogoutDialog() {
                var dialog = logoutDialog.createObject(timelineRoot);
                dialog.open();
            }
    
    
            function onOpenJoinRoomDialog() {
                var dialog = joinRoomDialog.createObject(timelineRoot);
                dialog.show();
            }
    
    
    Loren Burkholder's avatar
    Loren Burkholder committed
            target: Nheko
        }
    
    
            function onNewDeviceVerificationRequest(flow) {
    
                var dialog = deviceVerificationDialog.createObject(timelineRoot, {
                    "flow": flow
                });
                dialog.show();
            }
    
            target: VerificationManager
        }
    
        Connections {
    
            function onOpenProfile(profile) {
    
                var userProfile = userProfileComponent.createObject(timelineRoot, {
                    "profile": profile
                });
                userProfile.show();
            }
    
            function onShowImagePackSettings(room, packlist) {
    
                var packSet = packSettingsComponent.createObject(timelineRoot, {
    
                    "packlist": packlist
                });
                packSet.show();
            }
    
            function onOpenRoomMembersDialog(members, room) {
    
    Loren Burkholder's avatar
    Loren Burkholder committed
                var membersDialog = roomMembersComponent.createObject(timelineRoot, {
                    "members": members,
    
    Loren Burkholder's avatar
    Loren Burkholder committed
                });
                membersDialog.show();
            }
    
    
            function onOpenRoomSettingsDialog(settings) {
    
    Loren Burkholder's avatar
    Loren Burkholder committed
                var roomSettings = roomSettingsComponent.createObject(timelineRoot, {
                    "roomSettings": settings
                });
                roomSettings.show();
            }
    
    
            function onOpenInviteUsersDialog(invitees) {
    
    Loren Burkholder's avatar
    Loren Burkholder committed
                var dialog = inviteDialog.createObject(timelineRoot, {
    
    Loren Burkholder's avatar
    Loren Burkholder committed
                    "roomId": Rooms.currentRoom.roomId,
    
                    "plainRoomName": Rooms.currentRoom.plainRoomName,
    
                    "invitees": invitees
    
    Loren Burkholder's avatar
    Loren Burkholder committed
                });
    
    Loren Burkholder's avatar
    Loren Burkholder committed
                dialog.show();
            }
    
            function onOpenLeaveRoomDialog(roomid) {
                var dialog = leaveRoomComponent.createObject(timelineRoot, {
    
            target: TimelineManager
        }
    
        Connections {
            function onNewInviteState() {
                if (CallManager.haveCallInvite && Settings.mobileMode) {
                    var dialog = mobileCallInviteDialog.createObject(msgView);
                    dialog.open();
                }
            }
    
            target: CallManager
    
    Loren Burkholder's avatar
    Loren Burkholder committed
        }
    
    
        SelfVerificationCheck {
        }
    
        InputDialog {
            id: uiaPassPrompt
    
            echoMode: TextInput.Password
            title: UIA.title
            prompt: qsTr("Please enter your login password to continue:")
            onAccepted: (t) => {
                return UIA.continuePassword(t);
            }
        }
    
    
        InputDialog {
            id: uiaEmailPrompt
    
            title: UIA.title
            prompt: qsTr("Please enter a valid email address to continue:")
            onAccepted: (t) => {
                return UIA.continueEmail(t);
            }
        }
    
        PhoneNumberInputDialog {
            id: uiaPhoneNumberPrompt
    
            title: UIA.title
            prompt: qsTr("Please enter a valid phone number to continue:")
            onAccepted: (p, t) => {
                return UIA.continuePhoneNumber(p, t);
            }
        }
    
        InputDialog {
            id: uiaTokenPrompt
    
            title: UIA.title
            prompt: qsTr("Please enter the token, which has been sent to you:")
            onAccepted: (t) => {
                return UIA.submit3pidToken(t);
            }
        }
    
        Platform.MessageDialog {
            id: uiaErrorDialog
    
            buttons: Platform.MessageDialog.Ok
        }
    
        Platform.MessageDialog {
            id: uiaConfirmationLinkDialog
    
            buttons: Platform.MessageDialog.Ok
            text: qsTr("Wait for the confirmation link to arrive, then continue.")
            onAccepted: UIA.continue3pidReceived()
        }
    
    
        Connections {
            function onPassword() {
                console.log("UIA: password needed");
                uiaPassPrompt.show();
            }
    
            function onEmail() {
                uiaEmailPrompt.show();
            }
    
            function onPhoneNumber() {
                uiaPhoneNumberPrompt.show();
            }
    
            function onPrompt3pidToken() {
                uiaTokenPrompt.show();
            }
    
            function onConfirm3pidToken() {
                uiaConfirmationLinkDialog.open();
            }
    
            function onError(msg) {
                uiaErrorDialog.text = msg;
                uiaErrorDialog.open();
            }