File indexing completed on 2025-03-09 03:57:01

0001 /* ============================================================
0002  *
0003  * This file is a part of digiKam project
0004  * https://www.digikam.org
0005  *
0006  * Date        : 2013-11-28
0007  * Description : a command line tool to test ExifTool output without Exiv2 translation.
0008  *
0009  * SPDX-FileCopyrightText: 2012-2024 by Gilles Caulier <caulier dot gilles at gmail dot com>
0010  *
0011  * SPDX-License-Identifier: GPL-2.0-or-later
0012  *
0013  * ============================================================ */
0014 
0015 // Qt includes
0016 
0017 #include <QString>
0018 #include <QStringList>
0019 #include <QTextStream>
0020 #include <QCoreApplication>
0021 #include <QVariant>
0022 #include <QObject>
0023 
0024 // Local includes
0025 
0026 #include "digikam_debug.h"
0027 #include "digikam_globals.h"
0028 #include "exiftoolparser.h"
0029 
0030 using namespace Digikam;
0031 
0032 int main(int argc, char** argv)
0033 {
0034     QCoreApplication app(argc, argv);
0035 
0036     if (argc != 2)
0037     {
0038         qCDebug(DIGIKAM_TESTS_LOG) << "exiftooloutput_cli - CLI tool to print ExifTool output without Exiv2 translation";
0039         qCDebug(DIGIKAM_TESTS_LOG) << "Usage: <image>";
0040         return -1;
0041     }
0042 
0043     // Create ExifTool parser instance.
0044 
0045     ExifToolParser* const parser = new ExifToolParser(qApp);
0046 
0047     // Read metadata from the file. Start ExifToolParser
0048 
0049     if (!parser->load(QString::fromUtf8(argv[1])))
0050     {
0051         return -1;
0052     }
0053 
0054     QString path                        = parser->currentPath();
0055     ExifToolParser::ExifToolData parsed = parser->currentData();
0056 
0057     qCDebug(DIGIKAM_TESTS_LOG).noquote() << "Source File:" << path;
0058 
0059     // Print returned and sorted tags.
0060 
0061     QString     output;
0062     QTextStream stream(&output);
0063     QStringList tagsLst;
0064 
0065     const int section1 = -60;   // ExifTool Tag name simplified
0066     const int section2 = -30;   // Tag value as string.
0067     QString sep        = QString().fill(QLatin1Char('-'), qAbs(section1 + section2) + 4);
0068 
0069     // Header
0070 
0071     stream << sep
0072            << QT_ENDL
0073            << QString::fromLatin1("%1").arg(QLatin1String("ExifTool::group0.name"), section1) << " | "
0074            << QString::fromLatin1("%1").arg(QLatin1String("String Value"),          section2)
0075            << QT_ENDL
0076            << sep
0077            << QT_ENDL;
0078 
0079     for (ExifToolParser::ExifToolData::const_iterator it = parsed.constBegin() ;
0080          it != parsed.constEnd() ; ++it)
0081     {
0082         QString tagNameExifTool = it.key();
0083         QString tagType         = it.value()[1].toString();
0084         QString data            = it.value()[0].toString();
0085 
0086         if (data.size() > -section2)
0087         {
0088             data = data.left(-section2 - 3) + QLatin1String("...");
0089         }
0090 
0091         tagsLst
0092                 << QString::fromLatin1("%1 | %2")
0093                 .arg(tagNameExifTool, section1)
0094                 .arg(data,            section2)
0095                ;
0096     }
0097 
0098     tagsLst.sort();
0099 
0100     Q_FOREACH (const QString& tag, tagsLst)
0101     {
0102         stream << tag << QT_ENDL;
0103     }
0104 
0105     stream << sep << QT_ENDL;
0106 
0107     qCDebug(DIGIKAM_TESTS_LOG).noquote() << output;
0108 
0109     return 0;
0110 }