bool PropertyItemFactory::registerProertyTemplate(const std::string & filename) { rapidjson::Document document; if(!openJsonFile(filename, document)) { return false; } typedef std::pair<std::string, PropertyCreator*> CreatorPair; for (rapidjson::Value::MemberIterator it = document.MemberBegin(); it != document.MemberEnd(); ++it) { PropertyItemType * declare = new PropertyItemType(); if(!declare->loadTypedef(it->value)) { delete declare; return false; } PropertyCreator *creator = new CombinedPropertyCreator(declare); auto ret = factory_.insert(CreatorPair(it->name.GetString(), creator)); if(!ret.second) { LOG_ERROR("The property %s was covered.", it->name.GetString()); delete ret.first->second; ret.first->second = creator; } } return true; }
void Playlist::parseMetadata() { QFile input(_cachePath.filePath("metadata")); input.open(QIODevice::ReadOnly); QJsonObject root = openJsonFile(input); if (root.isEmpty()) { qWarning() << Q_FUNC_INFO << "Failed to parse metadata file, located at" << input.fileName(); return; } QJsonObject data = root["data"].toObject(); QJsonObject sequence = data["sequence"].toObject(); QString sequenceId = sequence["id"].toString(); qint64 published = sequence["published"].toVariant().toLongLong(); if (published != _published || _sequenceId != sequenceId) { parseMetadataEntries(sequence["entries"].toArray()); } _sequenceId = sequenceId; _published = published; }