-class AutoAcceptCall(object):
-
- def __init__(self, bus, conn, chan, on_success, on_error):
- self._sessionBus = bus
- self._conn = conn
- self._chan = chan
- self._outstandingRequests = []
- self._on_success = on_success
- self._on_error = on_error
-
- self._initiatorHandle = None
- self._initiatorID = None
- self._targetHandle = None
- self._targetID = None
- self._requested = None
- self._pendingHandles = None
-
- self._chan[DBUS_PROPERTIES].GetAll(
- telepathy.interfaces.CHANNEL_INTERFACE,
- reply_handler = self._on_got_all,
- error_handler = self._custom_error(self._on_got_all),
- )
- self._outstandingRequests.append(self._on_got_all)
-
- if False:
- # @bug Unsure why this isn't working
- self._chan[DBUS_PROPERTIES].Get(
- telepathy.interfaces.CHANNEL_INTERFACE_GROUP,
- 'LocalPendingMembers',
- reply_handler = self._on_got_pending_members,
- error_handler = self._custom_error(self._on_got_pending_members),
- )
- else:
- self._chan[telepathy.interfaces.CHANNEL_INTERFACE_GROUP].GetLocalPendingMembersWithInfo(
- reply_handler = self._on_got_pending_members,
- error_handler = self._custom_error(self._on_got_pending_members),
- )
- self._outstandingRequests.append(self._on_got_pending_members)
-
- def is_inbound(self):
- return not self._requested
- isInbound = self._targetHandle == self._initiatorHandle
- return isInbound
-
- @property
- def initiator(self):
- return self._initiatorID
-
- @property
- def target(self):
- return self._targetID
-
- def accept_call(self, on_accepted, on_error):
- self._chan[telepathy.interfaces.CHANNEL_INTERFACE_GROUP].AddMembers(
- self._pendingHandles,
- "",
- reply_handler = self._custom_on_accept(on_accepted),
- error_handler = self._custom_on_accept_error(on_error),
- )
-
- def _custom_on_accept(self, callback):
-
- def on_accept(*args):
- callback(self)
-
- return on_accept
-
- def _custom_on_accept_error(self, callback):
-
- def on_error(*args):
- callback(self, *args)
-
- return on_error
-
- def _custom_error(self, action):
-
- def _on_error(*args):
- _moduleLogger.error("Failed for %r (%r)" % (action, args))
- self._outstandingRequests.remove(action)
- if self._outstandingRequests:
- return
-
- self._on_error(self)
-
- return _on_error
-
- def _report_callback_done(self, action):
- _moduleLogger.debug("Succeded with %r" % (action, ))
- self._outstandingRequests.remove(action)
- if self._outstandingRequests:
- return
-
- assert None not in (
- self._initiatorHandle,
- self._initiatorID,
- self._targetHandle,
- self._targetID,
- self._pendingHandles,
- self._requested,
- )
-
- self._on_success(self)
-
- @gtk_toolbox.log_exception(_moduleLogger)
- def _on_got_all(self, properties):
- self._initiatorID = properties["InitiatorID"]
- self._initiatorHandle = properties["InitiatorHandle"]
- self._targetID = properties["InitiatorID"]
- self._targetHandle = properties["InitiatorHandle"]
- self._requested = properties["Requested"]
-
- self._report_callback_done(self._on_got_all)
-
- @gtk_toolbox.log_exception(_moduleLogger)
- def _on_got_pending_members(self, pendings):
- for pendingHandle, instigatorHandle, reason, message in pendings:
- print pendingHandle, instigatorHandle, reason, message
-
- self._pendingHandles = [pendingWithInfo[0] for pendingWithInfo in pendings]
-
- self._report_callback_done(self._on_got_pending_members)
-
-