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)); + } } }
