From 222e119aa2eca2f7e5c881cf7e91f050684a6e13 Mon Sep 17 00:00:00 2001 From: Thiago Macieira Date: Wed, 18 Mar 2015 06:57:12 +0900 Subject: [PATCH] qtplugininfo: Default to printing the metadata in a nicer form Change-Id: I1a800c709d3543699131ffff13c3801cee682635 Reviewed-by: Friedemann Kleint --- src/qtplugininfo/qtplugininfo.cpp | 52 ++++++++++++++++++++++++++++++++++++++- 1 file changed, 51 insertions(+), 1 deletion(-) diff --git a/src/qtplugininfo/qtplugininfo.cpp b/src/qtplugininfo/qtplugininfo.cpp index f34ee26..39ffab9 100644 --- a/src/qtplugininfo/qtplugininfo.cpp +++ b/src/qtplugininfo/qtplugininfo.cpp @@ -40,9 +40,19 @@ #include #include #include +#include #include +enum PrintOption { + PrintIID = 0x01, + PrintClassName = 0x02, + PrintQtInfo = 0x04, + PrintUserData = 0x08 +}; +Q_DECLARE_FLAGS(PrintOptions, PrintOption) +Q_DECLARE_OPERATORS_FOR_FLAGS(PrintOptions) + int main(int argc, char** argv) { QCoreApplication app(argc, argv); @@ -51,6 +61,18 @@ int main(int argc, char** argv) QCommandLineParser parser; parser.setApplicationDescription(QStringLiteral("Qt5 plugin meta-data dumper")); + QCommandLineOption jsonFormatOption(QStringList() << "f" << "json-format", + QStringLiteral("Print JSON data as: indented, compact"), QStringLiteral("format")); + QCommandLineOption fullJsonOption("full-json", + QStringLiteral("Print the plugin metadata in JSON format")); + QCommandLineOption printOption(QStringList() << "p" << QStringLiteral("print"), + QStringLiteral("Print detail (iid, classname, qtinfo, userdata)"), QStringLiteral("detail")); + jsonFormatOption.setDefaultValue(QStringLiteral("indented")); + printOption.setDefaultValues(QStringList() << QStringLiteral("iid") << QStringLiteral("qtinfo") << QStringLiteral("userdata")); + + parser.addOption(fullJsonOption); + parser.addOption(jsonFormatOption); + parser.addOption(printOption); parser.addHelpOption(); parser.addVersionOption(); parser.addPositionalArgument(QStringLiteral("plugin"), QStringLiteral("Plug-in of which to read the meta data."), QStringLiteral("")); @@ -59,6 +81,19 @@ int main(int argc, char** argv) if (parser.positionalArguments().isEmpty()) parser.showHelp(1); + bool fullJson = parser.isSet(fullJsonOption); + QJsonDocument::JsonFormat jsonFormat = parser.value(jsonFormatOption) == "indented" ? QJsonDocument::Indented : QJsonDocument::Compact; + QStringList printOptionList = parser.values(printOption); + PrintOptions print; + if (printOptionList.contains("iid")) + print |= PrintIID; + if (printOptionList.contains("classname")) + print |= PrintClassName; + if (printOptionList.contains("qtinfo")) + print |= PrintQtInfo; + if (printOptionList.contains("userdata")) + print |= PrintUserData; + foreach (const QString &plugin, parser.positionalArguments()) { QByteArray pluginNativeName = QFile::encodeName(QDir::toNativeSeparators(plugin)); if (!QFile::exists(plugin)) { @@ -108,7 +143,22 @@ int main(int argc, char** argv) if (parser.positionalArguments().size() != 1) std::cout << pluginNativeName.constData() << ": "; - std::cout << QJsonDocument(metaData).toJson().constData(); + if (fullJson) { + std::cout << QJsonDocument(metaData).toJson(jsonFormat).constData(); + if (jsonFormat == QJsonDocument::Compact) + std::cout << std::endl; + } else { + if (print & PrintIID) + std::cout << "IID \"" << qPrintable(iid) << "\" "; + if (print & PrintClassName) + std::cout << "class " << qPrintable(className) << ' '; + if (print & PrintQtInfo) + std::cout << "Qt " << (version >> 16) << '.' << ((version >> 8) & 0xFF) << '.' << (version & 0xFF) + << (debug.toBool() ? " (debug)" : " (release)"); + std::cout << std::endl; + if (print & PrintUserData && userData.isObject()) + std::cout << "User Data: " << QJsonDocument(userData.toObject()).toJson().constData(); + } } return 0; -- 2.7.4