diff --git a/src/kpackage/package.cpp b/src/kpackage/package.cpp --- a/src/kpackage/package.cpp +++ b/src/kpackage/package.cpp @@ -47,14 +47,21 @@ namespace KPackage { +static bool isMetadata(const QByteArray& name) +{ + static QSet blacklist = {"metadata", "metadatajson"}; + return blacklist.contains(name); +} + Package::Package(PackageStructure *structure) : d(new PackagePrivate()) { d->structure = structure; if (d->structure) { d->structure.data()->initPackage(this); addFileDefinition("metadata", QStringLiteral("metadata.desktop"), i18n("Desktop file that describes this package.")); + addFileDefinition("metadatajson", QStringLiteral("metadata.json"), i18n("JSON file that describes this package.")); } } @@ -214,10 +221,13 @@ { //qCDebug(KPACKAGE_LOG) << "metadata: " << d->path << filePath("metadata"); if (!d->metadata && !d->path.isEmpty()) { - const QString metadataPath = filePath("metadata"); + const QString metadataJsonPath = filePath("metadatajson"); + const QString metadataDesktopPath = filePath("metadata"); - if (!metadataPath.isEmpty()) { - d->createPackageMetadata(metadataPath); + if (!metadataJsonPath.isEmpty()) { + d->createPackageMetadata(metadataJsonPath); + } else if (!metadataDesktopPath.isEmpty()) { + d->createPackageMetadata(metadataDesktopPath); } else { // d->path might still be a file, if its path has a trailing /, // the fileInfo lookup will fail, so remove it. @@ -366,10 +376,10 @@ QString prefix; //We are an installed package if (d->tempRoot.isEmpty()) { - prefix = fileType == "metadata" ? d->path : (d->path + contentsPrefix); + prefix = isMetadata(fileType) ? d->path : (d->path + contentsPrefix); //We are a compressed package temporarily uncompressed in /tmp } else { - prefix = fileType == "metadata" ? d->tempRoot : (d->tempRoot + contentsPrefix); + prefix = isMetadata(fileType) ? d->tempRoot : (d->tempRoot + contentsPrefix); } for (const QString &path : qAsConst(paths)) { @@ -1004,7 +1014,7 @@ QString PackagePrivate::fallbackFilePath(const QByteArray &key, const QString &filename) const { //don't fallback if the package isn't valid and never fallback the metadata file - if (qstrcmp(key, "metadata") != 0 && fallbackPackage && fallbackPackage->isValid()) { + if (!isMetadata(key) && fallbackPackage && fallbackPackage->isValid()) { return fallbackPackage->filePath(key, filename); } else { return QString();