Package: release.debian.org
Severity: normal
X-Debbugs-Cc: lomiri-camera-...@packages.debian.org
Control: affects -1 + src:lomiri-camera-app
User: release.debian....@packages.debian.org
Usertags: unblock

Please unblock package lomiri-camera-app

I added two more patches from upstream, one fixing a file access bug /
race condition and another fixing a usability issue.

[ Reason ]

+  * debian/patches:
+    + Add 0006_qml-Viewfinder-fix-content-export-preview-corruption.patch.
+      qml/Viewfinder: Fix content export preview corruption in !hasEXIF mode.

-> Fix for two threads possibly trying to write to an image file
simultaneously, causing its corruption.

+    + Add 0007_qml-Support-scanning-white-QR-codes-in-BarcodeReaderApp.patch.
+      Support white QR codes in barcode reader app.

-> Support scanning white QR codes.

[ Impact ]
Above mentioned problems remain in Lomiri's Camera App in trixie.

[ Tests ]
Manual tests.

[ Risks ]
Minimal, only for users of Lomiri Camera App.

[ Checklist ]
  [x] all changes are documented in the d/changelog
  [x] I reviewed all changes and I approve them
  [x] attach debdiff against the package in testing

[ Other info ]
Relevant for Lomiri in Debian.

unblock lomiri-camera-app/4.0.8+dfsg-5
diff -Nru lomiri-camera-app-4.0.8+dfsg/debian/changelog 
lomiri-camera-app-4.0.8+dfsg/debian/changelog
--- lomiri-camera-app-4.0.8+dfsg/debian/changelog       2025-05-30 
16:14:07.000000000 +0200
+++ lomiri-camera-app-4.0.8+dfsg/debian/changelog       2025-06-15 
21:14:56.000000000 +0200
@@ -1,3 +1,13 @@
+lomiri-camera-app (4.0.8+dfsg-5) unstable; urgency=medium
+
+  * debian/patches:
+    + Add 0006_qml-Viewfinder-fix-content-export-preview-corruption.patch.
+      qml/Viewfinder: Fix content export preview corruption in !hasEXIF mode.
+    + Add 0007_qml-Support-scanning-white-QR-codes-in-BarcodeReaderApp.patch.
+      Support white QR codes in barcode reader app.
+
+ -- Mike Gabriel <sunwea...@debian.org>  Sun, 15 Jun 2025 21:14:56 +0200
+
 lomiri-camera-app (4.0.8+dfsg-4) unstable; urgency=medium
 
   * debian/patches:
diff -Nru 
lomiri-camera-app-4.0.8+dfsg/debian/patches/0006_qml-Viewfinder-fix-content-export-preview-corruption.patch
 
lomiri-camera-app-4.0.8+dfsg/debian/patches/0006_qml-Viewfinder-fix-content-export-preview-corruption.patch
--- 
lomiri-camera-app-4.0.8+dfsg/debian/patches/0006_qml-Viewfinder-fix-content-export-preview-corruption.patch
 1970-01-01 01:00:00.000000000 +0100
+++ 
lomiri-camera-app-4.0.8+dfsg/debian/patches/0006_qml-Viewfinder-fix-content-export-preview-corruption.patch
 2025-06-06 19:21:41.000000000 +0200
@@ -0,0 +1,103 @@
+From f3f7476729771137ea510f81357fef98d9d3b9bb Mon Sep 17 00:00:00 2001
+From: Ratchanan Srirattanamet <ratcha...@ubports.com>
+Date: Fri, 30 May 2025 20:56:44 +0700
+Subject: [PATCH] qml/Viewfinder: fix content export preview corruption in
+ !hasEXIF mode
+
+Because of signal connection order, content export preview will start
+rendering image while `deleteEXIF()` re-writes the file. This causes
+preview image to corrupt.
+
+Move all imageSaved() signal handler code from `ViewFinderOverlay` to
+`ViewFinderView` so that we can control the ordering. Order it so that
+(synchronous) `deleteEXIF()` happens before content export preview
+renders image.
+
+#While we're at it, remove call to non-existent `fileOperations.
+#setEXIFData()` (which is redundant with another part of code in
+#`ViewFinderOverlay`); the exception thrown will prevent the rest of the
+#code to run.
+
+Finally, add a few comments so that we turn `deleteEXIF()` to be
+asynchronous in the future.
+
+Fixes: 
https://gitlab.com/ubports/development/apps/lomiri-camera-app/-/issues/217
+Fixes: e38dbba16647 ("add fixes to barcodereader app and drop obsolete 
imports")
+Signed-off-by: Mike Gabriel <mike.gabr...@das-netzwerkteam.de>
+---
+ ViewFinderOverlay.qml | 35 ----------------------------
+ ViewFinderView.qml    | 23 +++++++++++++++++-
+ 2 files changed, 22 insertions(+), 36 deletions(-)
+
+--- a/ViewFinderOverlay.qml
++++ b/ViewFinderOverlay.qml
+@@ -1008,10 +1008,6 @@
+                                           position.horizontalAccuracy <= 100)
+         }
+ 
+-        PostProcessOperations {
+-            id: postProcessOperations
+-        }
+-
+         Connections {
+             target: camera.imageCapture
+             onReadyChanged: {
+@@ -1021,19 +1017,6 @@
+                     }
+                 }
+             }
+-            onImageSaved : {
+-                if(path &&!settings.hasEXIF)
+-                {
+-                    postProcessOperations.deleteEXIFdata(path);
+-                }
+-                if(path && settings.dateStampImages && 
!main.contentExportMode) {
+-                    postProcessOperations.addDateStamp(path,
+-                                                       
viewFinderOverlay.settings.dateStampFormat,
+-                                                       
viewFinderOverlay.settings.dateStampColor,
+-                                                       
viewFinderOverlay.settings.dateStampOpacity,
+-                                                       
viewFinderOverlay.settings.dateStampAlign);
+-                }
+-            }
+         }
+ 
+         CircleButton {
+--- a/ViewFinderView.qml
++++ b/ViewFinderView.qml
+@@ -131,7 +131,24 @@
+             }
+ 
+             onImageSaved: {
+-                if (main.contentExportMode) 
viewFinderExportConfirmation.mediaPath = path;
++                if(!viewFinderOverlay.settings.hasEXIF) {
++                    // TODO: make this operation asynchronous.
++                    postProcessOperations.deleteEXIFdata(path);
++                }
++
++                if(viewFinderOverlay.settings.dateStampImages && 
!main.contentExportMode) {
++                    postProcessOperations.addDateStamp(path,
++                                                       
viewFinderOverlay.settings.dateStampFormat,
++                                                       
viewFinderOverlay.settings.dateStampColor,
++                                                       
viewFinderOverlay.settings.dateStampOpacity,
++                                                       
viewFinderOverlay.settings.dateStampAlign);
++                }
++
++                // TODO: make it so that asynchronous operations signals to us
++                // on finished and only then proceed to the code below.
++
++                if (main.contentExportMode)
++                    viewFinderExportConfirmation.mediaPath = path;
+ 
+                 viewFinderView.photoTaken(path);
+                 metricPhotos.increment();
+@@ -369,6 +386,10 @@
+         sourceComponent: viewFinderExportConfirmationComp
+     }
+ 
++    PostProcessOperations {
++        id: postProcessOperations
++    }
++
+     property alias viewFinderExportConfirmation: 
viewFinderExportConfirmationLoader.item
+ 
+     Component {
diff -Nru 
lomiri-camera-app-4.0.8+dfsg/debian/patches/0007_qml-Support-scanning-white-QR-codes-in-BarcodeReaderApp.patch
 
lomiri-camera-app-4.0.8+dfsg/debian/patches/0007_qml-Support-scanning-white-QR-codes-in-BarcodeReaderApp.patch
--- 
lomiri-camera-app-4.0.8+dfsg/debian/patches/0007_qml-Support-scanning-white-QR-codes-in-BarcodeReaderApp.patch
      1970-01-01 01:00:00.000000000 +0100
+++ 
lomiri-camera-app-4.0.8+dfsg/debian/patches/0007_qml-Support-scanning-white-QR-codes-in-BarcodeReaderApp.patch
      2025-06-15 21:14:56.000000000 +0200
@@ -0,0 +1,24 @@
+From 993643af0ab88243fe76b13f7ed2f4abee823072 Mon Sep 17 00:00:00 2001
+From: Alfred Neumayer <dev.be...@gmail.com>
+Date: Fri, 13 Jun 2025 19:02:18 +0200
+Subject: [PATCH] qml: Activate QZXing.SourceFilter_ImageInverted for
+ imageSourceFilter
+
+Let the viewfinder be color inverted by QZXing. Fixes scanning
+white QR Codes on black backgrounds.
+---
+ barcode-reader-app.qml | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+--- a/barcode-reader-app.qml
++++ b/barcode-reader-app.qml
+@@ -72,7 +72,8 @@
+         active: true
+         decoder {
+             enabledDecoders: QZXing.DecoderFormat_QR_CODE
+-            imageSourceFilter: QZXing.SourceFilter_ImageNormal
++            imageSourceFilter: QZXing.SourceFilter_ImageNormal |
++                               QZXing.SourceFilter_ImageInverted
+ 
+             onTagFoundAdvanced: {
+                 viewFinderView.recentlyScannedTag = tag
diff -Nru lomiri-camera-app-4.0.8+dfsg/debian/patches/series 
lomiri-camera-app-4.0.8+dfsg/debian/patches/series
--- lomiri-camera-app-4.0.8+dfsg/debian/patches/series  2025-05-30 
15:45:23.000000000 +0200
+++ lomiri-camera-app-4.0.8+dfsg/debian/patches/series  2025-06-15 
21:13:35.000000000 +0200
@@ -5,3 +5,5 @@
 0003_fix-spelling-of-background-color-in-AdvancedOptions-qml.patch
 0004_Save-orientation-when-erasing-metadata.patch
 0005_add-left-margin-between-icon-and-label-in-options-selector.patch
+0006_qml-Viewfinder-fix-content-export-preview-corruption.patch
+0007_qml-Support-scanning-white-QR-codes-in-BarcodeReaderApp.patch

Reply via email to