69 lines
2.4 KiB
Diff
69 lines
2.4 KiB
Diff
|
From b08fd64711165c10bf1e88e6add4e66f68e32dc5 Mon Sep 17 00:00:00 2001
|
||
|
From: Volker Krause <vkrause@kde.org>
|
||
|
Date: Fri, 8 Jul 2022 16:04:19 +0200
|
||
|
Subject: [PATCH] Support ZXing 1.4.0
|
||
|
|
||
|
The previous code crashes (if it builds at all) with ZXing 1.4.0, so
|
||
|
distributions updating to 1.4.0 would need to apply this patch on top
|
||
|
of 22.04.3 as well.
|
||
|
|
||
|
(cherry picked from commit e60195421aa159462353892ed32bf46ac8c57d19)
|
||
|
---
|
||
|
src/lib/barcodedecoder.cpp | 26 ++++++++++++++++++++++++++
|
||
|
1 file changed, 26 insertions(+)
|
||
|
|
||
|
diff --git a/src/lib/barcodedecoder.cpp b/src/lib/barcodedecoder.cpp
|
||
|
index b38140a..40e0c64 100644
|
||
|
--- a/src/lib/barcodedecoder.cpp
|
||
|
+++ b/src/lib/barcodedecoder.cpp
|
||
|
@@ -15,6 +15,7 @@
|
||
|
#include <QString>
|
||
|
|
||
|
#ifdef HAVE_ZXING
|
||
|
+#define ZX_USE_UTF8 1
|
||
|
#ifdef ZXING_USE_READBARCODE
|
||
|
#include <ZXing/ReadBarcode.h>
|
||
|
#else
|
||
|
@@ -244,6 +245,30 @@ void BarcodeDecoder::decodeZxing(const QImage &img, BarcodeDecoder::BarcodeTypes
|
||
|
#endif
|
||
|
|
||
|
if (res.isValid()) {
|
||
|
+#if ZXING_VERSION >= QT_VERSION_CHECK(1, 4, 0)
|
||
|
+ // detect content type
|
||
|
+ std::string zxUtf8Text;
|
||
|
+ if (res.contentType() == ZXing::ContentType::Text) {
|
||
|
+ result.contentType = Result::Any;
|
||
|
+ zxUtf8Text = res.text();
|
||
|
+ // check if the text is ASCII-only (in which case we allow access as byte array as well)
|
||
|
+ if (std::any_of(zxUtf8Text.begin(), zxUtf8Text.end(), [](unsigned char c) { return c > 0x7F; })) {
|
||
|
+ result.contentType &= ~Result::ByteArray;
|
||
|
+ }
|
||
|
+ } else {
|
||
|
+ result.contentType = Result::ByteArray;
|
||
|
+ }
|
||
|
+
|
||
|
+ // decode content
|
||
|
+ if (result.contentType & Result::ByteArray) {
|
||
|
+ QByteArray b;
|
||
|
+ b.resize(res.bytes().size());
|
||
|
+ std::copy(res.bytes().begin(), res.bytes().end(), b.begin());
|
||
|
+ result.content = b;
|
||
|
+ } else {
|
||
|
+ result.content = QString::fromStdString(zxUtf8Text);
|
||
|
+ }
|
||
|
+#else
|
||
|
// detect content type
|
||
|
result.contentType = Result::Any;
|
||
|
if (std::any_of(res.text().begin(), res.text().end(), [](const auto c) { return c > 255; })) {
|
||
|
@@ -262,6 +287,7 @@ void BarcodeDecoder::decodeZxing(const QImage &img, BarcodeDecoder::BarcodeTypes
|
||
|
} else {
|
||
|
result.content = QString::fromStdWString(res.text());
|
||
|
}
|
||
|
+#endif
|
||
|
result.positive |= formatToType(res.format());
|
||
|
} else {
|
||
|
result.negative |= format;
|
||
|
--
|
||
|
2.36.1
|
||
|
|