Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package kitinerary for openSUSE:Factory 
checked in at 2026-02-06 19:03:40
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/kitinerary (Old)
 and      /work/SRC/openSUSE:Factory/.kitinerary.new.1670 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "kitinerary"

Fri Feb  6 19:03:40 2026 rev:94 rq:1331275 version:25.12.2

Changes:
--------
--- /work/SRC/openSUSE:Factory/kitinerary/kitinerary.changes    2026-01-12 
10:20:11.630717346 +0100
+++ /work/SRC/openSUSE:Factory/.kitinerary.new.1670/kitinerary.changes  
2026-02-06 19:04:35.301567606 +0100
@@ -1,0 +2,16 @@
+Tue Feb  3 10:05:45 UTC 2026 - Christophe Marin <[email protected]>
+
+- Update to 25.12.2
+  * New bugfix release
+  * For more details please see:
+  * https://kde.org/announcements/gear/25.12.2/
+- Changes since 25.12.1:
+  * Find ZXing 3.0 as well and remove pre-3.0 version workarounds
+  * Adapt to ZXing 3.0 BarcodeFormats API change
+  * Namespace ZXING_* macros
+  * Adapt to Poppler 26.02 API changes
+  * Support SNCF TER pass barcodes
+  * Adapt to Poppler 26.02 API removal
+  * Extract more information from SNCF TER barcodes
+
+-------------------------------------------------------------------

Old:
----
  kitinerary-25.12.1.tar.xz
  kitinerary-25.12.1.tar.xz.sig

New:
----
  kitinerary-25.12.2.tar.xz
  kitinerary-25.12.2.tar.xz.sig

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ kitinerary.spec ++++++
--- /var/tmp/diff_new_pack.W0Y2y5/_old  2026-02-06 19:04:36.133602574 +0100
+++ /var/tmp/diff_new_pack.W0Y2y5/_new  2026-02-06 19:04:36.133602574 +0100
@@ -18,11 +18,11 @@
 
 %define kf6_version 6.19.0
 %define qt6_version 6.9.0
-%define kpim6_version 6.6.0
+%define kpim6_version 6.6.2
 
 %bcond_without released
 Name:           kitinerary
-Version:        25.12.1
+Version:        25.12.2
 Release:        0
 Summary:        Data model and extraction system for travel reservations
 License:        LGPL-2.1-or-later


++++++ kitinerary-25.12.1.tar.xz -> kitinerary-25.12.2.tar.xz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kitinerary-25.12.1/CMakeLists.txt 
new/kitinerary-25.12.2/CMakeLists.txt
--- old/kitinerary-25.12.1/CMakeLists.txt       2026-01-06 17:29:40.000000000 
+0100
+++ new/kitinerary-25.12.2/CMakeLists.txt       2026-02-02 17:53:57.000000000 
+0100
@@ -7,10 +7,10 @@
 # KDE Application Version, managed by release script
 set (RELEASE_SERVICE_VERSION_MAJOR "25")
 set (RELEASE_SERVICE_VERSION_MINOR "12")
-set (RELEASE_SERVICE_VERSION_MICRO "1")
+set (RELEASE_SERVICE_VERSION_MICRO "2")
 set (RELEASE_SERVICE_VERSION 
"${RELEASE_SERVICE_VERSION_MAJOR}.${RELEASE_SERVICE_VERSION_MINOR}.${RELEASE_SERVICE_VERSION_MICRO}")
 
-set(PIM_VERSION "6.6.1")
+set(PIM_VERSION "6.6.2")
 project(KItinerary VERSION ${PIM_VERSION})
 
 set(QT_REQUIRED_VERSION "6.7.0")
@@ -50,17 +50,19 @@
     find_package(SharedMimeInfo 1.3 REQUIRED)
 endif()
 
-set(KMIME_VERSION "6.6.1")
-set(PIM_PKPASS "6.6.1")
+set(KMIME_VERSION "6.6.2")
+set(PIM_PKPASS "6.6.2")
 
 find_package(KPim6Mime ${KMIME_VERSION} CONFIG REQUIRED)
 find_package(KPim6PkPass ${PIM_PKPASS} CONFIG REQUIRED)
 find_package(Poppler COMPONENTS Core)
 set_package_properties("Poppler" PROPERTIES TYPE REQUIRED PURPOSE "Support for 
extraction from PDF booking confirmations.")
-find_package(ZXing 2.0 CONFIG)
-if (NOT TARGET ZXing::ZXing)
-  find_package(ZXing 1.1.1 CONFIG)
-endif()
+foreach(ver 3.0 2.0 1.1.1)
+    find_package(ZXing ${ver} CONFIG QUIET)
+    if (TARGET ZXing::ZXing)
+        break()
+    endif()
+endforeach()
 set_package_properties("ZXing" PROPERTIES TYPE REQUIRED PURPOSE "Support for 
barcode decoding." URL "https://github.com/nu-book/zxing-cpp";)
 find_package(ZLIB REQUIRED)
 set_package_properties("ZLIB" PROPERTIES PURPOSE "Support for decoding UIC 
918-3 train tickets.")
Binary files 
old/kitinerary-25.12.1/autotests/extractordata/sncf/20241217-ter-ticket.bin and 
new/kitinerary-25.12.2/autotests/extractordata/sncf/20241217-ter-ticket.bin 
differ
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/kitinerary-25.12.1/autotests/extractordata/sncf/20241217-ter-ticket.bin.json
 
new/kitinerary-25.12.2/autotests/extractordata/sncf/20241217-ter-ticket.bin.json
--- 
old/kitinerary-25.12.1/autotests/extractordata/sncf/20241217-ter-ticket.bin.json
    1970-01-01 01:00:00.000000000 +0100
+++ 
new/kitinerary-25.12.2/autotests/extractordata/sncf/20241217-ter-ticket.bin.json
    2026-02-02 17:53:57.000000000 +0100
@@ -0,0 +1,64 @@
+[
+    {
+        "@context": "http://schema.org";,
+        "@type": "TrainReservation",
+        "modifiedTime": "2024-12-17T16:38:00",
+        "reservationFor": {
+            "@type": "TrainTrip",
+            "arrivalStation": {
+                "@type": "TrainStation",
+                "address": {
+                    "@type": "PostalAddress",
+                    "addressCountry": "FR"
+                },
+                "geo": {
+                    "@type": "GeoCoordinates",
+                    "latitude": 48.689701080322266,
+                    "longitude": 6.173610210418701
+                },
+                "identifier": "sncf:FRENC",
+                "name": "FRENC"
+            },
+            "departureDay": "2024-12-17",
+            "departureStation": {
+                "@type": "TrainStation",
+                "address": {
+                    "@type": "PostalAddress",
+                    "addressCountry": "FR"
+                },
+                "geo": {
+                    "@type": "GeoCoordinates",
+                    "latitude": 48.58509826660156,
+                    "longitude": 7.734260082244873
+                },
+                "identifier": "sncf:FRAEG",
+                "name": "FRAEG"
+            },
+            "provider": {
+                "@type": "Organization",
+                "identifier": "uic:0087"
+            }
+        },
+        "reservationNumber": "123456789",
+        "reservationStatus": "http://schema.org/ReservationConfirmed";,
+        "reservedTicket": {
+            "@type": "Ticket",
+            "name": "GE PX05 DIGITAL TARI",
+            "priceCurrency": "EUR",
+            "ticketToken": 
"aztecbin:MjIwMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwMFQxMDA4NzEyMzQ1Njc4OUZSQUVHRlJFTkMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUzE3MTIyMDI0MlBYMDVHRSBQWDA1IERJR0lUQUwgVEFSSURSQUdPTiAgICAgICAgICAgICBLT05RSSAgICAgICAgICAgICAgMTQxMDE5OTZBRFVMVEUgICAgMDEgICAgICAgICAgMDAxNzEyMjAyNDE3MTIyMDI0MDAwMDAwMDAwMDAwMTcxMjIwMjQxNjM4MDAwMDAwMzEzMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA=",
+            "ticketedSeat": {
+                "@type": "Seat",
+                "seatingType": "2"
+            },
+            "totalPrice": 31.3,
+            "validFrom": "2024-12-17T00:00:00",
+            "validUntil": "2024-12-17T00:00:00"
+        },
+        "underName": {
+            "@type": "Person",
+            "familyName": "DRAGON",
+            "givenName": "KONQI",
+            "name": "KONQI DRAGON"
+        }
+    }
+]
Binary files 
old/kitinerary-25.12.1/autotests/extractordata/sncf/20250224-ter-zone-pass.bin 
and 
new/kitinerary-25.12.2/autotests/extractordata/sncf/20250224-ter-zone-pass.bin 
differ
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/kitinerary-25.12.1/autotests/extractordata/sncf/20250224-ter-zone-pass.bin.json
 
new/kitinerary-25.12.2/autotests/extractordata/sncf/20250224-ter-zone-pass.bin.json
--- 
old/kitinerary-25.12.1/autotests/extractordata/sncf/20250224-ter-zone-pass.bin.json
 1970-01-01 01:00:00.000000000 +0100
+++ 
new/kitinerary-25.12.2/autotests/extractordata/sncf/20250224-ter-zone-pass.bin.json
 2026-02-02 17:53:57.000000000 +0100
@@ -0,0 +1,23 @@
+[
+    {
+        "@context": "http://schema.org";,
+        "@type": "Ticket",
+        "name": "ALS ZU03 DIGITAL ALS",
+        "priceCurrency": "EUR",
+        "ticketNumber": "123456789",
+        "ticketToken": 
"aztecbin:MjIwMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwMFQ1MDA4NzEyMzQ1Njc4OSAgICAgICAgICAgICAgIFpPTkUgVVJCQUlORSBERSBTRUxFU1RBVCBaT05FIFVSQkFJTkUgREUgU0VMRVNUQVQgQTI0MDIyMDI1MlpVMDNBTFMgWlUwMyBESUdJVEFMIEFMU0RSQUdPTiAgICAgICAgICAgICBLT05RSSAgICAgICAgICAgICAgMTQxMDE5OTZBRFVMVEUgICAgMDEgICAgICAgICAgMDAyNDAyMjAyNTI1MDIyMDI1MDAwMDAwMDAwMDAwMjQwMjIwMjUxNjQ2MDAwMDAwMDM2MEFMU0FQTFVTIDI0SEVVUkVTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA=",
+        "ticketedSeat": {
+            "@type": "Seat",
+            "seatingType": "2"
+        },
+        "totalPrice": 3.6,
+        "underName": {
+            "@type": "Person",
+            "familyName": "DRAGON",
+            "givenName": "KONQI",
+            "name": "KONQI DRAGON"
+        },
+        "validFrom": "2025-02-24T00:00:00",
+        "validUntil": "2025-02-25T00:00:00"
+    }
+]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/kitinerary-25.12.1/src/cli/org.kde.kitinerary-extractor.appdata.xml 
new/kitinerary-25.12.2/src/cli/org.kde.kitinerary-extractor.appdata.xml
--- old/kitinerary-25.12.1/src/cli/org.kde.kitinerary-extractor.appdata.xml     
2026-01-06 17:29:40.000000000 +0100
+++ new/kitinerary-25.12.2/src/cli/org.kde.kitinerary-extractor.appdata.xml     
2026-02-02 17:53:57.000000000 +0100
@@ -131,6 +131,7 @@
   </categories>
   <launchable 
type="desktop-id">org.kde.kitinerary-extractor.desktop</launchable>
   <releases>
+    <release version="6.6.2" date="2026-02-05"/>
     <release version="6.6.1" date="2026-01-08"/>
     <release version="6.6.0" date="2025-12-11"/>
     <release version="6.5.3" date="2025-11-06"/>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kitinerary-25.12.1/src/lib/barcodedecoder.cpp 
new/kitinerary-25.12.2/src/lib/barcodedecoder.cpp
--- old/kitinerary-25.12.1/src/lib/barcodedecoder.cpp   2026-01-06 
17:29:40.000000000 +0100
+++ new/kitinerary-25.12.2/src/lib/barcodedecoder.cpp   2026-02-02 
17:53:57.000000000 +0100
@@ -147,7 +147,7 @@
     BarcodeDecoder::BarcodeType type;
     ZXing::BarcodeFormat zxingType;
 } static constexpr const zxing_format_map[] = {
-#if ZXING_VERSION > QT_VERSION_CHECK(1, 1, 1)
+#if KZXING_VERSION > QT_VERSION_CHECK(1, 1, 1)
     { BarcodeDecoder::Aztec, ZXing::BarcodeFormat::Aztec },
     { BarcodeDecoder::QRCode, ZXing::BarcodeFormat::QRCode },
     { BarcodeDecoder::PDF417, ZXing::BarcodeFormat::PDF417 },
@@ -166,13 +166,21 @@
 #endif
 };
 
-static auto typeToFormats(BarcodeDecoder::BarcodeTypes types)
+static ZXing::BarcodeFormats typeToFormats(BarcodeDecoder::BarcodeTypes types)
 {
+#if KZXING_VERSION <QT_VERSION_CHECK(3, 0, 0)
     ZXing::BarcodeFormats formats;
+#else
+    std::vector<ZXing::BarcodeFormat> formats;
+#endif
 
     for (auto i : zxing_format_map) {
         if (types & i.type) {
+#if KZXING_VERSION < QT_VERSION_CHECK(3, 0, 0)
             formats |= i.zxingType;
+#else
+            formats.push_back(i.zxingType);
+#endif
         }
     }
     return formats;
@@ -194,7 +202,7 @@
         case QImage::Format_ARGB32:
         case QImage::Format_RGB32:
 #if Q_BYTE_ORDER == Q_LITTLE_ENDIAN
-#if ZXING_VERSION >= QT_VERSION_CHECK(2, 3, 0)
+#if KZXING_VERSION >= QT_VERSION_CHECK(2, 3, 0)
             return ZXing::ImageFormat::RGBA;
 #else
             return ZXing::ImageFormat::RGBX;
@@ -206,7 +214,7 @@
             return ZXing::ImageFormat::RGB;
         case QImage::Format_RGBX8888:
         case QImage::Format_RGBA8888:
-#if ZXING_VERSION >= QT_VERSION_CHECK(2, 3, 0)
+#if KZXING_VERSION >= QT_VERSION_CHECK(2, 3, 0)
             return ZXing::ImageFormat::RGBA;
 #else
             return ZXing::ImageFormat::RGBX;
@@ -224,14 +232,14 @@
     return ZXing::ImageView{img.bits(), img.width(), img.height(), 
zxingImageFormat(img.format()), static_cast<int>(img.bytesPerLine())};
 }
 
-#if ZXING_VERSION >= QT_VERSION_CHECK(2, 3, 0)
+#if KZXING_VERSION >= QT_VERSION_CHECK(2, 3, 0)
 static void applyZXingResult(BarcodeDecoder::Result &result, const 
ZXing::Barcode &zxingResult, BarcodeDecoder::BarcodeTypes format)
 #else
 static void applyZXingResult(BarcodeDecoder::Result &result, const 
ZXing::Result &zxingResult, BarcodeDecoder::BarcodeTypes format)
 #endif
 {
     if (zxingResult.isValid()) {
-#if ZXING_VERSION >= QT_VERSION_CHECK(1, 4, 0)
+#if KZXING_VERSION >= QT_VERSION_CHECK(1, 4, 0)
         // detect content type
         std::string zxUtf8Text;
         if (zxingResult.contentType() == ZXing::ContentType::Text) {
@@ -286,7 +294,7 @@
         return;
     }
 
-#if ZXING_VERSION >= QT_VERSION_CHECK(2, 3, 0)
+#if KZXING_VERSION >= QT_VERSION_CHECK(2, 3, 0)
     ZXing::ReaderOptions hints;
 #else
     ZXing::DecodeHints hints;
@@ -296,9 +304,9 @@
     hints.setIsPure((hint & BarcodeDecoder::IgnoreAspectRatio) == 0);
 
     // convert if img is in a format ZXing can't handle directly
-#if ZXING_VERSION >= QT_VERSION_CHECK(2, 3, 0)
+#if KZXING_VERSION >= QT_VERSION_CHECK(2, 3, 0)
     ZXing::Barcode res;
-#elif ZXING_VERSION > QT_VERSION_CHECK(1, 3, 0)
+#elif KZXING_VERSION > QT_VERSION_CHECK(1, 3, 0)
     ZXing::Result res;
 #else
     ZXing::Result res(ZXing::DecodeStatus::NotFound);
@@ -314,12 +322,12 @@
 
 void BarcodeDecoder::decodeMultiIfNeeded(const QImage &img, 
BarcodeDecoder::BarcodeTypes hint, std::vector<BarcodeDecoder::Result> 
&results) const
 {
-#if ZXING_VERSION > QT_VERSION_CHECK(1, 2, 0)
+#if KZXING_VERSION > QT_VERSION_CHECK(1, 2, 0)
     if (std::any_of(results.begin(), results.end(), [hint](const auto &r) { 
return (r.positive & hint) || ((r.negative & hint) == hint); })) {
         return;
     }
 
-#if ZXING_VERSION >= QT_VERSION_CHECK(2, 3, 0)
+#if KZXING_VERSION >= QT_VERSION_CHECK(2, 3, 0)
     ZXing::ReaderOptions hints;
 #else
     ZXing::DecodeHints hints;
@@ -329,7 +337,7 @@
     hints.setIsPure(false);
 
     // convert if img is in a format ZXing can't handle directly
-#if ZXING_VERSION >= QT_VERSION_CHECK(2, 3, 0)
+#if KZXING_VERSION >= QT_VERSION_CHECK(2, 3, 0)
     std::vector<ZXing::Barcode> zxingResults;
 #else
     std::vector<ZXing::Result> zxingResults;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kitinerary-25.12.1/src/lib/config-kitinerary.h.in 
new/kitinerary-25.12.2/src/lib/config-kitinerary.h.in
--- old/kitinerary-25.12.1/src/lib/config-kitinerary.h.in       2026-01-06 
17:29:40.000000000 +0100
+++ new/kitinerary-25.12.2/src/lib/config-kitinerary.h.in       2026-02-02 
17:53:57.000000000 +0100
@@ -14,11 +14,12 @@
 #define KPOPPLER_VERSION_PATCH @POPPLER_VERSION_PATCH@
 #define KPOPPLER_VERSION 
((@POPPLER_VERSION_MAJOR@<<16)|(@POPPLER_VERSION_MINOR@<<8)|(@POPPLER_VERSION_PATCH@))
 
-#define ZXING_VERSION_STRING "@ZXing_VERSION@"
-#define ZXING_VERSION_MAJOR @ZXing_VERSION_MAJOR@
-#define ZXING_VERSION_MINOR @ZXing_VERSION_MINOR@
-#define ZXING_VERSION_PATCH @ZXing_VERSION_PATCH@
-#define ZXING_VERSION 
((@ZXing_VERSION_MAJOR@<<16)|(@ZXing_VERSION_MINOR@<<8)|(@ZXing_VERSION_PATCH@))
+// namespaced to not clash with the ZXING_* macros of zxing itself
+#define KZXING_VERSION_STRING "@ZXing_VERSION@"
+#define KZXING_VERSION_MAJOR @ZXing_VERSION_MAJOR@
+#define KZXING_VERSION_MINOR @ZXing_VERSION_MINOR@
+#define KZXING_VERSION_PATCH @ZXing_VERSION_PATCH@
+#define KZXING_VERSION 
((KZXING_VERSION_MAJOR<<16)|(KZXING_VERSION_MINOR<<8)|(KZXING_VERSION_PATCH))
 
 #cmakedefine01 HAVE_LIBXML2
 #cmakedefine01 HAVE_PHONENUMBER
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kitinerary-25.12.1/src/lib/extractorcapabilities.cpp 
new/kitinerary-25.12.2/src/lib/extractorcapabilities.cpp
--- old/kitinerary-25.12.1/src/lib/extractorcapabilities.cpp    2026-01-06 
17:29:40.000000000 +0100
+++ new/kitinerary-25.12.2/src/lib/extractorcapabilities.cpp    2026-02-02 
17:53:57.000000000 +0100
@@ -35,7 +35,7 @@
 
         "iCal support        : kcal (" KCALENDARCORE_VERSION_STRING ")\n"
 
-        "Barcode decoder     : ZXing (" ZXING_VERSION_STRING ")\n"
+        "Barcode decoder     : ZXing (" KZXING_VERSION_STRING ")\n"
 
         "Phone number decoder: "
 #if HAVE_PHONENUMBER
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kitinerary-25.12.1/src/lib/pdf/pdfdocument.cpp 
new/kitinerary-25.12.2/src/lib/pdf/pdfdocument.cpp
--- old/kitinerary-25.12.1/src/lib/pdf/pdfdocument.cpp  2026-01-06 
17:29:40.000000000 +0100
+++ new/kitinerary-25.12.2/src/lib/pdf/pdfdocument.cpp  2026-02-02 
17:53:57.000000000 +0100
@@ -385,8 +385,12 @@
     std::unique_ptr<PdfDocument> doc(new PdfDocument(parent));
     doc->d->m_pdfData = data;
     // PDFDoc takes ownership of stream
+#if KPOPPLER_VERSION < QT_VERSION_CHECK(26, 1, 90)
     auto stream = new 
MemStream(const_cast<char*>(doc->d->m_pdfData.constData()), 0, 
doc->d->m_pdfData.size(), Object());
-    std::unique_ptr<PDFDoc> popplerDoc(new PDFDoc(stream));
+#else
+    auto stream = 
std::make_unique<MemStream>(const_cast<char*>(doc->d->m_pdfData.constData()), 
0, doc->d->m_pdfData.size(), Object());
+#endif
+    auto popplerDoc = std::make_unique<PDFDoc>(std::move(stream));
     if (!popplerDoc->isOk()) {
         qCWarning(Log) << "Got invalid PDF document!" << 
popplerDoc->getErrorCode();
         return nullptr;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/kitinerary-25.12.1/src/lib/pdf/pdfextractoroutputdevice.cpp 
new/kitinerary-25.12.2/src/lib/pdf/pdfextractoroutputdevice.cpp
--- old/kitinerary-25.12.1/src/lib/pdf/pdfextractoroutputdevice.cpp     
2026-01-06 17:29:40.000000000 +0100
+++ new/kitinerary-25.12.2/src/lib/pdf/pdfextractoroutputdevice.cpp     
2026-02-02 17:53:57.000000000 +0100
@@ -313,3 +313,24 @@
     PdfLink l(QString::fromStdString(uriLink->getURI()), 
QRectF(QPointF(std::min(xu1, xu2), std::min(yu1, yu2)), QPointF(std::max(xu1, 
xu2), std::max(yu1, yu2))));
     m_links.push_back(std::move(l));
 }
+
+#if KPOPPLER_VERSION >= QT_VERSION_CHECK(26, 1, 90)
+void PdfExtractorOutputDevice::setDefaultCTM(const std::array<double, 6> &ctm)
+{
+    TextOutputDev::setDefaultCTM(ctm);
+
+    const double det = 1 / (ctm[0] * ctm[3] - ctm[1] * ctm[2]);
+    m_defICTM[0] = ctm[3] * det;
+    m_defICTM[1] = -ctm[1] * det;
+    m_defICTM[2] = -ctm[2] * det;
+    m_defICTM[3] = ctm[0] * det;
+    m_defICTM[4] = (ctm[2] * ctm[5] - ctm[3] * ctm[4]) * det;
+    m_defICTM[5] = (ctm[1] * ctm[4] - ctm[0] * ctm[5]) * det;
+}
+
+void PdfExtractorOutputDevice::cvtDevToUser(double dx, double dy, double *ux, 
double *uy) const
+{
+    *ux = m_defICTM[0] * dx + m_defICTM[2] * dy + m_defICTM[4];
+    *uy = m_defICTM[1] * dx + m_defICTM[3] * dy + m_defICTM[5];
+}
+#endif
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/kitinerary-25.12.1/src/lib/pdf/pdfextractoroutputdevice_p.h 
new/kitinerary-25.12.2/src/lib/pdf/pdfextractoroutputdevice_p.h
--- old/kitinerary-25.12.1/src/lib/pdf/pdfextractoroutputdevice_p.h     
2026-01-06 17:29:40.000000000 +0100
+++ new/kitinerary-25.12.2/src/lib/pdf/pdfextractoroutputdevice_p.h     
2026-02-02 17:53:57.000000000 +0100
@@ -25,6 +25,10 @@
 public:
     explicit PdfExtractorOutputDevice();
 
+#if KPOPPLER_VERSION >= QT_VERSION_CHECK(26, 1, 90)
+    void setDefaultCTM(const std::array<double, 6> &ctm) override;
+#endif
+
     // call once displaying has been completed
     void finalize();
 
@@ -61,6 +65,13 @@
 
     // extracted links
     std::vector<PdfLink> m_links;
+
+private:
+#if KPOPPLER_VERSION >= QT_VERSION_CHECK(26, 1, 90)
+    // removed in Poppler 26.02
+    void cvtDevToUser(double dx, double dy, double *ux, double *uy) const;
+    std::array<double, 6> m_defICTM;
+#endif
 };
 
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kitinerary-25.12.1/src/lib/scripts/sncf.js 
new/kitinerary-25.12.2/src/lib/scripts/sncf.js
--- old/kitinerary-25.12.1/src/lib/scripts/sncf.js      2026-01-06 
17:29:40.000000000 +0100
+++ new/kitinerary-25.12.2/src/lib/scripts/sncf.js      2026-02-02 
17:53:57.000000000 +0100
@@ -291,8 +291,18 @@
     res.underName.familyName = code.substr(116, 19);
     res.underName.givenName = code.substr(135, 19);
     res.programMembershipUsed.programName = tariffs[code.substr(92, 4)];
+    res.reservedTicket.name = code.substr(96, 20);
+    res.reservedTicket.validFrom = JsonLd.toDateTime(code.substr(186, 8), 
"ddMMyyyy", "fr");
+    res.reservedTicket.validUntil = JsonLd.toDateTime(code.substr(194, 8), 
"ddMMyyyy", "fr");
+    res.modifiedTime = JsonLd.toDateTime(code.substr(214, 12), "ddMMyyyyHHmm", 
"fr");
     res.reservedTicket.totalPrice = code.substr(226, 10) / 100;
     res.reservedTicket.priceCurrency = 'EUR';
+    if (code.substr(82, 1) == 'A') {
+        let ticket = res.reservedTicket;
+        ticket.underName = res.underName;
+        ticket.issuer = res.reservationFor.provider;
+        return ticket;
+    }
     return res;
 }
 

Reply via email to