aboutsummaryrefslogtreecommitdiff
path: root/source/QXmppRoster.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'source/QXmppRoster.cpp')
-rw-r--r--source/QXmppRoster.cpp24
1 files changed, 18 insertions, 6 deletions
diff --git a/source/QXmppRoster.cpp b/source/QXmppRoster.cpp
index 8b2a821d..16b1bf89 100644
--- a/source/QXmppRoster.cpp
+++ b/source/QXmppRoster.cpp
@@ -80,14 +80,26 @@ void QXmppRoster::presenceReceived(const QXmppPresence& presence)
QString bareJid = jidToBareJid(jid);
QString resource = jidToResource(jid);
- if (presence.type() == QXmppPresence::Available)
- m_presences[bareJid][resource] = presence;
- else if (presence.type() == QXmppPresence::Unavailable)
- m_presences[bareJid].remove(resource);
- else
+ if (bareJid.isEmpty())
return;
- emit presenceChanged(bareJid, resource);
+ switch(presence.type())
+ {
+ case QXmppPresence::Available:
+ m_presences[bareJid][resource] = presence;
+ emit presenceChanged(bareJid, resource);
+ break;
+ case QXmppPresence::Unavailable:
+ m_presences[bareJid].remove(resource);
+ emit presenceChanged(bareJid, resource);
+ break;
+ case QXmppPresence::Subscribe:
+ if (m_stream->configuration().autoAcceptSubscriptions())
+ m_stream->acceptSubscriptionRequest(jid);
+ break;
+ default:
+ break;
+ }
}
void QXmppRoster::rosterIqReceived(const QXmppRosterIq& rosterIq)