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 }