From be8f5fd37b142e8a6e76a29f6e5f15d5c8e2b7d5 Mon Sep 17 00:00:00 2001 From: Jeremy Lainé Date: Mon, 22 Feb 2010 09:25:36 +0000 Subject: clear roster when the XMPP stream gets disconnected --- source/QXmppRoster.cpp | 7 +++++++ source/QXmppRoster.h | 3 ++- source/QXmppStream.cpp | 6 ++++++ 3 files changed, 15 insertions(+), 1 deletion(-) 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(); + m_presences = QMap >(); + 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 > 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 @@ -86,6 +86,12 @@ QXmppStream::QXmppStream(QXmppClient* client) SLOT(socketError(QAbstractSocket::SocketError))); 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, -- cgit v1.2.3