Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--NEWS1
-rw-r--r--shell/model/Invites.py18
-rw-r--r--shell/model/Owner.py5
3 files changed, 20 insertions, 4 deletions
diff --git a/NEWS b/NEWS
index 9f539a5..3d99f7a 100644
--- a/NEWS
+++ b/NEWS
@@ -1,3 +1,4 @@
+* #3514 Remove invite when the activiy disappear from the mesh. (cassidy)
* #3003 Make image drags on the clipboard work consistently. (marco)
Snapshot 8ef6c57f8b
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)