summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sleekxmpp/basexmpp.py2
-rw-r--r--sleekxmpp/roster.py24
2 files changed, 25 insertions, 1 deletions
diff --git a/sleekxmpp/basexmpp.py b/sleekxmpp/basexmpp.py
index 460c01f3..4391ff48 100644
--- a/sleekxmpp/basexmpp.py
+++ b/sleekxmpp/basexmpp.py
@@ -595,7 +595,7 @@ class BaseXMPP(XMLStream):
def _handle_disconnected(self, event):
"""When disconnected, reset the roster"""
- self.roster = {}
+ self.roster.reset()
def _handle_stream_error(self, error):
self.event('stream_error', error)
diff --git a/sleekxmpp/roster.py b/sleekxmpp/roster.py
index 60a13c11..043981e3 100644
--- a/sleekxmpp/roster.py
+++ b/sleekxmpp/roster.py
@@ -105,6 +105,14 @@ class Roster(object):
for node in self._rosters:
self._rosters[node].set_backend(db)
+ def reset(self):
+ """
+ Reset the state of the roster to forget any current
+ presence information. Useful after a disconnection occurs.
+ """
+ for node in self:
+ self[node].reset()
+
class RosterNode(object):
@@ -305,6 +313,15 @@ class RosterNode(object):
return self[jid].resources.get(resource,
default_presence)
+ def reset(self):
+ """
+ Reset the state of the roster to forget any current
+ presence information. Useful after a disconnection occurs.
+ """
+ for jid in self:
+ self[jid].reset()
+
+
class RosterItem(object):
@@ -725,3 +742,10 @@ class RosterItem(object):
self.subscribe()
if not self['to']:
self._unsubscribed()
+
+ def reset(self):
+ """
+ Forgot current resource presence information as part of
+ a roster reset request.
+ """
+ self.resources = {}