From d21e4c7ceea5af019c42526adf3d668a3d1e3ae8 Mon Sep 17 00:00:00 2001 From: Guillaume Desmottes Date: Mon, 17 Sep 2007 12:03:15 +0000 Subject: Remove invite when the activiy disappear from the mesh. (#3514) --- (limited to 'shell') diff --git a/shell/model/Invites.py b/shell/model/Invites.py index a94a469..d4779f1 100644 --- a/shell/model/Invites.py +++ b/shell/model/Invites.py @@ -39,16 +39,26 @@ class Invites(gobject.GObject): def __init__(self): gobject.GObject.__init__(self) - self._list = [] + self._dict = {} def add_invite(self, issuer, bundle_id, activity_id): + if activity_id in self._dict: + # there is no point to add more than one time + # an invite for the same activity + return + invite = Invite(issuer, bundle_id, activity_id) - self._list.append(invite) + self._dict[activity_id] = invite self.emit('invite-added', invite) def remove_invite(self, invite): - self._list.remove(invite) + self._dict.pop(invite.get_activity_id()) self.emit('invite-removed', invite) + def remove_activity(self, activity_id): + invite = self._dict.get(activity_id) + if invite is not None: + self.remove_invite(invite) + def __iter__(self): - return self._list.__iter__() + return self._dict.values().__iter__() diff --git a/shell/model/Owner.py b/shell/model/Owner.py index 0abc13a..49aed35 100644 --- a/shell/model/Owner.py +++ b/shell/model/Owner.py @@ -68,6 +68,8 @@ class ShellOwner(gobject.GObject): self._pservice = presenceservice.get_instance() self._pservice.connect('activity-invitation', self._activity_invitation_cb) + self._pservice.connect('activity-disappeared', + self._activity_disappeared_cb) self._invites = Invites() @@ -80,3 +82,6 @@ class ShellOwner(gobject.GObject): def _activity_invitation_cb(self, pservice, activity, buddy, message): self._invites.add_invite(buddy, activity.props.type, activity.props.id) + + def _activity_disappeared_cb(self, pservice, activity): + self._invites.remove_activity(activity.props.id) -- cgit v0.9.1