Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTomeu Vizoso <tomeu.vizoso@collabora.co.uk>2010-08-06 07:44:37 (GMT)
committer Tomeu Vizoso <tomeu.vizoso@collabora.co.uk>2010-08-20 13:02:27 (GMT)
commit419981d4156401cb10c076ee1ddc5be4ad035f30 (patch)
treef6573f080b3de35bae456ba51f9a8f515682414d
parented7a214442534ce5f8e8d5e819f5aba06dc93297 (diff)
Remove buddies and activities when the connection goes down
-rw-r--r--src/jarabe/model/neighborhood.py22
1 files changed, 22 insertions, 0 deletions
diff --git a/src/jarabe/model/neighborhood.py b/src/jarabe/model/neighborhood.py
index 9e20ab1..4fae702 100644
--- a/src/jarabe/model/neighborhood.py
+++ b/src/jarabe/model/neighborhood.py
@@ -233,6 +233,17 @@ class _Account(gobject.GObject):
'Connection.GetSelfHandle'))
self.emit('connected')
else:
+ for contact_handle, contact_id in self._buddy_handles.items():
+ self.emit('buddy-removed', contact_id)
+
+ for room_handle, activity_id in self._activity_handles.items():
+ self.emit('activity-removed', activity_id)
+
+ self._buddy_handles = {}
+ self._activity_handles = {}
+ self._buddies_per_activity = {}
+ self._activities_per_buddy = {}
+
self.emit('disconnected')
def __get_self_handle_cb(self, self_handle):
@@ -536,6 +547,7 @@ class Neighborhood(gobject.GObject):
def _connect_to_account(self, account):
account.connect('buddy-added', self.__buddy_added_cb)
account.connect('buddy-updated', self.__buddy_updated_cb)
+ account.connect('buddy-removed', self.__buddy_removed_cb)
account.connect('buddy-joined-activity',
self.__buddy_joined_activity_cb)
account.connect('buddy-left-activity', self.__buddy_left_activity_cb)
@@ -662,6 +674,16 @@ class Neighborhood(gobject.GObject):
if 'color' in properties:
buddy.props.color = XoColor(properties['color'])
+ def __buddy_removed_cb(self, account, contact_id):
+ logging.debug('__buddy_removed_cb %r', contact_id)
+ if contact_id not in self._buddies:
+ logging.debug('__buddy_removed_cb Unknown buddy with contact_id %r', contact_id)
+ return
+
+ buddy = self._buddies[contact_id]
+ del self._buddies[contact_id]
+ self.emit('buddy-removed', buddy)
+
def __activity_added_cb(self, account, room_handle, activity_id):
logging.debug('__activity_added_cb %r %r', room_handle, activity_id)
if activity_id in self._activities: