summaryrefslogtreecommitdiffstats
path: root/src/qtattributionsscanner/scanner.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/qtattributionsscanner/scanner.cpp')
-rw-r--r--src/qtattributionsscanner/scanner.cpp46
1 files changed, 33 insertions, 13 deletions
diff --git a/src/qtattributionsscanner/scanner.cpp b/src/qtattributionsscanner/scanner.cpp
index 0b4330cf0..9e6832e6c 100644
--- a/src/qtattributionsscanner/scanner.cpp
+++ b/src/qtattributionsscanner/scanner.cpp
@@ -81,6 +81,19 @@ static void validatePackage(Package &p, const QString &filePath, LogLevel logLev
}
}
+static QStringList toStringList(const QJsonValue &value)
+{
+ QStringList result;
+ for (auto iter : value.toArray()) {
+ if (iter.type() != QJsonValue::String) {
+ result.clear();
+ return result;
+ }
+ result.push_back(iter.toString());
+ }
+ return result;
+}
+
// Transforms a JSON object into a Package object
static Package readPackage(const QJsonObject &object, const QString &filePath, LogLevel logLevel)
{
@@ -91,7 +104,8 @@ static Package readPackage(const QJsonObject &object, const QString &filePath, L
for (auto iter = object.constBegin(); iter != object.constEnd(); ++iter) {
const QString key = iter.key();
- if (!iter.value().isString() && key != QLatin1String("QtParts")) {
+ if (!iter.value().isString() && key != QLatin1String("QtParts")
+ && key != QLatin1String("LicenseFiles")) {
if (logLevel != SilentLog)
std::cerr << qPrintable(tr("File %1: Expected JSON string as value of %2.").arg(
QDir::toNativeSeparators(filePath), key)) << std::endl;
@@ -117,7 +131,16 @@ static Package readPackage(const QJsonObject &object, const QString &filePath, L
} else if (key == QLatin1String("LicenseId")) {
p.licenseId = value;
} else if (key == QLatin1String("LicenseFile")) {
- p.licenseFile = QDir(directory).absoluteFilePath(value);
+ p.licenseFiles = QStringList(QDir(directory).absoluteFilePath(value));
+ } else if (key == QLatin1String("LicenseFiles")) {
+ auto strings = toStringList(iter.value());
+ if (strings.isEmpty() && (logLevel != SilentLog))
+ std::cerr << qPrintable(tr("File %1: Expected JSON array of strings in %2.")
+ .arg(QDir::toNativeSeparators(filePath), key))
+ << std::endl;
+ const QDir dir(directory);
+ for (auto iter : strings)
+ p.licenseFiles.push_back(dir.absoluteFilePath(iter));
} else if (key == QLatin1String("Copyright")) {
p.copyright = value;
} else if (key == QLatin1String("PackageComment")) {
@@ -129,15 +152,12 @@ static Package readPackage(const QJsonObject &object, const QString &filePath, L
} else if (key == QLatin1String("QtUsage")) {
p.qtUsage = value;
} else if (key == QLatin1String("QtParts")) {
- const QVariantList variantList = iter.value().toArray().toVariantList();
- for (const QVariant &v: variantList) {
- if (v.type() != QVariant::String && logLevel != SilentLog) {
- std::cerr << qPrintable(tr("File %1: Expected JSON string in array of %2.").arg(
- QDir::toNativeSeparators(filePath), key))
- << std::endl;
- }
- p.qtParts.append(v.toString());
- }
+ auto parts = toStringList(iter.value());
+ if (parts.isEmpty() && (logLevel != SilentLog))
+ std::cerr << qPrintable(tr("File %1: Expected JSON array of strings in %2.")
+ .arg(QDir::toNativeSeparators(filePath), key))
+ << std::endl;
+ p.qtParts = parts;
} else {
if (logLevel != SilentLog)
std::cerr << qPrintable(tr("File %1: Unknown key %2.").arg(
@@ -207,7 +227,7 @@ static Package parseChromiumFile(QFile &file, const QString &filePath, LogLevel
QString licenseFile = fields[QStringLiteral("License File")];
if (licenseFile != QString() && licenseFile != QLatin1String("NOT_SHIPPED")) {
- p.licenseFile = QDir(directory).absoluteFilePath(licenseFile);
+ p.licenseFiles = QStringList(QDir(directory).absoluteFilePath(licenseFile));
} else {
// Look for a LICENSE or COPYING file as a fallback
QDir dir = directory;
@@ -217,7 +237,7 @@ static Package parseChromiumFile(QFile &file, const QString &filePath, LogLevel
const QFileInfoList entries = dir.entryInfoList();
if (!entries.empty())
- p.licenseFile = entries.at(0).absoluteFilePath();
+ p.licenseFiles = QStringList(entries.at(0).absoluteFilePath());
}
validatePackage(p, filePath, logLevel);