diff options
| author | Jeremy Lainé <jeremy.laine@m4x.org> | 2011-05-18 08:15:45 +0000 |
|---|---|---|
| committer | Jeremy Lainé <jeremy.laine@m4x.org> | 2011-05-18 08:15:45 +0000 |
| commit | 6bee004d52df797e402e9a0c6feb21179f9389e6 (patch) | |
| tree | 8ae35f3fe5fbf5b26a8aa820c1c106ed11bca198 /src/QXmppRosterManager.cpp | |
| parent | c8d0fcaa4d9887a74acc5174728d927af6c90717 (diff) | |
| download | qxmpp-6bee004d52df797e402e9a0c6feb21179f9389e6.tar.gz | |
add signals and slots for managing subscriptions (Closes: #92)
Diffstat (limited to 'src/QXmppRosterManager.cpp')
| -rw-r--r-- | src/QXmppRosterManager.cpp | 108 |
1 files changed, 67 insertions, 41 deletions
diff --git a/src/QXmppRosterManager.cpp b/src/QXmppRosterManager.cpp index 92b150ea..0dfda018 100644 --- a/src/QXmppRosterManager.cpp +++ b/src/QXmppRosterManager.cpp @@ -48,6 +48,18 @@ QXmppRosterManager::QXmppRosterManager(QXmppClient* client) Q_ASSERT(check); } +/// Accepts a subscription request. +/// +/// You can call this method in reply to the subscriptionRequest() signal. + +bool QXmppRosterManager::acceptSubscription(const QString &bareJid) +{ + QXmppPresence presence; + presence.setTo(bareJid); + presence.setType(QXmppPresence::Subscribed); + return client()->sendPacket(presence); +} + /// Upon XMPP connection, request the roster. /// void QXmppRosterManager::connected() @@ -89,9 +101,9 @@ bool QXmppRosterManager::handleStanza(const QDomElement &element) void QXmppRosterManager::presenceReceived(const QXmppPresence& presence) { - QString jid = presence.from(); - QString bareJid = jidToBareJid(jid); - QString resource = jidToResource(jid); + const QString jid = presence.from(); + const QString bareJid = jidToBareJid(jid); + const QString resource = jidToResource(jid); if (bareJid.isEmpty()) return; @@ -110,15 +122,12 @@ void QXmppRosterManager::presenceReceived(const QXmppPresence& presence) if (client()->configuration().autoAcceptSubscriptions()) { // accept subscription request - QXmppPresence presence; - presence.setTo(jid); - presence.setType(QXmppPresence::Subscribed); - client()->sendPacket(presence); + acceptSubscription(bareJid); // ask for reciprocal subscription - presence.setTo(bareJid); - presence.setType(QXmppPresence::Subscribe); - client()->sendPacket(presence); + subscribe(bareJid); + } else { + emit subscriptionReceived(bareJid); } break; default: @@ -126,14 +135,26 @@ void QXmppRosterManager::presenceReceived(const QXmppPresence& presence) } } +/// Refuses a subscription request. +/// +/// You can call this method in reply to the subscriptionRequest() signal. + +bool QXmppRosterManager::refuseSubscription(const QString &bareJid) +{ + QXmppPresence presence; + presence.setTo(bareJid); + presence.setType(QXmppPresence::Unsubscribed); + return client()->sendPacket(presence); +} + /// Removes a roster entry and cancels subscriptions to and from the contact. /// /// As a result, the server will initiate a roster push, causing the -/// rosterChanged() signal to be emitted. +/// itemRemoved() signal to be emitted. /// /// \param bareJid -void QXmppRosterManager::removeRosterEntry(const QString &bareJid) +bool QXmppRosterManager::removeItem(const QString &bareJid) { QXmppRosterIq::Item item; item.setBareJid(bareJid); @@ -142,7 +163,7 @@ void QXmppRosterManager::removeRosterEntry(const QString &bareJid) QXmppRosterIq iq; iq.setType(QXmppIq::Set); iq.addItem(item); - client()->sendPacket(iq); + return client()->sendPacket(iq); } void QXmppRosterManager::rosterIqReceived(const QXmppRosterIq& rosterIq) @@ -206,6 +227,32 @@ void QXmppRosterManager::rosterIqReceived(const QXmppRosterIq& rosterIq) } } +/// Requests a subscription to the given contact. +/// +/// As a result, the server will initiate a roster push, causing the +/// itemAdded() or itemChanged() signal to be emitted. + +bool QXmppRosterManager::subscribe(const QString &bareJid) +{ + QXmppPresence packet; + packet.setTo(jidToBareJid(bareJid)); + packet.setType(QXmppPresence::Subscribe); + return client()->sendPacket(packet); +} + +/// Removes a subscription to the given contact. +/// +/// As a result, the server will initiate a roster push, causing the +/// itemChanged() signal to be emitted. + +bool QXmppRosterManager::unsubscribe(const QString &bareJid) +{ + QXmppPresence packet; + packet.setTo(jidToBareJid(bareJid)); + packet.setType(QXmppPresence::Unsubscribe); + return client()->sendPacket(packet); +} + /// Function to get all the bareJids present in the roster. /// /// \return QStringList list of all the bareJids @@ -232,20 +279,6 @@ QXmppRosterIq::Item QXmppRosterManager::getRosterEntry( return QXmppRosterIq::Item(); } -/// [OBSOLETE] Returns all the roster entries in the database. -/// -/// \return Map of bareJid and its respective QXmppRosterIq::Item -/// -/// \note This function is obsolete, use getRosterBareJids() and -/// getRosterEntry() to get all the roster entries. -/// - -QMap<QString, QXmppRosterIq::Item> - QXmppRosterManager::getRosterEntries() const -{ - return m_entries; -} - /// Get all the associated resources with the given bareJid. /// /// \param bareJid as a QString @@ -298,20 +331,6 @@ QXmppPresence QXmppRosterManager::getPresence(const QString& bareJid, } } -/// [OBSOLETE] Returns all the presence entries in the database. -/// -/// \return Map of bareJid and map of resource and its presence that is -/// QMap<QString, QMap<QString, QXmppPresence> > -/// -/// \note This function is obsolete, use getRosterBareJids(), getResources() -/// and getPresence() or getAllPresencesForBareJid() -/// to get all the presence entries. - -QMap<QString, QMap<QString, QXmppPresence> > QXmppRosterManager::getAllPresences() const -{ - return m_presences; -} - /// Function to check whether the roster has been received or not. /// /// \return true if roster received else false @@ -321,3 +340,10 @@ bool QXmppRosterManager::isRosterReceived() return m_isRosterReceived; } +// deprecated + +void QXmppRosterManager::removeRosterEntry(const QString &bareJid) +{ + removeItem(bareJid); +} + |
