Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package kf6-kfilemetadata for 
openSUSE:Factory checked in at 2026-10-11 15:15:25
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/kf6-kfilemetadata (Old)
 and      /work/SRC/openSUSE:Factory/.kf6-kfilemetadata.new.3698736 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "kf6-kfilemetadata"

Sun Oct 11 15:15:25 2026 rev:32 rq:1383930 version:6.31.0

Changes:
--------
--- /work/SRC/openSUSE:Factory/kf6-kfilemetadata/kf6-kfilemetadata.changes      
2026-09-11 18:02:00.856555452 +0200
+++ 
/work/SRC/openSUSE:Factory/.kf6-kfilemetadata.new.3698736/kf6-kfilemetadata.changes
 2026-10-11 15:17:57.370329636 +0200
@@ -1,0 +2,17 @@
+Wed Oct  7 06:47:21 UTC 2026 - Christophe Marin <[email protected]>
+
+- Update to 6.31.0
+  * New feature release
+  * For more details please see:
+  * https://kde.org/announcements/frameworks/6/6.31.0
+- Changes since 6.30.0:
+  * Update dependency version to 6.31.0
+  * Fix abort in malformed file
+  * Use ECMInstalledLibraryCheck
+  * FFmpegExtractor: Extract Apple-proprietary metadata
+  * FFmpegExtractor: Extract GPS latitude and longitude
+  * FFmpegExtractor: Extract creation time
+  * Fix exception crash on malformed files
+  * Update version to 6.31.0
+
+-------------------------------------------------------------------

Old:
----
  kfilemetadata-6.30.0.tar.xz
  kfilemetadata-6.30.0.tar.xz.sig

New:
----
  kfilemetadata-6.31.0.tar.xz
  kfilemetadata-6.31.0.tar.xz.sig

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

Other differences:
------------------
++++++ kf6-kfilemetadata.spec ++++++
--- /var/tmp/diff_new_pack.RIkP3m/_old  2026-10-11 15:17:58.117360814 +0200
+++ /var/tmp/diff_new_pack.RIkP3m/_new  2026-10-11 15:17:58.119360898 +0200
@@ -19,12 +19,12 @@
 %define qt6_version 6.9.0
 
 %define rname kfilemetadata
-# Full KF6 version (e.g. 6.30.0)
+# Full KF6 version (e.g. 6.31.0)
 %{!?_kf6_version: %global _kf6_version %{version}}
 %bcond_without ffmpeg
 %bcond_without released
 Name:           kf6-kfilemetadata
-Version:        6.30.0
+Version:        6.31.0
 Release:        0
 Summary:        Library for extracting Metadata
 License:        GPL-2.0-or-later AND LGPL-2.1-or-later AND LGPL-3.0-only


++++++ kfilemetadata-6.30.0.tar.xz -> kfilemetadata-6.31.0.tar.xz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kfilemetadata-6.30.0/.kde-ci.yml 
new/kfilemetadata-6.31.0/.kde-ci.yml
--- old/kfilemetadata-6.30.0/.kde-ci.yml        2026-09-04 13:38:25.000000000 
+0200
+++ new/kfilemetadata-6.31.0/.kde-ci.yml        2026-10-02 15:19:26.000000000 
+0200
@@ -12,3 +12,4 @@
 Options:
  test-before-installing: True
  require-passing-tests-on: ['Linux', 'FreeBSD', 'Windows']
+ run-installed-library-check-on: ['@all']
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kfilemetadata-6.30.0/CMakeLists.txt 
new/kfilemetadata-6.31.0/CMakeLists.txt
--- old/kfilemetadata-6.30.0/CMakeLists.txt     2026-09-04 13:38:25.000000000 
+0200
+++ new/kfilemetadata-6.31.0/CMakeLists.txt     2026-10-02 15:19:26.000000000 
+0200
@@ -1,11 +1,11 @@
-cmake_minimum_required(VERSION 3.29)
+cmake_minimum_required(VERSION 3.30)
 
-set(KF_VERSION "6.30.0") # handled by release scripts
-set(KF_DEP_VERSION "6.30.0") # handled by release scripts
+set(KF_VERSION "6.31.0") # handled by release scripts
+set(KF_DEP_VERSION "6.31.0") # handled by release scripts
 project(KFileMetaData VERSION ${KF_VERSION})
 
 include(FeatureSummary)
-find_package(ECM 6.30.0  NO_MODULE)
+find_package(ECM 6.31.0  NO_MODULE)
 set_package_properties(ECM PROPERTIES TYPE REQUIRED DESCRIPTION "Extra CMake 
Modules." URL "https://commits.kde.org/extra-cmake-modules";)
 feature_summary(WHAT REQUIRED_PACKAGES_NOT_FOUND 
FATAL_ON_MISSING_REQUIRED_PACKAGES)
 
@@ -21,6 +21,7 @@
 include(ECMQtDeclareLoggingCategory)
 include(ECMDeprecationSettings)
 include(ECMGenerateQDoc)
+include(ECMInstalledLibraryCheck)
 include(CheckStructHasMember)
 
 set(EXCLUDE_DEPRECATED_BEFORE_AND_AT 0 CACHE STRING "Control the range of 
deprecated API excluded from the build [default=0].")
@@ -36,7 +37,7 @@
 option(FUZZERS_USE_QT_MINIMAL_INTEGRATION_PLUGIN "Whether to use the Qt 
minimal integration plugin for fuzzers" OFF)
 
 # Dependencies
-set(REQUIRED_QT_VERSION 6.9.0)
+set(REQUIRED_QT_VERSION 6.10.0)
 
 find_package(Qt6 ${REQUIRED_QT_VERSION} CONFIG OPTIONAL_COMPONENTS Gui)
 set_package_properties(Qt6Gui PROPERTIES DESCRIPTION "Qt6: Gui component"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/kfilemetadata-6.30.0/autotests/extractorcoveragetest.cpp 
new/kfilemetadata-6.31.0/autotests/extractorcoveragetest.cpp
--- old/kfilemetadata-6.30.0/autotests/extractorcoveragetest.cpp        
2026-09-04 13:38:25.000000000 +0200
+++ new/kfilemetadata-6.31.0/autotests/extractorcoveragetest.cpp        
2026-10-02 15:19:26.000000000 +0200
@@ -79,6 +79,8 @@
             { "test_cover.mkv",                "video/x-matroska"},
             { "test.mp3",                      "audio/mpeg"},
             { "test.id3v1.mp3",                "audio/mpeg"},
+            { "test_location.mp4",             "video/mp4"},
+            { "test_apple.mov",                "video/quicktime"},
             { "test.aax",                      "audio/vnd.audible.aax"},
             { "test.aaxc",                     "audio/vnd.audible.aaxc"},
             { "test.mpc",                      "audio/x-musepack"},
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/kfilemetadata-6.30.0/autotests/ffmpegextractortest.cpp 
new/kfilemetadata-6.31.0/autotests/ffmpegextractortest.cpp
--- old/kfilemetadata-6.30.0/autotests/ffmpegextractortest.cpp  2026-09-04 
13:38:25.000000000 +0200
+++ new/kfilemetadata-6.31.0/autotests/ffmpegextractortest.cpp  2026-10-02 
15:19:26.000000000 +0200
@@ -30,6 +30,8 @@
     void testMetaData_data();
     void testCoverimage();
     void testCoverimage_data();
+    void testLocation();
+    void testApple();
 
 private:
     QMimeDatabase mimeDb;
@@ -215,6 +217,36 @@
     }
 }
 
+void ffmpegExtractorTest::testLocation()
+{
+    const QString mimeType = QStringLiteral("mp4");
+    const QString fileName = testFilePath(QStringLiteral("test_location"), 
mimeType);
+
+    FFmpegExtractor plugin{this};
+
+    SimpleExtractionResult result(fileName, mimeType);
+    plugin.extract(&result);
+
+    QCOMPARE(result.properties().value(Property::PhotoGpsLatitude), 
double(42.362998962402344));
+    QCOMPARE(result.properties().value(Property::PhotoGpsLongitude), 
double(-71.36019897460938));
+}
+
+void ffmpegExtractorTest::testApple()
+{
+    const QString mimeType = QStringLiteral("mov");
+    const QString fileName = testFilePath(QStringLiteral("test_apple"), 
mimeType);
+
+    FFmpegExtractor plugin{this};
+
+    SimpleExtractionResult result(fileName, mimeType);
+    plugin.extract(&result);
+
+    QCOMPARE(result.properties().value(Property::Manufacturer), 
QStringLiteral("Apple"));
+    QCOMPARE(result.properties().value(Property::Model), 
QStringLiteral("iPhone 11"));
+    QCOMPARE(result.properties().value(Property::Generator), 
QStringLiteral("18.3.1"));
+    QCOMPARE(result.properties().value(Property::CreationDate), 
QDateTime(QDate(2026, 8, 24), QTime(13, 59, 0), QTimeZone::utc()));
+}
+
 QTEST_GUILESS_MAIN(ffmpegExtractorTest)
 
 #include "ffmpegextractortest.moc"
Binary files old/kfilemetadata-6.30.0/autotests/samplefiles/test_apple.mov and 
new/kfilemetadata-6.31.0/autotests/samplefiles/test_apple.mov differ
Binary files old/kfilemetadata-6.30.0/autotests/samplefiles/test_location.mp4 
and new/kfilemetadata-6.31.0/autotests/samplefiles/test_location.mp4 differ
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kfilemetadata-6.30.0/po/ca/kfilemetadata6.po 
new/kfilemetadata-6.31.0/po/ca/kfilemetadata6.po
--- old/kfilemetadata-6.30.0/po/ca/kfilemetadata6.po    2026-09-04 
13:38:25.000000000 +0200
+++ new/kfilemetadata-6.31.0/po/ca/kfilemetadata6.po    2026-10-02 
15:19:26.000000000 +0200
@@ -1,16 +1,16 @@
 # Translation of kfilemetadata6.po to Catalan
-# Copyright (C) 2014-2025 This_file_is_part_of_KDE
+# Copyright (C) 2014-2026 This_file_is_part_of_KDE
 # This file is distributed under the license LGPL version 2.1 or
 # version 3 or later versions approved by the membership of KDE e.V.
 #
-# SPDX-FileCopyrightText: 2014-2019, 2022-2025 Josep M. Ferrer 
<[email protected]>
+# SPDX-FileCopyrightText: 2014-2019, 2022-2026 Josep M. Ferrer 
<[email protected]>
 # SPDX-FileCopyrightText: 2014-2015 Antoni Bella Pérez <[email protected]>
 msgid ""
 msgstr ""
 "Project-Id-Version: kfilemetadata\n"
 "Report-Msgid-Bugs-To: https://bugs.kde.org\n";
 "POT-Creation-Date: 2025-11-17 11:49+0000\n"
-"PO-Revision-Date: 2025-06-27 08:18+0200\n"
+"PO-Revision-Date: 2026-09-06 19:02+0200\n"
 "Last-Translator: Josep M. Ferrer <[email protected]>\n"
 "Language-Team: Catalan <[email protected]>\n"
 "Language: ca\n"
@@ -19,7 +19,7 @@
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=n != 1;\n"
 "X-Accelerator-Marker: &\n"
-"X-Generator: Lokalize 22.12.3\n"
+"X-Generator: Lokalize 25.04.0\n"
 
 #: src/formatstrings.cpp:64
 #, kde-format
@@ -399,7 +399,7 @@
 #: src/propertyinfo.cpp:63
 msgctxt "@label"
 msgid "Height"
-msgstr "Alçada"
+msgstr "Altura"
 
 #: src/propertyinfo.cpp:64
 msgctxt "@label EXIF"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/kfilemetadata-6.30.0/po/ca@valencia/kfilemetadata6.po 
new/kfilemetadata-6.31.0/po/ca@valencia/kfilemetadata6.po
--- old/kfilemetadata-6.30.0/po/ca@valencia/kfilemetadata6.po   2026-09-04 
13:38:25.000000000 +0200
+++ new/kfilemetadata-6.31.0/po/ca@valencia/kfilemetadata6.po   2026-10-02 
15:19:26.000000000 +0200
@@ -1,16 +1,16 @@
 # Translation of kfilemetadata6.po to Catalan (Valencian)
-# Copyright (C) 2014-2025 This_file_is_part_of_KDE
+# Copyright (C) 2014-2026 This_file_is_part_of_KDE
 # This file is distributed under the license LGPL version 2.1 or
 # version 3 or later versions approved by the membership of KDE e.V.
 #
-# SPDX-FileCopyrightText: 2014, 2015, 2016, 2017, 2018, 2019, 2022, 2023, 
2024, 2025 Josep M. Ferrer <[email protected]>
-# SPDX-FileCopyrightText: 2014, 2015 Antoni Bella Pérez 
<[email protected]>
+# SPDX-FileCopyrightText: 2014-2019, 2022-2026 Josep M. Ferrer 
<[email protected]>
+# SPDX-FileCopyrightText: 2014-2015 Antoni Bella Pérez <[email protected]>
 msgid ""
 msgstr ""
 "Project-Id-Version: kfilemetadata\n"
 "Report-Msgid-Bugs-To: https://bugs.kde.org\n";
 "POT-Creation-Date: 2025-11-17 11:49+0000\n"
-"PO-Revision-Date: 2025-06-27 08:18+0200\n"
+"PO-Revision-Date: 2026-09-06 19:02+0200\n"
 "Last-Translator: Josep M. Ferrer <[email protected]>\n"
 "Language-Team: Catalan <[email protected]>\n"
 "Language: ca@valencia\n"
@@ -19,7 +19,7 @@
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=n != 1;\n"
 "X-Accelerator-Marker: &\n"
-"X-Generator: Lokalize 22.12.3\n"
+"X-Generator: Lokalize 25.04.0\n"
 
 #: src/formatstrings.cpp:64
 #, kde-format
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kfilemetadata-6.30.0/po/ug/kfilemetadata6.po 
new/kfilemetadata-6.31.0/po/ug/kfilemetadata6.po
--- old/kfilemetadata-6.30.0/po/ug/kfilemetadata6.po    2026-09-04 
13:38:25.000000000 +0200
+++ new/kfilemetadata-6.31.0/po/ug/kfilemetadata6.po    2026-10-02 
15:19:26.000000000 +0200
@@ -8,7 +8,7 @@
 "Project-Id-Version: kfilemetadata\n"
 "Report-Msgid-Bugs-To: https://bugs.kde.org\n";
 "POT-Creation-Date: 2025-11-17 11:49+0000\n"
-"PO-Revision-Date: 2026-05-31 18:29-0400\n"
+"PO-Revision-Date: 2026-09-23 06:56+0900\n"
 "Last-Translator: Abduqadir Abliz <[email protected]>\n"
 "Language-Team: Uyghur <[email protected]>\n"
 "Language: ug\n"
@@ -22,7 +22,7 @@
 #, kde-format
 msgctxt "@label bitrate (per second)"
 msgid "%1/s"
-msgstr "%1/s"
+msgstr ""
 
 #: src/formatstrings.cpp:78
 #, kde-format
@@ -243,13 +243,13 @@
 #, kde-format
 msgctxt "Symbol of degree, no space"
 msgid "%1°"
-msgstr "%1°"
+msgstr ""
 
 #: src/formatstrings.cpp:145
 #, kde-format
 msgctxt "Focal length given in mm"
 msgid "%1 mm"
-msgstr "%1 mm"
+msgstr ""
 
 #: src/formatstrings.cpp:150
 #, kde-format
@@ -403,7 +403,7 @@
 #: src/propertyinfo.cpp:65
 msgctxt "@label EXIF"
 msgid "Manufacturer"
-msgstr ""
+msgstr "ئىشلەپچىقارغۇچى"
 
 #: src/propertyinfo.cpp:66
 msgctxt "@label EXIF"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kfilemetadata-6.30.0/src/CMakeLists.txt 
new/kfilemetadata-6.31.0/src/CMakeLists.txt
--- old/kfilemetadata-6.30.0/src/CMakeLists.txt 2026-09-04 13:38:25.000000000 
+0200
+++ new/kfilemetadata-6.31.0/src/CMakeLists.txt 2026-10-02 15:19:26.000000000 
+0200
@@ -103,6 +103,20 @@
 
 configure_file(config-kfilemetadata.h.in 
${CMAKE_CURRENT_BINARY_DIR}/config-kfilemetadata.h)
 
+ecm_add_installed_library_check(KF6FileMetaData
+    PACKAGE_NAME "KF6FileMetaData"
+    PACKAGE_TARGET_NAMESPACE "KF6::"
+)
+
+ecm_installed_library_check_include_strings(KF6FileMetaData
+    HEADERS ${KF6FileMetaData_CamelCase_HEADERS}
+    PREFIX KFileMetaData
+)
+
+ecm_installed_library_check_version_preprocessor_macros(KF6FileMetaData
+    PREFIX KFILEMETADATA
+)
+
 add_subdirectory(extractors)
 
 add_subdirectory(writers)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/kfilemetadata-6.30.0/src/extractors/exiv2extractor.cpp 
new/kfilemetadata-6.31.0/src/extractors/exiv2extractor.cpp
--- old/kfilemetadata-6.30.0/src/extractors/exiv2extractor.cpp  2026-09-04 
13:38:25.000000000 +0200
+++ new/kfilemetadata-6.31.0/src/extractors/exiv2extractor.cpp  2026-10-02 
15:19:26.000000000 +0200
@@ -91,7 +91,7 @@
     auto getIntegerValue = [&data](const Exiv2::ExifKey &key) -> 
std::optional<int64_t> {
         if (const auto it = data.findKey(key); it == data.end()) {
             return {};
-        } else if ((it->typeId() == Exiv2::signedLong) || (it->typeId() == 
Exiv2::signedShort)) {
+        } else if (it->count() && ((it->typeId() == Exiv2::signedLong) || 
(it->typeId() == Exiv2::signedShort))) {
 #if EXIV2_TEST_VERSION(0,28,0)
             return it->toInt64();
 #else
@@ -243,12 +243,18 @@
         return;
     }
 
-    if (image->pixelHeight()) {
-        result->add(Property::Height, image->pixelHeight());
+    try {
+        if (image->pixelHeight()) {
+            result->add(Property::Height, image->pixelHeight());
+        }
+    } catch (const Exiv2::Error& e) {
     }
 
-    if (image->pixelWidth()) {
-        result->add(Property::Width, image->pixelWidth());
+    try {
+        if (image->pixelWidth()) {
+            result->add(Property::Width, image->pixelWidth());
+        }
+    } catch (const Exiv2::Error& e) {
     }
 
     std::string comment = image->comment();
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/kfilemetadata-6.30.0/src/extractors/ffmpegextractor.cpp 
new/kfilemetadata-6.31.0/src/extractors/ffmpegextractor.cpp
--- old/kfilemetadata-6.30.0/src/extractors/ffmpegextractor.cpp 2026-09-04 
13:38:25.000000000 +0200
+++ new/kfilemetadata-6.31.0/src/extractors/ffmpegextractor.cpp 2026-10-02 
15:19:26.000000000 +0200
@@ -13,6 +13,8 @@
 #include "embeddedimagedata.h"
 #include "kfilemetadata_debug.h"
 
+#include <QRegularExpression>
+
 #ifdef __cplusplus
 #define __STDC_CONSTANT_MACROS
 #ifdef _STDINT_H
@@ -253,6 +255,64 @@
             int year = QString::fromUtf8(entry->value).toInt();
             result->add(Property::ReleaseYear, year);
         }
+
+        entry = av_dict_get(dict, "creation_time", nullptr, 0);
+        if (!entry) {
+            entry = av_dict_get(dict, "com.apple.quicktime.creationdate", 
nullptr, 0);
+        }
+        if (entry) {
+            const QDateTime date = 
QDateTime::fromString(QString::fromUtf8(entry->value), Qt::ISODate);
+            if (date.isValid()) {
+                result->add(Property::CreationDate, date);
+            }
+        }
+
+        // TODO support localized location names through three letter language 
name (e.g. location-eng)
+        entry = av_dict_get(dict, "location", nullptr, 0);
+        if (!entry) {
+            entry = av_dict_get(dict, "com.apple.quicktime.location.ISO6709", 
nullptr, 0);
+        }
+        if (entry) {
+            const QString location = QString::fromUtf8(entry->value);
+
+            // Format follows ISO 6709 Annex H: 
±latitude±longitude±elevation/crs_name
+            // Latitude/longitude is always in integral degrees (i.e. 2 
digit/3 digit) format
+            // Coordinate Reference System (crs) is omitted, though required
+            static const QRegularExpression 
iso6709rx(QStringLiteral(R"([+-]\d+(?:\.\d+)?)"));
+
+            auto matches = iso6709rx.globalMatch(location);
+            int i = 0;
+            while (matches.hasNext()) {
+                const auto match = matches.next();
+                bool ok;
+                const qreal value = match.captured(0).toFloat(&ok);
+                if (ok) {
+                    if (i == 0) {
+                        result->add(Property::PhotoGpsLatitude, value);
+                    } else if (i == 1) {
+                        result->add(Property::PhotoGpsLongitude, value);
+                    } else if (i == 2) { // elevation, optional
+                        result->add(Property::PhotoGpsAltitude, value);
+                    }
+                }
+                ++i;
+            }
+        }
+
+        entry = av_dict_get(dict, "com.apple.quicktime.make", nullptr, 0);
+        if (entry) {
+            result->add(Property::Manufacturer, 
QString::fromUtf8(entry->value));
+        }
+
+        entry = av_dict_get(dict, "com.apple.quicktime.model", nullptr, 0);
+        if (entry) {
+            result->add(Property::Model, QString::fromUtf8(entry->value));
+        }
+
+        entry = av_dict_get(dict, "com.apple.quicktime.software", nullptr, 0);
+        if (entry) {
+            result->add(Property::Generator, QString::fromUtf8(entry->value));
+        }
     }
 }
 

Reply via email to