aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeremy Lainé <jeremy.laine@m4x.org>2010-02-22 09:25:36 +0000
committerJeremy Lainé <jeremy.laine@m4x.org>2010-02-22 09:25:36 +0000
commitbe8f5fd37b142e8a6e76a29f6e5f15d5c8e2b7d5 (patch)
treefdf692d6c66943560fda93a4f1f410bfbb360663
parent3e8b1bd1697696dcbd14ef8f7c24701d4b04eede (diff)
downloadqxmpp-be8f5fd37b142e8a6e76a29f6e5f15d5c8e2b7d5.tar.gz
clear roster when the XMPP stream gets disconnected
-rw-r--r--source/QXmppRoster.cpp7
-rw-r--r--source/QXmppRoster.h3
-rw-r--r--source/QXmppStream.cpp6
3 files changed, 15 insertions, 1 deletions
diff --git a/source/QXmppRoster.cpp b/source/QXmppRoster.cpp
index 84b98ed5..9d272cfa 100644
--- a/source/QXmppRoster.cpp
+++ b/source/QXmppRoster.cpp
@@ -38,6 +38,13 @@ QXmppRoster::~QXmppRoster()
}
+void QXmppRoster::disconnected()
+{
+ m_entries = QMap<QString, QXmppRoster::QXmppRosterEntry>();
+ m_presences = QMap<QString, QMap<QString, QXmppPresence> >();
+ m_isRosterReceived = false;
+}
+
void QXmppRoster::presenceReceived(const QXmppPresence& presence)
{
QString jid = presence.getFrom();
diff --git a/source/QXmppRoster.h b/source/QXmppRoster.h
index 1d585ec7..110b4a0a 100644
--- a/source/QXmppRoster.h
+++ b/source/QXmppRoster.h
@@ -138,9 +138,10 @@ private:
// map of resources of the jid and map of resouces and presences
QMap<QString, QMap<QString, QXmppPresence> > m_presences;
// flag to store that QXmppRoster has been populated
- bool m_isRosterReceived ;
+ bool m_isRosterReceived;
private slots:
+ void disconnected();
void presenceReceived(const QXmppPresence&);
void rosterIqReceived(const QXmppRosterIq&);
void rosterRequestIqReceived(const QXmppRosterIq&);
diff --git a/source/QXmppStream.cpp b/source/QXmppStream.cpp
index d089935d..11f801a6 100644
--- a/source/QXmppStream.cpp
+++ b/source/QXmppStream.cpp
@@ -87,6 +87,12 @@ QXmppStream::QXmppStream(QXmppClient* client)
Q_ASSERT(check);
check = QObject::connect(this,
+ SIGNAL(disconnected()),
+ &m_roster,
+ SLOT(disconnected()));
+ Q_ASSERT(check);
+
+ check = QObject::connect(this,
SIGNAL(presenceReceived(const QXmppPresence&)),
&m_roster,
SLOT(presenceReceived(const QXmppPresence&)));