From 819347370a7f8b442c559b438340f7a94a87dfc0 Mon Sep 17 00:00:00 2001
From: agsantos <aline.gondimsantos@savoirfairelinux.com>
Date: Wed, 15 Dec 2021 11:59:45 -0500
Subject: [PATCH] video: fix camera preview opening

 - Camera preview in av settings now opens after inserting USB camera on a device with `No video device`;
 - Same for recording video message window.

Change-Id: I34ad9b6900865fdc7c4acf861527e4bf8e336123
GitLab: #610
---
 src/mainview/components/ChatViewFooter.qml    |  2 +-
 src/mainview/components/RecordBox.qml         | 20 +++++++++++++++----
 src/settingsview/components/VideoSettings.qml | 13 ++++++++----
 3 files changed, 26 insertions(+), 9 deletions(-)

diff --git a/src/mainview/components/ChatViewFooter.qml b/src/mainview/components/ChatViewFooter.qml
index b0f58069d..ea520b3b2 100644
--- a/src/mainview/components/ChatViewFooter.qml
+++ b/src/mainview/components/ChatViewFooter.qml
@@ -84,7 +84,7 @@ Rectangle {
         }
     }
 
-    RecordBox{
+    RecordBox {
         id: recordBox
 
         visible: false
diff --git a/src/mainview/components/RecordBox.qml b/src/mainview/components/RecordBox.qml
index 0d2b0e0fe..ccfcc6feb 100644
--- a/src/mainview/components/RecordBox.qml
+++ b/src/mainview/components/RecordBox.qml
@@ -41,7 +41,6 @@ Rectangle {
     property int duration: 0
     property int state: RecordBox.States.INIT
     property bool isVideo: false
-    property bool previewAvailable: false
     property int preferredWidth: 320
     property int preferredHeight: 240
     property int btnSize: 40
@@ -61,7 +60,6 @@ Rectangle {
         if (isVideo) {
             previewWidget.deviceId = VideoDevices.getDefaultDevice()
             previewWidget.rendererId = VideoDevices.startDevice(previewWidget.deviceId)
-            previewAvailable = true
         }
     }
 
@@ -243,7 +241,7 @@ Rectangle {
 
         anchors.fill: parent
 
-        visible: (isVideo && previewAvailable)
+        visible: (isVideo && VideoDevices.listSize !== 0)
         color: JamiTheme.blackColor
         radius: 5
 
@@ -262,6 +260,14 @@ Rectangle {
                 maskSource: rectBox
             }
         }
+
+        onVisibleChanged: {
+            if (visible) {
+                previewWidget.deviceId = VideoDevices.getDefaultDevice()
+                previewWidget.rendererId = VideoDevices.startDevice(previewWidget.deviceId)
+            } else
+                VideoDevices.stopDevice(previewWidget.deviceId)
+        }
     }
 
     Label {
@@ -269,7 +275,13 @@ Rectangle {
 
         width: root.width
 
-        visible: (isVideo && !previewAvailable)
+        visible: (isVideo && VideoDevices.listSize === 0)
+
+        onVisibleChanged: {
+            if (visible) {
+                closeRecorder()
+            }
+        }
 
         text: JamiStrings.previewUnavailable
         font.pointSize: JamiTheme.settingsFontSize
diff --git a/src/settingsview/components/VideoSettings.qml b/src/settingsview/components/VideoSettings.qml
index f15840bbd..a9c813af3 100644
--- a/src/settingsview/components/VideoSettings.qml
+++ b/src/settingsview/components/VideoSettings.qml
@@ -32,14 +32,12 @@ ColumnLayout {
     id: root
 
     property real aspectRatio: 0.75
-    property bool previewAvailable: false
     property int itemWidth
 
     function startPreviewing(force = false) {
         if (root.visible) {
             previewWidget.deviceId = VideoDevices.getDefaultDevice()
             previewWidget.rendererId = VideoDevices.startDevice(previewWidget.deviceId, force)
-            previewAvailable = true
         }
     }
 
@@ -230,11 +228,18 @@ ColumnLayout {
                 maskSource: rectBox
             }
         }
+
+        onVisibleChanged: {
+            if (visible) {
+                VideoDevices.stopDevice(previewWidget.deviceId)
+                startPreviewing(true)
+            } else
+                VideoDevices.stopDevice(previewWidget.deviceId)
+        }
     }
 
     Label {
-        // TODO: proper use of previewAvailable
-        visible: !previewAvailable
+        visible: VideoDevices.listSize === 0
 
         Layout.fillWidth: true
         Layout.preferredHeight: JamiTheme.preferredFieldHeight
-- 
GitLab