Files
neochat/src/app/qml/QrScannerPage.qml
2026-02-06 13:57:20 +01:00

74 lines
1.7 KiB
QML

// SPDX-FileCopyrightText: 2024 Tobias Fella <tobias.fella@kde.org>
// SPDX-License-Identifier: GPL-2.0-or-later
import QtQuick
import QtQuick.Controls as QQC2
import QtMultimedia
import org.kde.kirigami as Kirigami
import org.kde.prison.scanner as Prison
import org.kde.neochat
Kirigami.Page {
id: root
title: i18nc("@title", "Scan a QR Code")
required property NeoChatConnection connection
padding: 0
Component.onCompleted: session.camera.start()
Connections {
target: root.QQC2.ApplicationWindow.window
function onClosing() {
root.destroy();
}
}
MediaDevices {
id: devices
}
Rectangle {
anchors.fill: parent
color: Kirigami.Theme.backgroundColor
visible: devices.videoInputs.length === 0
Kirigami.PlaceholderMessage {
text: i18nc("@info", "No Camera Connected")
anchors.centerIn: parent
}
}
VideoOutput {
id: viewFinder
anchors.centerIn: parent
visible: devices.videoInputs.length > 0
}
Prison.VideoScanner {
id: scanner
property string previousText: ""
formats: Prison.Format.QRCode | Prison.Format.Aztec
onResultChanged: {
if (result.text.length > 0 && result.text != scanner.previousText) {
root.Kirigami.PageStack.closeDialog();
RoomManager.resolveResource(result.text, "qr");
scanner.previousText = result.text;
}
}
videoSink: viewFinder.videoSink
}
CaptureSession {
id: session
camera: Camera {}
imageCapture: ImageCapture {}
videoOutput: viewFinder
}
}