aboutsummaryrefslogtreecommitdiff
path: root/src/QXmppRosterManager.cpp
diff options
context:
space:
mode:
authorJeremy Lainé <jeremy.laine@m4x.org>2011-05-18 08:15:45 +0000
committerJeremy Lainé <jeremy.laine@m4x.org>2011-05-18 08:15:45 +0000
commit6bee004d52df797e402e9a0c6feb21179f9389e6 (patch)
tree8ae35f3fe5fbf5b26a8aa820c1c106ed11bca198 /src/QXmppRosterManager.cpp
parentc8d0fcaa4d9887a74acc5174728d927af6c90717 (diff)
downloadqxmpp-6bee004d52df797e402e9a0c6feb21179f9389e6.tar.gz
add signals and slots for managing subscriptions (Closes: #92)
Diffstat (limited to 'src/QXmppRosterManager.cpp')
-rw-r--r--src/QXmppRosterManager.cpp108
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);
+}
+