Qt
Internal/Contributor docs for the Qt SDK. <b>Note:</b> These are NOT official API docs; those are found <a href='https://doc.qt.io/'>here</a>.
Loading...
Searching...
No Matches
collectjson.cpp
Go to the documentation of this file.
1// Copyright (C) 2018 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
3
4#include <qfile.h>
5#include <qjsonarray.h>
6#include <qjsondocument.h>
7#include <qjsonobject.h>
8#include <qhashfunctions.h>
9#include <qstringlist.h>
10#include <cstdlib>
11
12static bool readFromDevice(QIODevice *device, QJsonArray *allMetaObjects)
13{
14 const QByteArray contents = device->readAll();
15 if (contents.isEmpty())
16 return true;
17
20 if (error.error != QJsonParseError::NoError) {
21 fprintf(stderr, "%s at %d\n", error.errorString().toUtf8().constData(), error.offset);
22 return false;
23 }
24
25 allMetaObjects->append(metaObjects.object());
26 return true;
27}
28
29int collectJson(const QStringList &jsonFiles, const QString &outputFile, bool skipStdIn)
30{
32
34 if (outputFile.isEmpty()) {
35 if (!output.open(stdout, QIODevice::WriteOnly)) {
36 fprintf(stderr, "Error opening stdout for writing\n");
37 return EXIT_FAILURE;
38 }
39 } else {
40 output.setFileName(outputFile);
41 if (!output.open(QIODevice::WriteOnly)) {
42 fprintf(stderr, "Error opening %s for writing\n", qPrintable(outputFile));
43 return EXIT_FAILURE;
44 }
45 }
46
47 QJsonArray allMetaObjects;
48 if (jsonFiles.isEmpty() && !skipStdIn) {
49 QFile f;
50 if (!f.open(stdin, QIODevice::ReadOnly)) {
51 fprintf(stderr, "Error opening stdin for reading\n");
52 return EXIT_FAILURE;
53 }
54
55 if (!readFromDevice(&f, &allMetaObjects)) {
56 fprintf(stderr, "Error parsing data from stdin\n");
57 return EXIT_FAILURE;
58 }
59 }
60
61 QStringList jsonFilesSorted = jsonFiles;
62 jsonFilesSorted.sort();
63 for (const QString &jsonFile : std::as_const(jsonFilesSorted)) {
64 QFile f(jsonFile);
65 if (!f.open(QIODevice::ReadOnly)) {
66 fprintf(stderr, "Error opening %s for reading\n", qPrintable(jsonFile));
67 return EXIT_FAILURE;
68 }
69
70 if (!readFromDevice(&f, &allMetaObjects)) {
71 fprintf(stderr, "Error parsing %s\n", qPrintable(jsonFile));
72 return EXIT_FAILURE;
73 }
74 }
75
76 QJsonDocument doc(allMetaObjects);
77 output.write(doc.toJson());
78
79 return EXIT_SUCCESS;
80}
IOBluetoothDevice * device
\inmodule QtCore
Definition qbytearray.h:57
\inmodule QtCore
Definition qfile.h:93
\inmodule QtCore \reentrant
Definition qiodevice.h:34
\inmodule QtCore\reentrant
Definition qjsonarray.h:18
\inmodule QtCore\reentrant
QByteArray toJson(JsonFormat format=Indented) const
QJsonObject object() const
Returns the QJsonObject contained in the document.
static QJsonDocument fromJson(const QByteArray &json, QJsonParseError *error=nullptr)
Parses json as a UTF-8 encoded JSON document, and creates a QJsonDocument from it.
\inmodule QtCore
\macro QT_RESTRICTED_CAST_FROM_ASCII
Definition qstring.h:129
int collectJson(const QStringList &jsonFiles, const QString &outputFile, bool skipStdIn)
static bool readFromDevice(QIODevice *device, QJsonArray *allMetaObjects)
DBusConnection const char DBusError * error
static QString outputFile
GLfloat GLfloat f
#define qPrintable(string)
Definition qstring.h:1531
QT_BEGIN_NAMESPACE typedef uchar * output
static Q_CORE_EXPORT void setDeterministicGlobalSeed()
\threadsafe
Definition qhash.cpp:1230
\inmodule QtCore\reentrant