6 import dbus.mainloop.glib
7 dbus.mainloop.glib.DBusGMainLoop(set_as_default = True)
13 reg = telepathy.client.ManagerRegistry()
18 def get_connection_manager(reg):
19 cm = reg.GetManager('theonering')
28 def queue_action(self):
31 def append_action(self, action):
32 assert self._action is None
36 if self._action is None:
38 self._action.queue_action()
40 def _on_error(self, error):
43 def _on_generic_message(self, *args):
47 class DummyAction(Action):
49 def queue_action(self):
50 gobject.idle_add(self._on_done)
53 class QuitLoop(Action):
55 def __init__(self, loop):
56 super(QuitLoop, self).__init__()
59 def queue_action(self):
63 class DisplayParams(Action):
65 def __init__(self, cm):
66 super(DisplayParams, self).__init__()
69 def queue_action(self):
70 self._cm[telepathy.interfaces.CONN_MGR_INTERFACE].GetParameters(
72 reply_handler = self._on_done,
73 error_handler = self._on_error,
76 def _on_done(self, params):
77 print "Connection Parameters:"
78 for name, flags, signature, default in params:
79 print "\t%s (%s)" % (name, signature),
81 if flags & telepathy.constants.CONN_MGR_PARAM_FLAG_REQUIRED:
83 if flags & telepathy.constants.CONN_MGR_PARAM_FLAG_REGISTER:
85 if flags & telepathy.constants.CONN_MGR_PARAM_FLAG_SECRET:
87 if flags & telepathy.constants.CONN_MGR_PARAM_FLAG_DBUS_PROPERTY:
88 print "dbus-property",
89 if flags & telepathy.constants.CONN_MGR_PARAM_FLAG_HAS_DEFAULT:
90 print "has-default(%s)" % default,
93 super(DisplayParams, self)._on_done()
96 class Connect(Action):
98 def __init__(self, cm, username, password, forward):
99 super(Connect, self).__init__()
102 self._username = username
103 self._password = password
104 self._forward = forward
110 def queue_action(self):
111 self._cm[telepathy.server.CONNECTION_MANAGER].RequestConnection(
114 'username': self._username,
115 'password': self._password,
116 'forward': self._forward,
118 reply_handler = self._on_connection_requested,
119 error_handler = self._on_error,
122 def _on_connection_requested(self, busName, objectPath):
123 self._conn = telepathy.client.Connection(busName, objectPath)
124 self._conn[telepathy.server.CONNECTION].connect_to_signal(
128 self._conn[telepathy.server.CONNECTION].Connect(
129 reply_handler = self._on_generic_message,
130 error_handler = self._on_error,
134 super(Connect, self)._on_done()
136 def _on_change(self, status, reason):
137 if status == telepathy.constants.CONNECTION_STATUS_DISCONNECTED:
138 print "Disconnected!"
140 elif status == telepathy.constants.CONNECTION_STATUS_CONNECTED:
143 elif status == telepathy.constants.CONNECTION_STATUS_CONNECTING:
146 print "Status: %r" % status
149 class UserHandle(Action):
151 def __init__(self, connAction):
152 super(UserHandle, self).__init__()
153 self._connAction = connAction
162 return [self._handle]
164 def queue_action(self):
165 self._connAction.conn[telepathy.server.CONNECTION].GetSelfHandle(
166 reply_handler = self._on_done,
167 error_handler = self._on_error,
170 def _on_done(self, handle):
171 self._handle = handle
172 super(UserHandle, self)._on_done()
175 class RequestContactListHandle(Action):
177 def __init__(self, connAction):
178 super(RequestContactListHandle, self).__init__()
179 self._connAction = connAction
188 return [self._handle]
190 def queue_action(self):
193 def _on_done(self, handles):
194 self._handle = handles[0]
195 super(RequestContactListHandle, self)._on_done()
198 class RequestContactListChannel(Action):
200 def __init__(self, connAction, handleAction):
201 super(RequestContactListChannel, self).__init__()
202 self._connAction = connAction
203 self._handleAction = handleAction
210 def queue_action(self):
213 def _on_done(self, channel):
214 self._channel = channel
215 super(RequestContactListChannel, self)._on_done()
218 class ContactHandles(Action):
220 def __init__(self, connAction):
221 super(UserHandle, self).__init__()
222 self._connAction = connAction
229 def queue_action(self):
232 def _on_done(self, handle):
233 super(UserHandle, self)._on_done()
236 class Aliases(Action):
238 def __init__(self, connAction, handleAction):
239 super(Aliases, self).__init__()
240 self._connAction = connAction
241 self._handleAction = handleAction
243 def queue_action(self):
244 self._connAction.conn[telepathy.server.CONNECTION_INTERFACE_ALIASING].RequestAliases(
245 self._handleAction.handles,
246 reply_handler = self._on_done,
247 error_handler = self._on_error,
250 def _on_done(self, aliases):
252 for alias in aliases:
254 super(Aliases, self)._on_done()
257 class Disconnect(Action):
259 def __init__(self, connAction):
260 super(Disconnect, self).__init__()
261 self._connAction = connAction
263 def queue_action(self):
264 self._connAction.conn[telepathy.server.CONNECTION].Disconnect(
265 reply_handler = self._on_done,
266 error_handler = self._on_error,
270 if __name__ == '__main__':
271 loop = gobject.MainLoop()
274 cm = get_connection_manager(reg)
276 dummy = DummyAction()
281 dp = DisplayParams(cm)
282 lastAction.append_action(dp)
286 username = sys.argv[1]
287 password = sys.argv[2]
288 forward = sys.argv[3]
289 con = Connect(cm, username, password, forward)
290 lastAction.append_action(con)
295 lastAction.append_action(uh)
298 ua = Aliases(con, uh)
299 lastAction.append_action(ua)
302 dis = Disconnect(con)
303 lastAction.append_action(dis)
306 quitter = QuitLoop(loop)
307 lastAction.append_action(quitter)
310 firstAction.queue_action()