diff options
Diffstat (limited to 'src/qtattributionsscanner/scanner.cpp')
-rw-r--r-- | src/qtattributionsscanner/scanner.cpp | 46 |
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); |