/*! Returns the hash value for \a key. */ uint qHash(const QVersitDocument &key) { int hash = QT_PREPEND_NAMESPACE(qHash)(key.type()); hash += QT_PREPEND_NAMESPACE(qHash)(key.componentType()); hash += key.properties().length() + key.subDocuments().length(); foreach (const QVersitProperty& property, key.properties()) { hash += qHash(property); } foreach (const QVersitDocument& nested, key.subDocuments()) { hash += qHash(nested); } return hash; }
void MT_CntVersitMyCardPlugin::exportOwnContact() { //create contact QContact phonecontact; QContactName contactName; contactName.setFirstName("Jo"); contactName.setLastName("Black"); phonecontact.saveDetail(&contactName); QContactPhoneNumber number; number.setContexts("Home"); number.setSubTypes("Mobile"); number.setNumber("+02644424429"); phonecontact.saveDetail(&number); //set MyCard detail QContactDetail myCard(MYCARD_DEFINTION_NAME); phonecontact.saveDetail(&myCard); //export QList<QContact> list; list.append(phonecontact); QVersitContactExporter exporter; QVERIFY(exporter.exportContacts(list, QVersitDocument::VCard21Type)); QList<QVersitDocument> documents = exporter.documents(); //X-SELF property is exported if MyCard QVersitDocument document = documents.first(); QVersitProperty property; property.setName(QLatin1String("X-SELF")); property.setValue("0"); bool propertyFound = document.properties().contains(property); QVERIFY(propertyFound); }
QDebug operator<<(QDebug dbg, const QVersitDocument& document) { dbg.nospace() << "QVersitDocument(" << document.type() << ", " << document.componentType() << ')'; foreach (const QVersitProperty& property, document.properties()) { dbg.space() << '\n' << property; } foreach (const QVersitDocument& nested, document.subDocuments()) { dbg.space() << '\n' << nested; } return dbg.maybeSpace(); }
/*! * Finds a property in the \a document with the given \a propertyName, adds it to \a toBeRemoved, * and returns it. */ QVersitProperty VersitUtils::takeProperty(const QVersitDocument& document, const QString& propertyName, QList<QVersitProperty>* toBeRemoved) { foreach (const QVersitProperty& currentProperty, document.properties()) { if (currentProperty.name() == propertyName) { *toBeRemoved << currentProperty; return currentProperty; } } return QVersitProperty(); }
/*! * Encodes the \a document and writes it to the device. A "VERSION:" line is added iff \a * encodeVersion is true. */ bool QVersitDocumentWriter::encodeVersitDocument(const QVersitDocument& document, bool encodeVersion) { mSuccessful = true; if (document.componentType().isEmpty()) { // for compatibility with code for Qt Mobility 1.0, which didn't have componentType writeString(QStringLiteral("BEGIN:VCARD")); } else { writeString(QStringLiteral("BEGIN:") + document.componentType()); } writeCrlf(); if (encodeVersion) { switch (mType) { case QVersitDocument::VCard21Type: writeString(QStringLiteral("VERSION:2.1")); writeCrlf(); break; case QVersitDocument::VCard30Type: writeString(QStringLiteral("VERSION:3.0")); writeCrlf(); break; case QVersitDocument::VCard40Type: writeString(QStringLiteral("VERSION:4.0")); writeCrlf(); break; case QVersitDocument::ICalendar20Type: writeString(QStringLiteral("VERSION:2.0")); writeCrlf(); break; default: ; // don't print version } } foreach (const QVersitProperty& property, document.properties()) { encodeVersitProperty(property); } foreach (const QVersitDocument& document, document.subDocuments()) { encodeVersitDocument(document, false); } if (document.componentType().isEmpty()) { writeString(QStringLiteral("END:VCARD")); } else { writeString(QStringLiteral("END:") + document.componentType()); } writeCrlf(); // This has been set by the methods called from this function return mSuccessful; }
/*! * Generates a QContact from \a versitDocument. */ bool QVersitContactImporterPrivate::importContact( const QVersitDocument& document, int contactIndex, QContact* contact, QVersitContactImporter::Error* error) { if (document.componentType() != QStringLiteral("VCARD") && document.type() != QVersitDocument::VCard21Type && document.type() != QVersitDocument::VCard30Type) { *error = QVersitContactImporter::InvalidDocumentError; return false; } const QList<QVersitProperty> properties = document.properties(); if (properties.size() == 0) { *error = QVersitContactImporter::EmptyDocumentError; return false; } // First, do the properties with PREF set so they appear first in the contact details foreach (const QVersitProperty& property, properties) { QStringList typeParameters = property.parameters().values(QStringLiteral("TYPE")); if (typeParameters.contains(QStringLiteral("PREF"), Qt::CaseInsensitive)) importProperty(document, property, contactIndex, contact); }