diff options
| author | Jeremy Lainé <jeremy.laine@m4x.org> | 2012-08-03 16:28:53 +0200 |
|---|---|---|
| committer | Jeremy Lainé <jeremy.laine@m4x.org> | 2012-08-03 16:28:53 +0200 |
| commit | a8e6bd3e1d435038591b3a16fb31136539c5efec (patch) | |
| tree | f1e1ac1be12a07f9faa21f59c4e2f7e45ada31f3 | |
| parent | 1268a64bdd1320639cad0d9c8331fb6fd682b30c (diff) | |
| download | qxmpp-a8e6bd3e1d435038591b3a16fb31136539c5efec.tar.gz | |
Make it possible to have several addresses in vCards.
| -rw-r--r-- | CHANGELOG | 1 | ||||
| -rw-r--r-- | src/base/QXmppVCardIq.cpp | 93 | ||||
| -rw-r--r-- | src/base/QXmppVCardIq.h | 15 | ||||
| -rw-r--r-- | tests/vcard.cpp | 34 |
4 files changed, 140 insertions, 3 deletions
@@ -2,6 +2,7 @@ QXmpp 0.6.4 (UNRELEASED) ------------------------ - Improve vCard support: + * Make it possible to have several addresses. * Make it possible to have several e-mail addresses. * Make it possible to have several phone numbers. - Make it possible to set the client's extended information form (XEP-0128). diff --git a/src/base/QXmppVCardIq.cpp b/src/base/QXmppVCardIq.cpp index 9dcd19c8..27bcbc34 100644 --- a/src/base/QXmppVCardIq.cpp +++ b/src/base/QXmppVCardIq.cpp @@ -52,6 +52,11 @@ class QXmppVCardAddressPrivate : public QSharedData { public: QXmppVCardAddressPrivate() : type(QXmppVCardAddress::None) {}; + QString country; + QString locality; + QString postcode; + QString region; + QString street; QXmppVCardAddress::Type type; }; @@ -81,6 +86,76 @@ QXmppVCardAddress& QXmppVCardAddress::operator=(const QXmppVCardAddress &other) return *this; } +/// Returns the country. + +QString QXmppVCardAddress::country() const +{ + return d->country; +} + +/// Sets the country. + +void QXmppVCardAddress::setCountry(const QString &country) +{ + d->country = country; +} + +/// Returns the locality. + +QString QXmppVCardAddress::locality() const +{ + return d->locality; +} + +/// Sets the locality. + +void QXmppVCardAddress::setLocality(const QString &locality) +{ + d->locality = locality; +} + +/// Returns the postcode. + +QString QXmppVCardAddress::postcode() const +{ + return d->postcode; +} + +/// Sets the postcode. + +void QXmppVCardAddress::setPostcode(const QString &postcode) +{ + d->postcode = postcode; +} + +/// Returns the region. + +QString QXmppVCardAddress::region() const +{ + return d->region; +} + +/// Sets the region. + +void QXmppVCardAddress::setRegion(const QString ®ion) +{ + d->region = region; +} + +/// Returns the street address. + +QString QXmppVCardAddress::street() const +{ + return d->street; +} + +/// Sets the street address. + +void QXmppVCardAddress::setStreet(const QString &street) +{ + d->street = street; +} + /// Returns the address type, which is a combination of TypeFlag. QXmppVCardAddress::Type QXmppVCardAddress::type() const @@ -105,6 +180,12 @@ void QXmppVCardAddress::parse(const QDomElement &element) d->type |= Postal; if (!element.firstChildElement("PREF").isNull()) d->type |= Preferred; + + d->country = element.firstChildElement("CTRY").text(); + d->locality = element.firstChildElement("LOCALITY").text(); + d->postcode = element.firstChildElement("PCODE").text(); + d->region = element.firstChildElement("REGION").text(); + d->street = element.firstChildElement("STREET").text(); } void QXmppVCardAddress::toXml(QXmlStreamWriter *writer) const @@ -118,6 +199,18 @@ void QXmppVCardAddress::toXml(QXmlStreamWriter *writer) const writer->writeEmptyElement("POSTAL"); if (d->type & Preferred) writer->writeEmptyElement("PREF"); + + if (!d->country.isEmpty()) + writer->writeTextElement("CTRY", d->country); + if (!d->locality.isEmpty()) + writer->writeTextElement("LOCALITY", d->locality); + if (!d->postcode.isEmpty()) + writer->writeTextElement("PCODE", d->postcode); + if (!d->region.isEmpty()) + writer->writeTextElement("REGION", d->region); + if (!d->street.isEmpty()) + writer->writeTextElement("STREET", d->street); + writer->writeEndElement(); } diff --git a/src/base/QXmppVCardIq.h b/src/base/QXmppVCardIq.h index 769ca783..ba83eb7c 100644 --- a/src/base/QXmppVCardIq.h +++ b/src/base/QXmppVCardIq.h @@ -56,6 +56,21 @@ public: QXmppVCardAddress& operator=(const QXmppVCardAddress &other); + QString country() const; + void setCountry(const QString &country); + + QString locality() const; + void setLocality(const QString &locality); + + QString postcode() const; + void setPostcode(const QString &postcode); + + QString region() const; + void setRegion(const QString ®ion); + + QString street() const; + void setStreet(const QString &street); + Type type() const; void setType(Type type); diff --git a/tests/vcard.cpp b/tests/vcard.cpp index ccc65199..eacaf938 100644 --- a/tests/vcard.cpp +++ b/tests/vcard.cpp @@ -30,19 +30,43 @@ void tst_QXmppVCardIq::testAddress_data() { QTest::addColumn<QByteArray>("xml"); QTest::addColumn<int>("type"); - - QTest::newRow("none") << QByteArray("<ADR/>") << int(QXmppVCardAddress::None); - QTest::newRow("HOME") << QByteArray("<ADR><HOME/></ADR>") << int(QXmppVCardAddress::Home); + QTest::addColumn<QString>("country"); + QTest::addColumn<QString>("locality"); + QTest::addColumn<QString>("postcode"); + QTest::addColumn<QString>("region"); + QTest::addColumn<QString>("street"); + + QTest::newRow("none") << QByteArray("<ADR/>") << int(QXmppVCardAddress::None) << "" << "" << "" << "" << ""; + QTest::newRow("HOME") << QByteArray("<ADR><HOME/></ADR>") << int(QXmppVCardAddress::Home) << "" << "" << "" << "" << ""; + QTest::newRow("WORK") << QByteArray("<ADR><WORK/></ADR>") << int(QXmppVCardAddress::Work) << "" << "" << "" << "" << ""; + QTest::newRow("POSTAL") << QByteArray("<ADR><POSTAL/></ADR>") << int(QXmppVCardAddress::Postal) << "" << "" << "" << "" << ""; + QTest::newRow("PREF") << QByteArray("<ADR><PREF/></ADR>") << int(QXmppVCardAddress::Preferred) << "" << "" << "" << "" << ""; + + QTest::newRow("country") << QByteArray("<ADR><CTRY>France</CTRY></ADR>") << int(QXmppVCardAddress::None) << "France" << "" << "" << "" << ""; + QTest::newRow("locality") << QByteArray("<ADR><LOCALITY>Paris</LOCALITY></ADR>") << int(QXmppVCardAddress::None) << "" << "Paris" << "" << "" << ""; + QTest::newRow("postcode") << QByteArray("<ADR><PCODE>75008</PCODE></ADR>") << int(QXmppVCardAddress::None) << "" << "" << "75008" << "" << ""; + QTest::newRow("region") << QByteArray("<ADR><REGION>Ile de France</REGION></ADR>") << int(QXmppVCardAddress::None) << "" << "" << "" << "Ile de France" << ""; + QTest::newRow("street") << QByteArray("<ADR><STREET>55 rue du faubourg Saint-Honoré</STREET></ADR>") << int(QXmppVCardAddress::None) << "" << "" << "" << "" << QString::fromUtf8("55 rue du faubourg Saint-Honoré"); } void tst_QXmppVCardIq::testAddress() { QFETCH(QByteArray, xml); QFETCH(int, type); + QFETCH(QString, country); + QFETCH(QString, locality); + QFETCH(QString, postcode); + QFETCH(QString, region); + QFETCH(QString, street); QXmppVCardAddress address; parsePacket(address, xml); QCOMPARE(int(address.type()), type); + QCOMPARE(address.country(), country); + QCOMPARE(address.locality(), locality); + QCOMPARE(address.postcode(), postcode); + QCOMPARE(address.region(), region); + QCOMPARE(address.street(), street); serializePacket(address, xml); } @@ -111,6 +135,7 @@ void tst_QXmppVCardIq::testVCard() const QByteArray xml( "<iq id=\"vcard1\" type=\"set\">" "<vCard xmlns=\"vcard-temp\">" + "<ADR><CTRY>France</CTRY></ADR>" "<BDAY>1983-09-14</BDAY>" "<EMAIL><INTERNET/><USERID>foo.bar@example.com</USERID></EMAIL>" "<FN>Foo Bar!</FN>" @@ -132,6 +157,9 @@ void tst_QXmppVCardIq::testVCard() QXmppVCardIq vcard; parsePacket(vcard, xml); + QCOMPARE(vcard.addresses().size(), 1); + QCOMPARE(vcard.addresses()[0].country(), QLatin1String("France")); + QCOMPARE(int(vcard.addresses()[0].type()), int(QXmppVCardEmail::None)); QCOMPARE(vcard.birthday(), QDate(1983, 9, 14)); QCOMPARE(vcard.email(), QLatin1String("foo.bar@example.com")); QCOMPARE(vcard.emails().size(), 1); |
