diff options
| author | Manjeet Dahiya <manjeetdahiya@gmail.com> | 2010-09-17 08:12:51 +0000 |
|---|---|---|
| committer | Manjeet Dahiya <manjeetdahiya@gmail.com> | 2010-09-17 08:12:51 +0000 |
| commit | 166e4101fa9fbf61faef2c770f9a80e98799c1e1 (patch) | |
| tree | 0383bfce71aee3a60c7fd62a99db0549e53b37b0 /src | |
| parent | c716c25e3e57b4be7146dd99c6355f76ed5f6b9c (diff) | |
| download | qxmpp-166e4101fa9fbf61faef2c770f9a80e98799c1e1.tar.gz | |
implement QXmppVCardManager using QXmppClientExtension
Diffstat (limited to 'src')
| -rw-r--r-- | src/QXmppClient.cpp | 4 | ||||
| -rw-r--r-- | src/QXmppVCardManager.cpp | 62 | ||||
| -rw-r--r-- | src/QXmppVCardManager.h | 13 |
3 files changed, 47 insertions, 32 deletions
diff --git a/src/QXmppClient.cpp b/src/QXmppClient.cpp index 23eb84af..ab9db6de 100644 --- a/src/QXmppClient.cpp +++ b/src/QXmppClient.cpp @@ -207,7 +207,9 @@ QXmppClient::QXmppClient(QObject *parent) addExtension(d->mucManager); d->transferManager = new QXmppTransferManager(d->stream, this); - d->vCardManager = new QXmppVCardManager(d->stream, this); + + d->vCardManager = new QXmppVCardManager; + addExtension(d->vCardManager); d->versionManager = new QXmppVersionManager; addExtension(d->versionManager); diff --git a/src/QXmppVCardManager.cpp b/src/QXmppVCardManager.cpp index dbede096..de33d808 100644 --- a/src/QXmppVCardManager.cpp +++ b/src/QXmppVCardManager.cpp @@ -25,16 +25,43 @@ #include "QXmppVCardManager.h" #include "QXmppOutgoingClient.h" #include "QXmppUtils.h" +#include "QXmppConstants.h" -QXmppVCardManager::QXmppVCardManager(QXmppOutgoingClient* stream, QObject *parent) - : QObject(parent), - m_stream(stream), +QXmppVCardManager::QXmppVCardManager() + : QXmppClientExtension(), m_isClientVCardReceived(false) { - bool check = QObject::connect(m_stream, SIGNAL(vCardIqReceived(const QXmppVCardIq&)), - this, SLOT(vCardIqReceived(const QXmppVCardIq&))); - Q_ASSERT(check); - Q_UNUSED(check); +} + +QStringList QXmppVCardManager::discoveryFeatures() const +{ + return QStringList() << ns_vcard; +} + +bool QXmppVCardManager::handleStanza(QXmppStream *stream, const QDomElement &element) +{ + if(element.tagName() == "iq" && QXmppVCardIq::isVCard(element)) + { + QXmppVCardIq vCardIq; + vCardIq.parse(element); + + if(vCardIq.from().isEmpty()) + { + m_clientVCard = vCardIq; + m_isClientVCardReceived = true; + emit clientVCardReceived(); + } + + emit vCardReceived(vCardIq); + + // deprecated in 0.3.0 release + QXmppVCard oldVCard(vCardIq); + emit vCardReceived(oldVCard); + + return true; + } + + return false; } /// This function requests the server for vCard of the specified jid. @@ -45,29 +72,12 @@ QXmppVCardManager::QXmppVCardManager(QXmppOutgoingClient* stream, QObject *paren QString QXmppVCardManager::requestVCard(const QString& jid) { QXmppVCardIq request(jid); - if(m_stream->sendPacket(request)) + if(client()->sendPacket(request)) return request.id(); else return ""; } -void QXmppVCardManager::vCardIqReceived(const QXmppVCardIq& vcard) -{ - // self vCard received - if(vcard.from().isEmpty()) - { - m_clientVCard = vcard; - m_isClientVCardReceived = true; - emit clientVCardReceived(); - } - - emit vCardReceived(vcard); - -// deprecated in 0.3.0 release - QXmppVCard oldVCard(vcard); - emit vCardReceived(oldVCard); -} - /// Returns the vCard of the connected client. /// /// \return QXmppVCard @@ -87,7 +97,7 @@ void QXmppVCardManager::setClientVCard(const QXmppVCardIq& clientVCard) m_clientVCard.setTo(""); m_clientVCard.setFrom(""); m_clientVCard.setType(QXmppIq::Set); - m_stream->sendPacket(m_clientVCard); + client()->sendPacket(m_clientVCard); } /// This function requests the server for vCard of the connected user itself. diff --git a/src/QXmppVCardManager.h b/src/QXmppVCardManager.h index e77f698e..50c4be30 100644 --- a/src/QXmppVCardManager.h +++ b/src/QXmppVCardManager.h @@ -27,6 +27,7 @@ #include <QObject> +#include "QXmppClientExtension.h" #include "QXmppVCardIq.h" #define QXMPP_SUPRESS_INTERNAL_VCARD_WARNING @@ -58,12 +59,12 @@ class QXmppOutgoingClient; /// /// \ingroup Managers -class QXmppVCardManager : public QObject +class QXmppVCardManager : public QXmppClientExtension { Q_OBJECT public: - QXmppVCardManager(QXmppOutgoingClient* stream, QObject *parent = 0); + QXmppVCardManager(); QString requestVCard(const QString& bareJid = ""); const QXmppVCardIq& clientVCard() const; @@ -71,6 +72,11 @@ public: QString requestClientVCard(); bool isClientVCardReceived(); + /// \cond + QStringList discoveryFeatures() const; + bool handleStanza(QXmppStream *stream, const QDomElement &element); + /// \endcond + signals: /// This signal is emitted when the requested vCard is received /// after calling the requestVCard() function. @@ -85,9 +91,6 @@ signals: void vCardReceived(const QXmppVCard&); /// \endcond -private slots: - void vCardIqReceived(const QXmppVCardIq&); - private: // reference to the xmpp stream (no ownership) QXmppOutgoingClient* m_stream; |
