diff -r 453da2cfceef -r 71781823f776 qtmobility/src/versit/qversitreader_p.cpp --- a/qtmobility/src/versit/qversitreader_p.cpp Fri May 14 16:41:33 2010 +0300 +++ b/qtmobility/src/versit/qversitreader_p.cpp Thu May 27 13:42:11 2010 +0300 @@ -242,6 +242,14 @@ QVersitProperty::ListType); mValueTypeMap.insert(qMakePair(QVersitDocument::VCard30Type, QString::fromAscii("CATEGORIES")), QVersitProperty::ListType); + mValueTypeMap.insert(qMakePair(QVersitDocument::VCard21Type, QString::fromAscii("X-CHILDREN")), + QVersitProperty::ListType); + mValueTypeMap.insert(qMakePair(QVersitDocument::VCard30Type, QString::fromAscii("X-CHILDREN")), + QVersitProperty::ListType); + mValueTypeMap.insert(qMakePair(QVersitDocument::VCard21Type, QString::fromAscii("X-NICKNAME")), + QVersitProperty::ListType); + mValueTypeMap.insert(qMakePair(QVersitDocument::VCard30Type, QString::fromAscii("X-NICKNAME")), + QVersitProperty::ListType); } /*! Destroy a reader. */ @@ -422,6 +430,11 @@ QVersitProperty property; property.setGroups(groupsAndName.first); property.setName(groupsAndName.second); + // set the propertyValueType + QPair key = + qMakePair(versitType, property.name()); + if (mValueTypeMap.contains(key)) + property.setValueType(mValueTypeMap.value(key)); if (versitType == QVersitDocument::VCard21Type) parseVCard21Property(cursor, property, lineReader); @@ -440,8 +453,7 @@ property.setParameters(extractVCard21PropertyParams(cursor, lineReader.codec())); QByteArray value = extractPropertyValue(cursor); - if (mValueTypeMap.value(qMakePair(QVersitDocument::VCard21Type, property.name())) - == QVersitProperty::VersitDocumentType) { + if (property.valueType() == QVersitProperty::VersitDocumentType) { // Hack to handle cases where start of document is on the same or next line as "AGENT:" bool foundBegin = false; if (value == "BEGIN:VCARD") { @@ -462,9 +474,10 @@ QVariant valueVariant(decodeCharset(value, property, lineReader.codec(), &codec)); bool isBinary = unencode(valueVariant, cursor, property, codec, lineReader); property.setValue(valueVariant); - if (!isBinary) { - splitStructuredValue(QVersitDocument::VCard21Type, property, false); - } + if (isBinary) + property.setValueType(QVersitProperty::BinaryType); + else + splitStructuredValue(property, false); } } @@ -481,8 +494,7 @@ QTextCodec* codec; QString valueString(decodeCharset(value, property, lineReader.codec(), &codec)); - if (mValueTypeMap.value(qMakePair(QVersitDocument::VCard30Type, property.name())) - == QVersitProperty::VersitDocumentType) { + if (property.valueType() == QVersitProperty::VersitDocumentType) { removeBackSlashEscaping(valueString); // Make a line reader from the value of the property. QByteArray subDocumentValue(codec->fromUnicode(valueString)); @@ -501,8 +513,10 @@ QVariant valueVariant(valueString); bool isBinary = unencode(valueVariant, cursor, property, codec, lineReader); property.setValue(valueVariant); - if (!isBinary) { - bool isList = splitStructuredValue(QVersitDocument::VCard30Type, property, true); + if (isBinary) { + property.setValueType(QVersitProperty::BinaryType); + } else { + bool isList = splitStructuredValue(property, true); // Do backslash unescaping if (isList) { QStringList list = property.value(); @@ -868,23 +882,19 @@ * exit). */ bool QVersitReaderPrivate::splitStructuredValue( - QVersitDocument::VersitType type, QVersitProperty& property, + QVersitProperty& property, bool hasEscapedBackslashes) const { QVariant variant = property.variantValue(); - QPair key = qMakePair(type, property.name()); - if (mValueTypeMap.contains(key)) { - if (mValueTypeMap.value(key) == QVersitProperty::CompoundType) { - variant.setValue(splitValue(variant.toString(), QLatin1Char(';'), - QString::KeepEmptyParts, hasEscapedBackslashes)); - property.setValue(variant); - property.setValueType(QVersitProperty::CompoundType); - } else if (mValueTypeMap.value(key) == QVersitProperty::ListType) { - variant.setValue(splitValue(variant.toString(), QLatin1Char(','), - QString::SkipEmptyParts, hasEscapedBackslashes)); - property.setValue(variant); - property.setValueType(QVersitProperty::ListType); - } + if (property.valueType() == QVersitProperty::CompoundType) { + variant.setValue(splitValue(variant.toString(), QLatin1Char(';'), + QString::KeepEmptyParts, hasEscapedBackslashes)); + property.setValue(variant); + return true; + } else if (property.valueType() == QVersitProperty::ListType) { + variant.setValue(splitValue(variant.toString(), QLatin1Char(','), + QString::SkipEmptyParts, hasEscapedBackslashes)); + property.setValue(variant); return true; } return false;