6 import dbus.mainloop.glib
7 dbus.mainloop.glib.DBusGMainLoop(set_as_default = True)
12 DBUS_PROPERTIES = 'org.freedesktop.DBus.Properties'
16 reg = telepathy.client.ManagerRegistry()
21 def get_connection_manager(reg):
22 cm = reg.GetManager('theonering')
31 def queue_action(self):
34 def append_action(self, action):
35 assert self._action is None
39 if self._action is None:
41 self._action.queue_action()
43 def _on_error(self, error):
46 def _on_generic_message(self, *args):
50 class DummyAction(Action):
52 def queue_action(self):
53 gobject.idle_add(self._on_done)
56 class QuitLoop(Action):
58 def __init__(self, loop):
59 super(QuitLoop, self).__init__()
62 def queue_action(self):
66 class DisplayParams(Action):
68 def __init__(self, cm):
69 super(DisplayParams, self).__init__()
72 def queue_action(self):
73 self._cm[telepathy.interfaces.CONN_MGR_INTERFACE].GetParameters(
75 reply_handler = self._on_done,
76 error_handler = self._on_error,
79 def _on_done(self, params):
80 print "Connection Parameters:"
81 for name, flags, signature, default in params:
82 print "\t%s (%s)" % (name, signature),
84 if flags & telepathy.constants.CONN_MGR_PARAM_FLAG_REQUIRED:
86 if flags & telepathy.constants.CONN_MGR_PARAM_FLAG_REGISTER:
88 if flags & telepathy.constants.CONN_MGR_PARAM_FLAG_SECRET:
90 if flags & telepathy.constants.CONN_MGR_PARAM_FLAG_DBUS_PROPERTY:
91 print "dbus-property",
92 if flags & telepathy.constants.CONN_MGR_PARAM_FLAG_HAS_DEFAULT:
93 print "has-default(%s)" % default,
96 super(DisplayParams, self)._on_done()
99 class Connect(Action):
101 def __init__(self, cm, username, password, forward):
102 super(Connect, self).__init__()
106 self._serviceName = None
108 self._username = username
109 self._password = password
110 self._forward = forward
117 def serviceName(self):
118 return self._serviceName
120 def queue_action(self):
121 self._cm[telepathy.server.CONNECTION_MANAGER].RequestConnection(
124 'username': self._username,
125 'password': self._password,
126 'forward': self._forward,
128 reply_handler = self._on_connection_requested,
129 error_handler = self._on_error,
132 def _on_connection_requested(self, busName, objectPath):
133 self._serviceName = busName
134 self._conn = telepathy.client.Connection(busName, objectPath)
135 self._conn[telepathy.server.CONNECTION].connect_to_signal(
139 self._conn[telepathy.server.CONNECTION].Connect(
140 reply_handler = self._on_generic_message,
141 error_handler = self._on_error,
145 super(Connect, self)._on_done()
147 def _on_change(self, status, reason):
148 if status == telepathy.constants.CONNECTION_STATUS_DISCONNECTED:
149 print "Disconnected!"
151 elif status == telepathy.constants.CONNECTION_STATUS_CONNECTED:
154 elif status == telepathy.constants.CONNECTION_STATUS_CONNECTING:
157 print "Status: %r" % status
160 class SimplePresenceOptions(Action):
162 def __init__(self, connAction):
163 super(SimplePresenceOptions, self).__init__()
164 self._connAction = connAction
166 def queue_action(self):
167 self._connAction.conn[DBUS_PROPERTIES].Get(
168 telepathy.server.CONNECTION_INTERFACE_SIMPLE_PRESENCE,
170 reply_handler = self._on_done,
171 error_handler = self._on_error,
174 def _on_done(self, statuses):
175 print "\tAvailable Statuses"
176 for (key, value) in statuses.iteritems():
177 print "\t\t - %s" % key
178 super(SimplePresenceOptions, self)._on_done()
181 class NullHandle(object):
192 class UserHandle(Action):
194 def __init__(self, connAction):
195 super(UserHandle, self).__init__()
196 self._connAction = connAction
205 return [self._handle]
207 def queue_action(self):
208 self._connAction.conn[telepathy.server.CONNECTION].GetSelfHandle(
209 reply_handler = self._on_done,
210 error_handler = self._on_error,
213 def _on_done(self, handle):
214 self._handle = handle
215 super(UserHandle, self)._on_done()
218 class RequestHandle(Action):
220 def __init__(self, connAction, handleType, handleNames):
221 super(RequestHandle, self).__init__()
222 self._connAction = connAction
224 self._handleType = handleType
225 self._handleNames = handleNames
233 return [self._handle]
235 def queue_action(self):
236 self._connAction.conn[telepathy.server.CONNECTION].RequestHandles(
239 reply_handler = self._on_done,
240 error_handler = self._on_error,
243 def _on_done(self, handles):
244 self._handle = handles[0]
245 super(RequestHandle, self)._on_done()
248 class RequestChannel(Action):
250 def __init__(self, connAction, handleAction, channelType, handleType):
251 super(RequestChannel, self).__init__()
252 self._connAction = connAction
253 self._handleAction = handleAction
255 self._channelType = channelType
256 self._handleType = handleType
262 def queue_action(self):
263 self._connAction.conn[telepathy.server.CONNECTION].RequestChannel(
266 self._handleAction.handle,
268 reply_handler = self._on_done,
269 error_handler = self._on_error,
272 def _on_done(self, channelObjectPath):
273 self._channel = telepathy.client.Channel(self._connAction.serviceName, channelObjectPath)
274 super(RequestChannel, self)._on_done()
277 class ContactHandles(Action):
279 def __init__(self, connAction, chanAction):
280 super(ContactHandles, self).__init__()
281 self._connAction = connAction
282 self._chanAction = chanAction
289 def queue_action(self):
290 self._chanAction.channel[DBUS_PROPERTIES].Get(
291 telepathy.server.CHANNEL_INTERFACE_GROUP,
293 reply_handler = self._on_done,
294 error_handler = self._on_error,
297 def _on_done(self, handles):
298 self._handles = list(handles)
299 super(ContactHandles, self)._on_done()
302 class SimplePresenceStatus(Action):
304 def __init__(self, connAction, handleAction):
305 super(SimplePresenceStatus, self).__init__()
306 self._connAction = connAction
307 self._handleAction = handleAction
309 def queue_action(self):
310 self._connAction.conn[telepathy.server.CONNECTION_INTERFACE_SIMPLE_PRESENCE].GetPresences(
311 self._handleAction.handles,
312 reply_handler = self._on_done,
313 error_handler = self._on_error,
316 def _on_done(self, aliases):
318 for hid, (presenceType, presence, presenceMessage) in aliases.iteritems():
319 print "\t\t%s:" % hid, presenceType, presence, presenceMessage
320 super(SimplePresenceStatus, self)._on_done()
323 class SetSimplePresence(Action):
325 def __init__(self, connAction, status, message):
326 super(SetSimplePresence, self).__init__()
327 self._connAction = connAction
328 self._status = status
329 self._message = message
331 def queue_action(self):
332 self._connAction.conn[telepathy.server.CONNECTION_INTERFACE_SIMPLE_PRESENCE].SetPresence(
335 reply_handler = self._on_done,
336 error_handler = self._on_error,
340 super(SetSimplePresence, self)._on_done()
343 class Aliases(Action):
345 def __init__(self, connAction, handleAction):
346 super(Aliases, self).__init__()
347 self._connAction = connAction
348 self._handleAction = handleAction
350 def queue_action(self):
351 self._connAction.conn[telepathy.server.CONNECTION_INTERFACE_ALIASING].RequestAliases(
352 self._handleAction.handles,
353 reply_handler = self._on_done,
354 error_handler = self._on_error,
357 def _on_done(self, aliases):
359 for alias in aliases:
361 super(Aliases, self)._on_done()
366 def __init__(self, connAction, chanAction, handleAction):
367 super(Call, self).__init__()
368 self._connAction = connAction
369 self._chanAction = chanAction
370 self._handleAction = handleAction
372 def queue_action(self):
373 self._chanAction.channel[telepathy.server.CHANNEL_TYPE_STREAMED_MEDIA].RequestStreams(
374 self._handleAction.handle,
375 [telepathy.constants.MEDIA_STREAM_TYPE_AUDIO],
376 reply_handler = self._on_done,
377 error_handler = self._on_error,
380 def _on_done(self, handle):
382 super(Call, self)._on_done()
385 class SendText(Action):
387 def __init__(self, connAction, chanAction, handleAction, messageType, message):
388 super(SendText, self).__init__()
389 self._connAction = connAction
390 self._chanAction = chanAction
391 self._handleAction = handleAction
392 self._messageType = messageType
393 self._message = message
395 def queue_action(self):
396 self._chanAction.channel[telepathy.server.CHANNEL_TYPE_TEXT].Send(
399 reply_handler = self._on_done,
400 error_handler = self._on_error,
405 super(SendText, self)._on_done()
410 def __init__(self, length):
411 super(Sleep, self).__init__()
412 self._length = length
414 def queue_action(self):
415 gobject.timeout_add(self._length, self._on_done)
421 super(Block, self).__init__()
423 def queue_action(self):
427 #super(SendText, self)._on_done()
431 class Disconnect(Action):
433 def __init__(self, connAction):
434 super(Disconnect, self).__init__()
435 self._connAction = connAction
437 def queue_action(self):
438 self._connAction.conn[telepathy.server.CONNECTION].Disconnect(
439 reply_handler = self._on_done,
440 error_handler = self._on_error,
444 if __name__ == '__main__':
445 loop = gobject.MainLoop()
448 cm = get_connection_manager(reg)
450 nullHandle = NullHandle()
452 dummy = DummyAction()
457 dp = DisplayParams(cm)
458 lastAction.append_action(dp)
462 username = sys.argv[1]
463 password = sys.argv[2]
464 forward = sys.argv[3]
465 con = Connect(cm, username, password, forward)
466 lastAction.append_action(con)
470 spo = SimplePresenceOptions(con)
471 lastAction.append_action(spo)
476 lastAction.append_action(uh)
479 ua = Aliases(con, uh)
480 lastAction.append_action(ua)
483 sps = SimplePresenceStatus(con, uh)
484 lastAction.append_action(sps)
488 setdnd = SetSimplePresence(con, "dnd", "")
489 lastAction.append_action(setdnd)
492 sps = SimplePresenceStatus(con, uh)
493 lastAction.append_action(sps)
496 setdnd = SetSimplePresence(con, "available", "")
497 lastAction.append_action(setdnd)
500 sps = SimplePresenceStatus(con, uh)
501 lastAction.append_action(sps)
505 rclh = RequestHandle(con, telepathy.HANDLE_TYPE_LIST, ["subscribe"])
506 lastAction.append_action(rclh)
509 rclc = RequestChannel(
512 telepathy.CHANNEL_TYPE_CONTACT_LIST,
513 telepathy.HANDLE_TYPE_LIST,
515 lastAction.append_action(rclc)
518 ch = ContactHandles(con, rclc)
519 lastAction.append_action(ch)
522 ca = Aliases(con, ch)
523 lastAction.append_action(ca)
527 rch = RequestHandle(con, telepathy.HANDLE_TYPE_CONTACT, ["18005558355"]) #(1-800-555-TELL)
528 lastAction.append_action(rch)
531 # making a phone call
534 smHandleType = telepathy.HANDLE_TYPE_CONTACT
536 smHandle = nullHandle
537 smHandleType = telepathy.HANDLE_TYPE_NONE
538 rsmc = RequestChannel(
541 telepathy.CHANNEL_TYPE_STREAMED_MEDIA,
544 lastAction.append_action(rsmc)
548 call = Call(con, rsmc, rch)
549 lastAction.append_action(call)
553 rtc = RequestChannel(
556 telepathy.CHANNEL_TYPE_TEXT,
559 lastAction.append_action(rtc)
563 sendtext = SendText(con, rtc, rch, telepathy.CHANNEL_TEXT_MESSAGE_TYPE_NORMAL, "Boo!")
564 lastAction.append_action(sendtext)
565 lastAction = sendtext
569 lastAction.append_action(bl)
573 sl = Sleep(30 * 1000)
574 lastAction.append_action(sl)
577 dis = Disconnect(con)
578 lastAction.append_action(dis)
581 quitter = QuitLoop(loop)
582 lastAction.append_action(quitter)
585 firstAction.queue_action()