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;
    }
Exemple #2
0
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;
}