Asynchronize activity sharing on the client side
This commit is contained in:
parent
17adb7b58b
commit
3abe79353a
@ -62,6 +62,7 @@ class Activity(Window, gtk.Container):
|
|||||||
self._activity_id = handle.activity_id
|
self._activity_id = handle.activity_id
|
||||||
self._pservice = presenceservice.get_instance()
|
self._pservice = presenceservice.get_instance()
|
||||||
self._service = None
|
self._service = None
|
||||||
|
self._share_sigid = None
|
||||||
|
|
||||||
service = handle.get_presence_service()
|
service = handle.get_presence_service()
|
||||||
if service:
|
if service:
|
||||||
@ -100,11 +101,20 @@ class Activity(Window, gtk.Container):
|
|||||||
self._service.join()
|
self._service.join()
|
||||||
self.present()
|
self.present()
|
||||||
|
|
||||||
|
def _share_cb(self, ps, success, service, err):
|
||||||
|
self._pservice.disconnect(self._share_sigid)
|
||||||
|
if success:
|
||||||
|
logging.debug('Share of activity %s successful.' % self.get_id())
|
||||||
|
self._service = service
|
||||||
|
self._shared = True
|
||||||
|
else:
|
||||||
|
logging.debug('Share of activity %s failed: %s.' % (self.get_id(), err))
|
||||||
|
|
||||||
def share(self):
|
def share(self):
|
||||||
"""Share the activity on the network."""
|
"""Request that the activity be shared on the network."""
|
||||||
logging.debug('Share activity %s on the network.' % self.get_id())
|
logging.debug('Requesting share of activity %s.' % self.get_id())
|
||||||
self._service = self._pservice.share_activity(self)
|
self._share_sigid = self._pservice.connect("activity-shared", self._share_cb)
|
||||||
self._shared = True
|
self._pservice.share_activity(self)
|
||||||
|
|
||||||
def execute(self, command, args):
|
def execute(self, command, args):
|
||||||
"""Execute the given command with args"""
|
"""Execute the given command with args"""
|
||||||
|
@ -16,6 +16,7 @@
|
|||||||
# Boston, MA 02111-1307, USA.
|
# Boston, MA 02111-1307, USA.
|
||||||
|
|
||||||
import dbus, dbus.glib, gobject
|
import dbus, dbus.glib, gobject
|
||||||
|
import logging
|
||||||
|
|
||||||
import buddy, activity
|
import buddy, activity
|
||||||
|
|
||||||
@ -59,7 +60,10 @@ class PresenceService(gobject.GObject):
|
|||||||
'activity-appeared': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE,
|
'activity-appeared': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE,
|
||||||
([gobject.TYPE_PYOBJECT])),
|
([gobject.TYPE_PYOBJECT])),
|
||||||
'activity-disappeared': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE,
|
'activity-disappeared': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE,
|
||||||
([gobject.TYPE_PYOBJECT]))
|
([gobject.TYPE_PYOBJECT])),
|
||||||
|
'activity-shared': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE,
|
||||||
|
([gobject.TYPE_PYOBJECT, gobject.TYPE_PYOBJECT,
|
||||||
|
gobject.TYPE_PYOBJECT]))
|
||||||
}
|
}
|
||||||
|
|
||||||
_PS_BUDDY_OP = DBUS_PATH + "/Buddies/"
|
_PS_BUDDY_OP = DBUS_PATH + "/Buddies/"
|
||||||
@ -178,12 +182,20 @@ class PresenceService(gobject.GObject):
|
|||||||
return None
|
return None
|
||||||
return self._new_object(owner_op)
|
return self._new_object(owner_op)
|
||||||
|
|
||||||
|
def _share_activity_cb(self, activity, op):
|
||||||
|
self.emit("activity-shared", True, self._new_object(op), None)
|
||||||
|
|
||||||
|
def _share_activity_error_cb(self, activity, err):
|
||||||
|
logging.debug("Error sharing activity %s: %s" % (activity.get_id(), err))
|
||||||
|
self.emit("activity-shared", False, None, err)
|
||||||
|
|
||||||
def share_activity(self, activity, properties={}):
|
def share_activity(self, activity, properties={}):
|
||||||
actid = activity.get_id()
|
actid = activity.get_id()
|
||||||
atype = activity.get_service_name()
|
atype = activity.get_service_name()
|
||||||
name = activity.props.title
|
name = activity.props.title
|
||||||
serv_op = self._ps.ShareActivity(actid, atype, name, properties)
|
self._ps.ShareActivity(actid, atype, name, properties,
|
||||||
return self._new_object(serv_op)
|
reply_handler=lambda *args: self._share_activity_cb(activity, *args),
|
||||||
|
error_handler=lambda *args: self._share_activity_error_cb(activity, *args))
|
||||||
|
|
||||||
|
|
||||||
class _MockPresenceService(gobject.GObject):
|
class _MockPresenceService(gobject.GObject):
|
||||||
|
Loading…
Reference in New Issue
Block a user