Hello community,

here is the log from the commit of package kfilemetadata5 for openSUSE:Factory 
checked in at 2019-01-21 10:19:52
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/kfilemetadata5 (Old)
 and      /work/SRC/openSUSE:Factory/.kfilemetadata5.new.28833 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "kfilemetadata5"

Mon Jan 21 10:19:52 2019 rev:67 rq:665803 version:5.54.0

Changes:
--------
--- /work/SRC/openSUSE:Factory/kfilemetadata5/kfilemetadata5.changes    
2018-12-19 13:41:00.787990797 +0100
+++ /work/SRC/openSUSE:Factory/.kfilemetadata5.new.28833/kfilemetadata5.changes 
2019-01-21 10:19:55.882100556 +0100
@@ -1,0 +2,23 @@
+Mon Jan 14 06:08:46 UTC 2019 - lbeltr...@kde.org
+
+- Update to 5.54.0
+  * New feature release
+  * For more details please see:
+  * https://www.kde.org/announcements/kde-frameworks-5.54.0.php
+- Changes since 5.53.0:
+  * Fix some warnings
+  * fail writing test if mime type is not supported by the extractor
+  * fix ape disc number extraction
+  * implement cover extraction for asf files
+  * extend list of supported mimetypes for embedded image extractor
+  * Refactor embedded image extractor for greater extensibility
+  * add missing wav mimetype
+  * Extract more tags from exif metadata (kde#341162)
+  * fix extraction of GPS altitude for exif data
+
+-------------------------------------------------------------------
+Sat Dec 15 14:21:02 UTC 2018 - Jan Engelhardt <jeng...@inai.de>
+
+- Use noun phrase in summaries.
+
+-------------------------------------------------------------------

Old:
----
  kfilemetadata-5.53.0.tar.xz

New:
----
  kfilemetadata-5.54.0.tar.xz

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

Other differences:
------------------
++++++ kfilemetadata5.spec ++++++
--- /var/tmp/diff_new_pack.Lhn1op/_old  2019-01-21 10:19:56.414100022 +0100
+++ /var/tmp/diff_new_pack.Lhn1op/_new  2019-01-21 10:19:56.414100022 +0100
@@ -1,7 +1,7 @@
 #
 # spec file for package kfilemetadata5
 #
-# Copyright (c) 2018 SUSE LINUX GmbH, Nuernberg, Germany.
+# Copyright (c) 2019 SUSE LINUX GmbH, Nuernberg, Germany.
 #
 # All modifications and additions to the file contributed by third parties
 # remain the property of their copyright owners, unless otherwise agreed
@@ -16,7 +16,7 @@
 #
 
 
-%define _tar_path 5.53
+%define _tar_path 5.54
 # Full KF5 version (e.g. 5.33.0)
 %{!?_kf5_version: %global _kf5_version %{version}}
 # Last major and minor KF5 version (e.g. 5.33)
@@ -24,9 +24,9 @@
 %bcond_without ffmpeg
 %bcond_without lang
 Name:           kfilemetadata5
-Version:        5.53.0
+Version:        5.54.0
 Release:        0
-Summary:        Extract Metadata
+Summary:        Library for extracting Metadata
 License:        GPL-2.0-or-later AND LGPL-2.1-or-later AND LGPL-3.0-only
 Group:          Development/Libraries/KDE
 URL:            https://www.kde.org

++++++ kfilemetadata-5.53.0.tar.xz -> kfilemetadata-5.54.0.tar.xz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kfilemetadata-5.53.0/CMakeLists.txt 
new/kfilemetadata-5.54.0/CMakeLists.txt
--- old/kfilemetadata-5.53.0/CMakeLists.txt     2018-12-01 15:55:12.000000000 
+0100
+++ new/kfilemetadata-5.54.0/CMakeLists.txt     2019-01-06 21:21:52.000000000 
+0100
@@ -1,11 +1,11 @@
-cmake_minimum_required(VERSION 3.0)
+cmake_minimum_required(VERSION 3.5)
 
-set(KF5_VERSION "5.53.0") # handled by release scripts
-set(KF5_DEP_VERSION "5.53.0") # handled by release scripts
+set(KF5_VERSION "5.54.0") # handled by release scripts
+set(KF5_DEP_VERSION "5.54.0") # handled by release scripts
 project(KFileMetaData VERSION ${KF5_VERSION})
 
 include(FeatureSummary)
-find_package(ECM 5.53.0  NO_MODULE)
+find_package(ECM 5.54.0  NO_MODULE)
 set_package_properties(ECM PROPERTIES TYPE REQUIRED DESCRIPTION "Extra CMake 
Modules." URL 
"https://projects.kde.org/projects/kdesupport/extra-cmake-modules";)
 feature_summary(WHAT REQUIRED_PACKAGES_NOT_FOUND 
FATAL_ON_MISSING_REQUIRED_PACKAGES)
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/kfilemetadata-5.53.0/autotests/embeddedimagedatatest.cpp 
new/kfilemetadata-5.54.0/autotests/embeddedimagedatatest.cpp
--- old/kfilemetadata-5.53.0/autotests/embeddedimagedatatest.cpp        
2018-12-01 15:55:12.000000000 +0100
+++ new/kfilemetadata-5.54.0/autotests/embeddedimagedatatest.cpp        
2019-01-06 21:21:52.000000000 +0100
@@ -55,6 +55,14 @@
 {
     QTest::addColumn<QString>("fileName");
 
+    QTest::addRow("aiff")
+            << QStringLiteral("test.aif")
+            ;
+
+    QTest::addRow("ape")
+            << QStringLiteral("test.ape")
+            ;
+
     QTest::addRow("opus")
             << QStringLiteral("test.opus")
             ;
@@ -79,6 +87,21 @@
             << QStringLiteral("test.mpc")
             ;
 
+    QTest::addRow("speex")
+            << QStringLiteral("test.spx")
+            ;
+
+    QTest::addRow("wav")
+            << QStringLiteral("test.wav")
+            ;
+
+    QTest::addRow("wavpack")
+            << QStringLiteral("test.wv")
+            ;
+
+    QTest::addRow("wma")
+            << QStringLiteral("test.wma")
+            ;
 }
 
 QTEST_GUILESS_MAIN(EmbeddedImageDataTest)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/kfilemetadata-5.53.0/autotests/exiv2extractortest.cpp 
new/kfilemetadata-5.54.0/autotests/exiv2extractortest.cpp
--- old/kfilemetadata-5.53.0/autotests/exiv2extractortest.cpp   2018-12-01 
15:55:12.000000000 +0100
+++ new/kfilemetadata-5.54.0/autotests/exiv2extractortest.cpp   2019-01-06 
21:21:52.000000000 +0100
@@ -45,11 +45,14 @@
     QCOMPARE(result.types().constFirst(), Type::Image);
 
     using namespace KFileMetaData::Property;
-    double lat = 41.4114341666667;
-    double lon = 2.1736409444444;
-    QCOMPARE(result.properties().value(PhotoGpsLatitude).toDouble(), lat);
-    QCOMPARE(result.properties().value(PhotoGpsLongitude).toDouble(), lon);
-    QCOMPARE(result.properties().value(PhotoGpsAltitude), QVariant());
+
+    QCOMPARE(result.properties().value(PhotoGpsLatitude).toDouble(), 41.411);
+    QCOMPARE(result.properties().value(PhotoGpsLongitude).toDouble(), 2.173);
+    QVERIFY(qAbs(result.properties().value(PhotoGpsAltitude).toDouble() - 
12.2) <  0.0001);
+    QCOMPARE(result.properties().value(Artist).toString(), 
QStringLiteral("Artist"));
+    QCOMPARE(result.properties().value(Description).toString(), 
QStringLiteral("Description"));
+    QCOMPARE(result.properties().value(Copyright).toString(), 
QStringLiteral("Copyright"));
+    QCOMPARE(result.properties().value(Generator).toString(), 
QStringLiteral("digiKam-5.9.0"));
 }
 
 QTEST_GUILESS_MAIN(Exiv2ExtractorTest)
Binary files old/kfilemetadata-5.53.0/autotests/samplefiles/test.jpg and 
new/kfilemetadata-5.54.0/autotests/samplefiles/test.jpg differ
Binary files old/kfilemetadata-5.53.0/autotests/samplefiles/test.spx and 
new/kfilemetadata-5.54.0/autotests/samplefiles/test.spx differ
Binary files old/kfilemetadata-5.53.0/autotests/samplefiles/test.wma and 
new/kfilemetadata-5.54.0/autotests/samplefiles/test.wma differ
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/kfilemetadata-5.53.0/autotests/taglibextractortest.cpp 
new/kfilemetadata-5.54.0/autotests/taglibextractortest.cpp
--- old/kfilemetadata-5.53.0/autotests/taglibextractortest.cpp  2018-12-01 
15:55:12.000000000 +0100
+++ new/kfilemetadata-5.54.0/autotests/taglibextractortest.cpp  2019-01-06 
21:21:52.000000000 +0100
@@ -279,7 +279,7 @@
     QCOMPARE(result.properties().value(Property::License), 
QVariant(QStringLiteral("License")));
     QCOMPARE(result.properties().value(Property::Lyrics), 
QVariant(QStringLiteral("Lyrics")));
     QCOMPARE(result.properties().value(Property::Channels).toInt(), 1);
-    QCOMPARE(result.properties().value(Property::DiscNumber).isValid(), false);
+    QCOMPARE(result.properties().value(Property::DiscNumber).toInt(), 1);
     QCOMPARE(result.properties().value(Property::Rating).toInt(), 4);
     QCOMPARE(result.properties().value(Property::ReplayGainAlbumGain), 
QVariant(-9.44));
     QCOMPARE(result.properties().value(Property::ReplayGainAlbumPeak), 
QVariant(1.099));
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kfilemetadata-5.53.0/autotests/taglibwritertest.cpp 
new/kfilemetadata-5.54.0/autotests/taglibwritertest.cpp
--- old/kfilemetadata-5.53.0/autotests/taglibwritertest.cpp     2018-12-01 
15:55:12.000000000 +0100
+++ new/kfilemetadata-5.54.0/autotests/taglibwritertest.cpp     2019-01-06 
21:21:52.000000000 +0100
@@ -65,6 +65,8 @@
 
     KFileMetaData::ExtractorCollection extractors;
     QList<KFileMetaData::Extractor*> extractorList = 
extractors.fetchExtractors(mimeType);
+    if (extractorList.isEmpty())
+        QFAIL("This mime type is not supported by the extractor. Likely a 
newer KDE Frameworks version is required.");
     KFileMetaData::Extractor* ex = extractorList.first();
     KFileMetaData::SimpleExtractionResult 
result(testFilePath(temporaryFileName), mimeType,
                                                  
KFileMetaData::ExtractionResult::ExtractMetaData);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kfilemetadata-5.53.0/po/da/kfilemetadata5.po 
new/kfilemetadata-5.54.0/po/da/kfilemetadata5.po
--- old/kfilemetadata-5.53.0/po/da/kfilemetadata5.po    2018-12-01 
15:55:12.000000000 +0100
+++ new/kfilemetadata-5.54.0/po/da/kfilemetadata5.po    2019-01-06 
21:21:52.000000000 +0100
@@ -7,7 +7,7 @@
 "Project-Id-Version: \n"
 "Report-Msgid-Bugs-To: http://bugs.kde.org\n";
 "POT-Creation-Date: 2018-11-17 03:48+0100\n"
-"PO-Revision-Date: 2018-07-12 09:47+0100\n"
+"PO-Revision-Date: 2018-12-06 20:14+0100\n"
 "Last-Translator: Martin Schlander <mschlan...@opensuse.org>\n"
 "Language-Team: Danish <kde-i18n-...@kde.org>\n"
 "Language: da\n"
@@ -393,25 +393,25 @@
 #, kde-format
 msgctxt "@label"
 msgid "Replay Gain Album Peak"
-msgstr ""
+msgstr "Replay Gain album-peak"
 
 #: src/propertyinfo.cpp:443
 #, kde-format
 msgctxt "@label"
 msgid "Replay Gain Album Gain"
-msgstr ""
+msgstr "Replay Gain album-peak"
 
 #: src/propertyinfo.cpp:449
 #, kde-format
 msgctxt "@label"
 msgid "Replay Gain Track Peak"
-msgstr ""
+msgstr "Replay Gain spor-peak"
 
 #: src/propertyinfo.cpp:455
 #, kde-format
 msgctxt "@label"
 msgid "Replay Gain Track Gain"
-msgstr ""
+msgstr "Replay Gain spor-peak"
 
 #: src/propertyinfo.cpp:461
 #, kde-format
@@ -462,9 +462,7 @@
 msgstr "Oprettelse af skabelon"
 
 #: src/propertyinfo.cpp:517
-#, fuzzy, kde-format
-#| msgctxt "@label the URL a file was originally downloded from"
-#| msgid "Downloaded From"
+#, kde-format
 msgctxt "@label the URL a file was originally downloaded from"
 msgid "Downloaded From"
 msgstr "Downloadet fra"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kfilemetadata-5.53.0/po/es/kfilemetadata5.po 
new/kfilemetadata-5.54.0/po/es/kfilemetadata5.po
--- old/kfilemetadata-5.53.0/po/es/kfilemetadata5.po    2018-12-01 
15:55:12.000000000 +0100
+++ new/kfilemetadata-5.54.0/po/es/kfilemetadata5.po    2019-01-06 
21:21:52.000000000 +0100
@@ -9,7 +9,7 @@
 "Project-Id-Version: kfilemetadata\n"
 "Report-Msgid-Bugs-To: http://bugs.kde.org\n";
 "POT-Creation-Date: 2018-11-17 03:48+0100\n"
-"PO-Revision-Date: 2018-11-24 04:48+0100\n"
+"PO-Revision-Date: 2018-12-09 22:22+0100\n"
 "Last-Translator: Eloy Cuadra <ecua...@eloihr.net>\n"
 "Language-Team: Spanish <kde-l10n...@kde.org>\n"
 "Language: es\n"
@@ -395,25 +395,25 @@
 #, kde-format
 msgctxt "@label"
 msgid "Replay Gain Album Peak"
-msgstr ""
+msgstr "Replay Gain Album Peak"
 
 #: src/propertyinfo.cpp:443
 #, kde-format
 msgctxt "@label"
 msgid "Replay Gain Album Gain"
-msgstr ""
+msgstr "Replay Gain Album Gain"
 
 #: src/propertyinfo.cpp:449
 #, kde-format
 msgctxt "@label"
 msgid "Replay Gain Track Peak"
-msgstr ""
+msgstr "Replay Gain Track Peak"
 
 #: src/propertyinfo.cpp:455
 #, kde-format
 msgctxt "@label"
 msgid "Replay Gain Track Gain"
-msgstr ""
+msgstr "Replay Gain Track Gain"
 
 #: src/propertyinfo.cpp:461
 #, kde-format
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kfilemetadata-5.53.0/po/pl/kfilemetadata5.po 
new/kfilemetadata-5.54.0/po/pl/kfilemetadata5.po
--- old/kfilemetadata-5.53.0/po/pl/kfilemetadata5.po    2018-12-01 
15:55:12.000000000 +0100
+++ new/kfilemetadata-5.54.0/po/pl/kfilemetadata5.po    2019-01-06 
21:21:52.000000000 +0100
@@ -7,7 +7,7 @@
 "Project-Id-Version: \n"
 "Report-Msgid-Bugs-To: http://bugs.kde.org\n";
 "POT-Creation-Date: 2018-11-17 03:48+0100\n"
-"PO-Revision-Date: 2018-10-14 11:28+0100\n"
+"PO-Revision-Date: 2018-12-24 06:00+0100\n"
 "Last-Translator: Łukasz Wojniłowicz <lukasz.wojnilow...@gmail.com>\n"
 "Language-Team: Polish <kde-i18n-...@kde.org>\n"
 "Language: pl\n"
@@ -463,9 +463,7 @@
 msgstr "Tworzenie szablonu"
 
 #: src/propertyinfo.cpp:517
-#, fuzzy, kde-format
-#| msgctxt "@label the URL a file was originally downloded from"
-#| msgid "Downloaded From"
+#, kde-format
 msgctxt "@label the URL a file was originally downloaded from"
 msgid "Downloaded From"
 msgstr "Pobrano z"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kfilemetadata-5.53.0/po/pt_BR/kfilemetadata5.po 
new/kfilemetadata-5.54.0/po/pt_BR/kfilemetadata5.po
--- old/kfilemetadata-5.53.0/po/pt_BR/kfilemetadata5.po 2018-12-01 
15:55:12.000000000 +0100
+++ new/kfilemetadata-5.54.0/po/pt_BR/kfilemetadata5.po 2019-01-06 
21:21:52.000000000 +0100
@@ -1,17 +1,17 @@
 # Translation of kfilemetadata5.po to Brazilian Portuguese
-# Copyright (C) 2014-2018 This_file_is_part_of_KDE
+# Copyright (C) 2014-2019 This_file_is_part_of_KDE
 # This file is distributed under the same license as the PACKAGE package.
 #
-# André Marcelo Alvarenga <alvare...@kde.org>, 2014, 2015, 2016, 2018.
+# André Marcelo Alvarenga <alvare...@kde.org>, 2014, 2015, 2016, 2018, 2019.
 # Luiz Fernando Ranghetti <elchev...@opensuse.org>, 2017, 2018.
 msgid ""
 msgstr ""
 "Project-Id-Version: kfilemetadata5\n"
 "Report-Msgid-Bugs-To: http://bugs.kde.org\n";
 "POT-Creation-Date: 2018-11-17 03:48+0100\n"
-"PO-Revision-Date: 2018-11-30 11:20-0200\n"
-"Last-Translator: Luiz Fernando Ranghetti <elchev...@opensuse.org>\n"
-"Language-Team: Portuguese <kde-i18n-pt...@kde.org>\n"
+"PO-Revision-Date: 2019-01-01 10:56-0300\n"
+"Last-Translator: André Marcelo Alvarenga <alvare...@kde.org>\n"
+"Language-Team: Brazilian Portuguese <kde-i18n-pt...@kde.org>\n"
 "Language: pt_BR\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -107,7 +107,7 @@
 #, kde-format
 msgctxt "@label"
 msgid "Document Generated By"
-msgstr "Documento gerador por"
+msgstr "Documento gerado por"
 
 #: src/propertyinfo.cpp:148
 #, kde-format
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kfilemetadata-5.53.0/po/zh_CN/kfilemetadata5.po 
new/kfilemetadata-5.54.0/po/zh_CN/kfilemetadata5.po
--- old/kfilemetadata-5.53.0/po/zh_CN/kfilemetadata5.po 2018-12-01 
15:55:12.000000000 +0100
+++ new/kfilemetadata-5.54.0/po/zh_CN/kfilemetadata5.po 2019-01-06 
21:21:52.000000000 +0100
@@ -10,7 +10,7 @@
 "Project-Id-Version: kdeorg\n"
 "Report-Msgid-Bugs-To: http://bugs.kde.org\n";
 "POT-Creation-Date: 2018-11-17 03:48+0100\n"
-"PO-Revision-Date: 2018-11-12 09:13\n"
+"PO-Revision-Date: 2019-01-05 20:42\n"
 "Last-Translator: guoyunhe <i...@guoyunhe.me>\n"
 "Language-Team: Chinese Simplified\n"
 "Language: zh_CN\n"
@@ -72,12 +72,10 @@
 msgstr "评论"
 
 #: src/propertyinfo.cpp:97
-#, fuzzy, kde-format
-#| msgctxt "@label"
-#| msgid "Duration"
+#, kde-format
 msgctxt "@label"
 msgid "Description"
-msgstr "时长"
+msgstr "描述"
 
 #: src/propertyinfo.cpp:104
 #, kde-format
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kfilemetadata-5.53.0/po/zh_TW/kfilemetadata5.po 
new/kfilemetadata-5.54.0/po/zh_TW/kfilemetadata5.po
--- old/kfilemetadata-5.53.0/po/zh_TW/kfilemetadata5.po 2018-12-01 
15:55:12.000000000 +0100
+++ new/kfilemetadata-5.54.0/po/zh_TW/kfilemetadata5.po 2019-01-06 
21:21:52.000000000 +0100
@@ -9,9 +9,9 @@
 "Project-Id-Version: \n"
 "Report-Msgid-Bugs-To: http://bugs.kde.org\n";
 "POT-Creation-Date: 2018-11-17 03:48+0100\n"
-"PO-Revision-Date: 2018-10-30 23:20+0800\n"
+"PO-Revision-Date: 2018-12-02 18:47+0800\n"
 "Last-Translator: pan93412 <pan93...@gmail.com>\n"
-"Language-Team: Chinese <kde-i18n-...@kde.org>\n"
+"Language-Team: Chinese <zh-l...@linux.org.tw>\n"
 "Language: zh_TW\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -68,12 +68,10 @@
 msgstr "註解"
 
 #: src/propertyinfo.cpp:97
-#, fuzzy, kde-format
-#| msgctxt "@label"
-#| msgid "Duration"
+#, kde-format
 msgctxt "@label"
 msgid "Description"
-msgstr "期間"
+msgstr "描述"
 
 #: src/propertyinfo.cpp:104
 #, kde-format
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kfilemetadata-5.53.0/src/embeddedimagedata.cpp 
new/kfilemetadata-5.54.0/src/embeddedimagedata.cpp
--- old/kfilemetadata-5.53.0/src/embeddedimagedata.cpp  2018-12-01 
15:55:12.000000000 +0100
+++ new/kfilemetadata-5.54.0/src/embeddedimagedata.cpp  2019-01-06 
21:21:52.000000000 +0100
@@ -34,6 +34,15 @@
 #include <attachedpictureframe.h>
 #include <mp4tag.h>
 #include <xiphcomment.h>
+#include <apefile.h>
+#include <apetag.h>
+#include <wavpackfile.h>
+#include <speexfile.h>
+#include <wavfile.h>
+#include <aifffile.h>
+#include <asffile.h>
+#include <asfattribute.h>
+#include <asfpicture.h>
 
 #include <QMimeDatabase>
 #include <QDebug>
@@ -45,6 +54,11 @@
 public:
     QMimeDatabase mMimeDatabase;
     QByteArray getFrontCover(const QString &fileUrl, const QString &mimeType) 
const;
+    QByteArray getFrontCoverFromID3(TagLib::ID3v2::Tag* Id3Tags) const;
+    QByteArray getFrontCoverFromFlacPicture(TagLib::List<TagLib::FLAC::Picture 
*> lstPic) const;
+    QByteArray getFrontCoverFromMp4(TagLib::MP4::Tag* mp4Tags) const;
+    QByteArray getFrontCoverFromApe(TagLib::APE::Tag* apeTags) const;
+    QByteArray getFrontCoverFromAsf(TagLib::ASF::Tag* asfTags) const;
     static const QStringList mMimetypes;
 };
 
@@ -56,10 +70,18 @@
     QStringLiteral("audio/mpeg3"),
     QStringLiteral("audio/ogg"),
     QStringLiteral("audio/opus"),
+    QStringLiteral("audio/speex"),
+    QStringLiteral("audio/wav"),
+    QStringLiteral("audio/x-aiff"),
+    QStringLiteral("audio/x-ape"),
     QStringLiteral("audio/x-mpeg"),
+    QStringLiteral("audio/x-ms-wma"),
     QStringLiteral("audio/x-musepack"),
     QStringLiteral("audio/x-opus+ogg"),
+    QStringLiteral("audio/x-speex"),
     QStringLiteral("audio/x-vorbis+ogg"),
+    QStringLiteral("audio/x-wav"),
+    QStringLiteral("audio/x-wavpack"),
 };
 
 EmbeddedImageData::EmbeddedImageData()
@@ -106,93 +128,162 @@
 
         // Handling multiple tags in mpeg files.
         TagLib::MPEG::File mpegFile(&stream, 
TagLib::ID3v2::FrameFactory::instance(), true);
-        if (!mpegFile.ID3v2Tag() || mpegFile.ID3v2Tag()->isEmpty()) {
-            return QByteArray();
+        if (mpegFile.ID3v2Tag()) {
+            return getFrontCoverFromID3(mpegFile.ID3v2Tag());
         }
 
-        TagLib::ID3v2::FrameList lstID3v2;
-        // Attached Front Picture.
-        lstID3v2 = mpegFile.ID3v2Tag()->frameListMap()["APIC"];
-        if (!lstID3v2.isEmpty()) {
-            for (TagLib::ID3v2::FrameList::ConstIterator it = 
lstID3v2.begin(); it != lstID3v2.end(); ++it) {
-                auto *frontCoverFrame = 
static_cast<TagLib::ID3v2::AttachedPictureFrame *>(*it);
-                if (frontCoverFrame->type() == frontCoverFrame->FrontCover) {
-                    return QByteArray(frontCoverFrame->picture().data(), 
frontCoverFrame->picture().size());
-                }
-            }
+    } else if (mimeType == QLatin1String("audio/x-aiff")) {
+
+        TagLib::RIFF::AIFF::File aiffFile(&stream, true);
+        if (aiffFile.hasID3v2Tag()) {
+            return getFrontCoverFromID3(aiffFile.tag());
+        }
+
+    } else if ((mimeType == QLatin1String("audio/wav"))
+               || (mimeType == QLatin1String("audio/x-wav"))) {
+
+        TagLib::RIFF::WAV::File wavFile(&stream, true);
+        if (wavFile.hasID3v2Tag()) {
+            return getFrontCoverFromID3(wavFile.ID3v2Tag());
         }
 
     } else if (mimeType == QLatin1String("audio/mp4")) {
 
         TagLib::MP4::File mp4File(&stream, true);
-        if (!mp4File.tag() || mp4File.tag()->isEmpty()) {
-            return QByteArray();
-        }
-        TagLib::MP4::Item coverArtItem = mp4File.tag()->item("covr");
-        if (coverArtItem.isValid())
-        {
-            TagLib::MP4::CoverArtList coverArtList = 
coverArtItem.toCoverArtList();
-            TagLib::MP4::CoverArt& frontCover = coverArtList.front();
-            return QByteArray(frontCover.data().data(), 
frontCover.data().size());
+        if (mp4File.tag()) {
+            return getFrontCoverFromMp4(mp4File.tag());
         }
 
     } else if (mimeType == QLatin1String("audio/x-musepack")) {
 
         TagLib::MPC::File mpcFile(&stream, true);
-        if (!mpcFile.tag() || mpcFile.tag()->isEmpty()) {
-            return QByteArray();
+        if (mpcFile.APETag()) {
+            return getFrontCoverFromApe(mpcFile.APETag());
+        }
+
+    } else if (mimeType == QLatin1String("audio/x-ape")) {
+
+        TagLib::APE::File apeFile(&stream, true);
+        if (apeFile.hasAPETag()) {
+            return getFrontCoverFromApe(apeFile.APETag());
+        }
+
+    } else if (mimeType == QLatin1String("audio/x-wavpack")) {
+
+        TagLib::WavPack::File wavpackFile(&stream, true);
+        if (wavpackFile.hasAPETag()) {
+            return getFrontCoverFromApe(wavpackFile.APETag());
         }
 
-        TagLib::APE::ItemListMap lstMusepack = mpcFile.APETag()->itemListMap();
-        TagLib::APE::ItemListMap::ConstIterator itMPC;
+    } else if (mimeType == QLatin1String("audio/x-ms-wma")) {
 
-        /* The cover art tag for APEv2 tags starts with the filename as string
-         * with zero termination followed by the actual picture data */
-        itMPC = lstMusepack.find("COVER ART (FRONT)");
-        if (itMPC != lstMusepack.end()) {
-            TagLib::ByteVector pictureData = (*itMPC).second.binaryData();
-            int dataPosition = pictureData.find('\0') + 1;
-            return QByteArray(pictureData.data() + dataPosition, 
pictureData.size() - dataPosition);
+        TagLib::ASF::File asfFile(&stream, true);
+        TagLib::ASF::Tag* asfTags = 
dynamic_cast<TagLib::ASF::Tag*>(asfFile.tag());
+        if (asfTags) {
+            return getFrontCoverFromAsf(asfTags);
         }
 
     } else if (mimeType == QLatin1String("audio/flac")) {
 
         TagLib::FLAC::File flacFile(&stream, 
TagLib::ID3v2::FrameFactory::instance(), true);
-        TagLib::List<TagLib::FLAC::Picture *> lstPic = flacFile.pictureList();
+        return getFrontCoverFromFlacPicture(flacFile.pictureList());
+
+    } else if ((mimeType == QLatin1String("audio/ogg"))
+               || (mimeType == QLatin1String("audio/x-vorbis+ogg"))) {
+
+        TagLib::Ogg::Vorbis::File oggFile(&stream, true);
+        if (oggFile.tag()) {
+            return getFrontCoverFromFlacPicture(oggFile.tag()->pictureList());
+        }
+
+    }
+    else if ((mimeType == QLatin1String("audio/opus"))
+             || (mimeType == QLatin1String("audio/x-opus+ogg"))) {
+
+        TagLib::Ogg::Opus::File opusFile(&stream, true);
+        if (opusFile.tag()) {
+            return getFrontCoverFromFlacPicture(opusFile.tag()->pictureList());
+        }
+
+    } else if (mimeType == QLatin1String("audio/speex") || mimeType == 
QLatin1String("audio/x-speex")) {
+
+        TagLib::Ogg::Speex::File speexFile(&stream, true);
+        if (speexFile.tag()) {
+            return 
getFrontCoverFromFlacPicture(speexFile.tag()->pictureList());
+        }
+
+    }
+    return QByteArray();
+}
+
+QByteArray
+EmbeddedImageData::Private::getFrontCoverFromID3(TagLib::ID3v2::Tag* Id3Tags) 
const
+{
+    TagLib::ID3v2::FrameList lstID3v2;
+    // Attached Front Picture.
+    lstID3v2 = Id3Tags->frameListMap()["APIC"];
+    for (const auto& frame : qAsConst(lstID3v2))
+    {
+        const auto *frontCoverFrame = 
static_cast<TagLib::ID3v2::AttachedPictureFrame *>(frame);
+        if (frontCoverFrame->type() == frontCoverFrame->FrontCover) {
+            return QByteArray(frontCoverFrame->picture().data(), 
frontCoverFrame->picture().size());
+        }
+    }
+    return QByteArray();
+}
+
+QByteArray
+EmbeddedImageData::Private::getFrontCoverFromFlacPicture(TagLib::List<TagLib::FLAC::Picture
 *> lstPic) const
+{
+    for (const auto &picture : qAsConst(lstPic)) {
+        if (picture->type() == picture->FrontCover) {
+            return QByteArray(picture->data().data(), picture->data().size());
+        }
+    }
+    return QByteArray();
+}
 
-        if (!lstPic.isEmpty()) {
-            for (TagLib::List<TagLib::FLAC::Picture *>::Iterator it = 
lstPic.begin(); it != lstPic.end(); ++it) {
-                TagLib::FLAC::Picture *picture = *it;
-                if (picture->type() == picture->FrontCover) {
-                    return QByteArray(picture->data().data(), 
picture->data().size());
-                }
-            }
-        }
-
-    } else {
-
-        TagLib::List<TagLib::FLAC::Picture *> lstPic;
-        if ((mimeType == QLatin1String("audio/ogg"))
-             || (mimeType == QLatin1String("audio/x-vorbis+ogg"))) {
-            TagLib::Ogg::Vorbis::File oggFile(&stream, true);
-            if (oggFile.tag() && !oggFile.tag()->isEmpty()) {
-                lstPic = oggFile.tag()->pictureList();
-            }
-        }
-        if ((mimeType == QLatin1String("audio/opus"))
-                || (mimeType == QLatin1String("audio/x-opus+ogg"))) {
-            TagLib::Ogg::Opus::File opusFile(&stream, true);
-            if (opusFile.tag() && !opusFile.tag()->isEmpty()) {
-                lstPic = opusFile.tag()->pictureList();
-            }
-        }
-        if (!lstPic.isEmpty()) {
-            for (TagLib::List<TagLib::FLAC::Picture *>::Iterator it = 
lstPic.begin(); it != lstPic.end(); ++it) {
-                TagLib::FLAC::Picture *picture = *it;
-                if (picture->type() == picture->FrontCover) {
-                    return QByteArray(picture->data().data(), 
picture->data().size());
-                }
-            }
+QByteArray
+EmbeddedImageData::Private::getFrontCoverFromMp4(TagLib::MP4::Tag* mp4Tags) 
const
+{
+    TagLib::MP4::Item coverArtItem = mp4Tags->item("covr");
+    if (coverArtItem.isValid())
+    {
+        TagLib::MP4::CoverArtList coverArtList = coverArtItem.toCoverArtList();
+        TagLib::MP4::CoverArt& frontCover = coverArtList.front();
+        return QByteArray(frontCover.data().data(), frontCover.data().size());
+    }
+    return QByteArray();
+}
+
+QByteArray
+EmbeddedImageData::Private::getFrontCoverFromApe(TagLib::APE::Tag* apeTags) 
const
+{
+    TagLib::APE::ItemListMap lstApe = apeTags->itemListMap();
+    TagLib::APE::ItemListMap::ConstIterator itApe;
+
+    /* The cover art tag for APEv2 tags starts with the filename as string
+     * with zero termination followed by the actual picture data */
+    itApe = lstApe.find("COVER ART (FRONT)");
+    if (itApe != lstApe.end()) {
+        TagLib::ByteVector pictureData = (*itApe).second.binaryData();
+        int position = pictureData.find('\0');
+        if (position >= 0) {
+            position += 1;
+            return QByteArray(pictureData.data() + position, 
pictureData.size() - position);
+        }
+    }
+    return QByteArray();
+}
+QByteArray
+EmbeddedImageData::Private::getFrontCoverFromAsf(TagLib::ASF::Tag* asfTags) 
const
+{
+    TagLib::ASF::AttributeList lstASF = asfTags->attribute("WM/Picture");
+    for (const auto& attribute : qAsConst(lstASF)) {
+        TagLib::ASF::Picture picture = attribute.toPicture();
+        if (picture.type() == TagLib::ASF::Picture::FrontCover) {
+            TagLib::ByteVector pictureData = picture.picture();
+            return QByteArray(pictureData.data(), pictureData.size());
         }
     }
     return QByteArray();
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/kfilemetadata-5.53.0/src/extractors/exiv2extractor.cpp 
new/kfilemetadata-5.54.0/src/extractors/exiv2extractor.cpp
--- old/kfilemetadata-5.53.0/src/extractors/exiv2extractor.cpp  2018-12-01 
15:55:12.000000000 +0100
+++ new/kfilemetadata-5.54.0/src/extractors/exiv2extractor.cpp  2019-01-06 
21:21:52.000000000 +0100
@@ -176,6 +176,10 @@
 
     add(result, data, Property::ImageMake, "Exif.Image.Make", 
QVariant::String);
     add(result, data, Property::ImageModel, "Exif.Image.Model", 
QVariant::String);
+    add(result, data, Property::Description, "Exif.Image.ImageDescription", 
QVariant::String);
+    add(result, data, Property::Artist, "Exif.Image.Artist", QVariant::String);
+    add(result, data, Property::Copyright, "Exif.Image.Copyright", 
QVariant::String);
+    add(result, data, Property::Generator, "Exif.Image.Software", 
QVariant::String);
     add(result, data, Property::ImageDateTime, "Exif.Image.DateTime", 
QVariant::DateTime);
     add(result, data, Property::ImageOrientation, "Exif.Image.Orientation", 
QVariant::Int);
     add(result, data, Property::PhotoFlash, "Exif.Photo.Flash", QVariant::Int);
@@ -196,7 +200,7 @@
 
     double latitude = fetchGpsDouble(data, "Exif.GPSInfo.GPSLatitude");
     double longitude = fetchGpsDouble(data, "Exif.GPSInfo.GPSLongitude");
-    double altitude = fetchGpsDouble(data, "Exif.GPSInfo.GPSAltitude");
+    double altitude = fetchGpsAltitude(data);
 
     QByteArray latRef = fetchByteArray(data, "Exif.GPSInfo.GPSLatitudeRef");
     if (!latRef.isEmpty() && latRef[0] == 'S')
@@ -206,15 +210,15 @@
     if (!longRef.isEmpty() && longRef[0] == 'W')
         longitude *= -1;
 
-    if (latitude) {
+    if (latitude != 0.0) {
         result->add(Property::PhotoGpsLatitude, latitude);
     }
 
-    if (longitude) {
+    if (longitude != 0.0) {
         result->add(Property::PhotoGpsLongitude, longitude);
     }
 
-    if (altitude) {
+    if (altitude != 0.0) {
         result->add(Property::PhotoGpsAltitude, altitude);
     }
 }
@@ -241,7 +245,7 @@
         n = (*it).toRational(0).first;
         d = (*it).toRational(0).second;
 
-        if (d == 0) {
+        if (d == 0.0) {
             return 0.0;
         }
 
@@ -250,7 +254,7 @@
         n = (*it).toRational(1).first;
         d = (*it).toRational(1).second;
 
-        if (d == 0) {
+        if (d == 0.0) {
             return deg;
         }
 
@@ -262,7 +266,7 @@
         n = (*it).toRational(2).first;
         d = (*it).toRational(2).second;
 
-        if (d == 0) {
+        if (d == 0.0) {
             return deg;
         }
 
@@ -277,6 +281,23 @@
     return 0.0;
 }
 
+double Exiv2Extractor::fetchGpsAltitude(const Exiv2::ExifData& data)
+{
+    double alt = 0.0;
+    Exiv2::ExifData::const_iterator it = 
data.findKey(Exiv2::ExifKey("Exif.GPSInfo.GPSAltitude"));
+    if (it != data.end()) {
+        alt = it->value().toFloat();
+        it = data.findKey(Exiv2::ExifKey("Exif.GPSInfo.GPSAltitudeRef"));
+        if (it != data.end()) {
+            auto altRef = it->value().toLong();
+            if (altRef) {
+                alt = alt * -1;
+            }
+        }
+    }
+    return alt;
+}
+
 QByteArray Exiv2Extractor::fetchByteArray(const Exiv2::ExifData& data, const 
char* name)
 {
     Exiv2::ExifData::const_iterator it = data.findKey(Exiv2::ExifKey(name));
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kfilemetadata-5.53.0/src/extractors/exiv2extractor.h 
new/kfilemetadata-5.54.0/src/extractors/exiv2extractor.h
--- old/kfilemetadata-5.53.0/src/extractors/exiv2extractor.h    2018-12-01 
15:55:12.000000000 +0100
+++ new/kfilemetadata-5.54.0/src/extractors/exiv2extractor.h    2019-01-06 
21:21:52.000000000 +0100
@@ -45,6 +45,7 @@
              const char* name, QVariant::Type type);
 
     double fetchGpsDouble(const Exiv2::ExifData& data, const char* name);
+    double fetchGpsAltitude(const Exiv2::ExifData& data);
     QByteArray fetchByteArray(const Exiv2::ExifData& data, const char* name);
 };
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/kfilemetadata-5.53.0/src/extractors/taglibextractor.cpp 
new/kfilemetadata-5.54.0/src/extractors/taglibextractor.cpp
--- old/kfilemetadata-5.53.0/src/extractors/taglibextractor.cpp 2018-12-01 
15:55:12.000000000 +0100
+++ new/kfilemetadata-5.54.0/src/extractors/taglibextractor.cpp 2019-01-06 
21:21:52.000000000 +0100
@@ -72,6 +72,7 @@
     QStringLiteral("audio/x-opus+ogg"),
     QStringLiteral("audio/x-speex"),
     QStringLiteral("audio/x-vorbis+ogg"),
+    QStringLiteral("audio/x-wav"),
     QStringLiteral("audio/x-wavpack"),
 };
 
@@ -455,7 +456,11 @@
         data.language += (*itApe).second.toString();
     }
 
-    itApe = lstApe.find("DISCNUMBER");
+
+    itApe = lstApe.find("DISC");
+    if (itApe == lstApe.end()) {
+        itApe = lstApe.find("DISCNUMBER");
+    }
     if (itApe != lstApe.end()) {
         data.discNumber = (*itApe).second.toString().toInt();
     }
@@ -792,7 +797,8 @@
         if (mpegFile.hasID3v2Tag()) {
             extractId3Tags(mpegFile.ID3v2Tag(), data);
         }
-    } else if ((mimeType == QLatin1String("audio/x-aiff")) || (mimeType == 
QLatin1String("audio/wav"))) {
+    } else if ((mimeType == QLatin1String("audio/x-aiff")) || (mimeType == 
QLatin1String("audio/wav"))
+               || (mimeType == QLatin1String("audio/x-wav"))) {
         /* For some reason, TagLib::RIFF::AIFF::File and 
TagLib::RIFF::WAV::File tag() return
          * only an invalid pointer. Use the dynamic_cast instead. */
         TagLib::ID3v2::Tag* ID3v2Tag = dynamic_cast<TagLib::ID3v2::Tag*>(tags);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kfilemetadata-5.53.0/src/writercollection.cpp 
new/kfilemetadata-5.54.0/src/writercollection.cpp
--- old/kfilemetadata-5.53.0/src/writercollection.cpp   2018-12-01 
15:55:12.000000000 +0100
+++ new/kfilemetadata-5.54.0/src/writercollection.cpp   2019-01-06 
21:21:52.000000000 +0100
@@ -85,7 +85,7 @@
         }
 
         const QStringList entryList = dir.entryList(QDir::Files | 
QDir::NoDotAndDotDot);
-        Q_FOREACH (const QString& fileName, entryList) {
+        for (const QString& fileName : entryList) {
             // Make sure the same plugin is not loaded twice, even if it
             // installed in two different locations
             if (plugins.contains(fileName))
@@ -114,8 +114,8 @@
         QPluginLoader loader(pluginPath);
 
         if (!loader.load()) {
-            qWarning() << "Could not create Writer: " << pluginPath;
-            qWarning() << loader.errorString();
+            qCWarning(KFILEMETADATA_LOG) << "Could not create Writer: " << 
pluginPath;
+            qCWarning(KFILEMETADATA_LOG) << loader.errorString();
             continue;
         }
 


Reply via email to