diff --git a/shell/model/Owner.py b/shell/model/Owner.py index 299e74fc..87e49cae 100644 --- a/shell/model/Owner.py +++ b/shell/model/Owner.py @@ -66,6 +66,8 @@ class ShellOwner(gobject.GObject): self._icon_hash = util.printable_hash(digest) self._pservice = presenceservice.get_instance() + self._pservice.connect('activity-invitation', + self._activity_invitation_cb) self._invites = Invites() @@ -75,7 +77,6 @@ class ShellOwner(gobject.GObject): def get_nick(self): return self._nick - def _handle_invite(self, issuer, bundle_id, activity_id): - """XMLRPC method, called when the owner is invited to an activity.""" - self._invites.add_invite(issuer, bundle_id, activity_id) - return '' + def _activity_invitation_cb(self, pservice, activity, buddy, message): + self._invites.add_invite(buddy, activity.props.type, + activity.props.id) diff --git a/shell/view/ActivityHost.py b/shell/view/ActivityHost.py index fa3aaf61..b22cd2b9 100644 --- a/shell/view/ActivityHost.py +++ b/shell/view/ActivityHost.py @@ -16,6 +16,9 @@ import gtk import dbus +import logging + +from sugar.presence import presenceservice import OverlayWindow @@ -62,7 +65,15 @@ class ActivityHost: return self._model def invite(self, buddy): - pass + pservice = presenceservice.get_instance() + activity = pservice.get_activity(self.get_id()) + if activity is None: + logging.error('Invite failed, %s is unknown.' % self.get_id()) + activity.invite(buddy.get_buddy(), '', self._invite_response_cb) + + def _invite_response_cb(self, error): + if error: + logging.error('Invite failed: %s' % error) def present(self): # wnck.Window.activate() expects a timestamp, but we don't