From 8bf5a2c7a763fec26c45ac58d62e316e67adc547 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jaakko=20Kera=CC=88nen?= Date: Thu, 2 Jun 2016 18:58:45 +0300 Subject: [PATCH] libdoomsday: Cleanup --- .../libdoomsday/src/resource/databundle.cpp | 56 +++++++++---------- 1 file changed, 27 insertions(+), 29 deletions(-) diff --git a/doomsday/apps/libdoomsday/src/resource/databundle.cpp b/doomsday/apps/libdoomsday/src/resource/databundle.cpp index a2dd330ffa..202fa60b21 100644 --- a/doomsday/apps/libdoomsday/src/resource/databundle.cpp +++ b/doomsday/apps/libdoomsday/src/resource/databundle.cpp @@ -88,6 +88,7 @@ DENG2_PIMPL(DataBundle) ": WAD file lump directory not found"); } + // Determine the WAD type, if unspecified. format = (lumpDir->type() == res::LumpDirectory::Pwad? Pwad : Iwad); /*qDebug() << "format:" << (lumpDir->type()==res::LumpDirectory::Pwad? "PWAD" : "IWAD") @@ -104,10 +105,28 @@ DENG2_PIMPL(DataBundle) // Search for known data files in the bundle registry. res::Bundles::MatchResult matched = DoomsdayApp::bundles().match(self); + File &dataFile = self.asFile(); + + // Metadata for the package will be collected into this record. + Record meta; + meta.set("path", dataFile.path()); + meta.set("bundleScore", matched.bestScore); if (matched) { + // Package metadata has been defined for this file (databundles.dei). packageId = matched.packageId; + + if (lumpDir) + { + meta.set("lumpDirCRC32", lumpDir->crc32()) + .value().as().setSemanticHints(NumberValue::Hex); + } + + meta.set("title", matched.bestMatch->keyValue("info:title")); + meta.set("author", matched.bestMatch->keyValue("info:author")); + meta.set("license", matched.bestMatch->keyValue("info:license", "Unknown")); + meta.set("tags", matched.bestMatch->keyValue("info:tags")); } else { @@ -116,6 +135,11 @@ DENG2_PIMPL(DataBundle) // - .manifest companion + meta.set("title", dataFile.name()); + meta.set("author", "Unknown"); + meta.set("license", "Unknown"); + meta.set("tags", "generated"); + // Generate an identifier based on the information we have. static String const formatDomains[] = { "file.local", @@ -142,7 +166,6 @@ DENG2_PIMPL(DataBundle) * Set up the package metadata according to the best matched known * information or autogenerated entries. */ - File &dataFile = self.asFile(); // Finally, make a link that represents the package. if (auto chosen = chooseUniqueLinkPathAndVersion(dataFile, packageId, @@ -155,33 +178,8 @@ DENG2_PIMPL(DataBundle) // Set up package metadata in the link. Record &metadata = Package::initializeMetadata(*pkgLink, packageId); - metadata.set("path", dataFile.path()); + metadata.copyMembersFrom(meta); metadata.set("version", !chosen.version.isEmpty()? chosen.version : "0.0"); - if (lumpDir) - { - metadata.set("lumpDirCRC32", lumpDir->crc32()) - .value().as().setSemanticHints(NumberValue::Hex); - } - metadata.set("bundleScore", matched.bestScore); - - // Get the rest of the metadata. - if (matched) - { - metadata.set("title", matched.bestMatch->keyValue("info:title")); - metadata.set("tags", matched.bestMatch->keyValue("info:tags")); - metadata.set("author", matched.bestMatch->keyValue("info:author")); - - String license = matched.bestMatch->keyValue("info:license"); - if (license.isEmpty()) license = "Unknown"; - metadata.set("license", license); - } - else - { - metadata.set("title", dataFile.name()); - metadata.set("author", "Unknown"); - metadata.set("license", "Unknown"); - metadata.set("tags", "generated"); - } LOG_RES_VERBOSE("Generated package:\n%s") << metadata.asText(); @@ -330,13 +328,13 @@ void DataBundle::set(Offset, Byte const *, Size) Record &DataBundle::objectNamespace() { DENG2_ASSERT(dynamic_cast(this) != nullptr); - return dynamic_cast(this)->objectNamespace().subrecord(QStringLiteral("package")); + return asFile().objectNamespace().subrecord(QStringLiteral("package")); } Record const &DataBundle::objectNamespace() const { DENG2_ASSERT(dynamic_cast(this) != nullptr); - return dynamic_cast(this)->objectNamespace().subrecord(QStringLiteral("package")); + return asFile().objectNamespace().subrecord(QStringLiteral("package")); } void DataBundle::setFormat(Format format)