Forgot to add some files to previous commit
[theonering] / src / connection_manager.py
1 import logging
2
3 import gobject
4 import telepathy
5
6 import connection
7
8
9 class TheOneRingConnectionManager(telepathy.server.ConnectionManager):
10
11         def __init__(self, shutdown_func=None):
12                 telepathy.server.ConnectionManager.__init__(self, 'theonering')
13
14                 self._protos['gvoice'] = connection.TheOneRingConnection
15                 self._on_shutdown = shutdown_func
16                 logging.info("Connection manager created")
17
18         def GetParameters(self, proto):
19                 """
20                 org.freedesktop.telepathy.ConnectionManager
21
22                 @returns the mandatory and optional parameters for creating a connection
23                 """
24                 if proto not in self._protos:
25                         raise telepathy.NotImplemented('unknown protocol %s' % proto)
26
27                 result = []
28                 connection_class = self._protos[proto]
29                 mandatory_parameters = connection_class._mandatory_parameters
30                 optional_parameters = connection_class._optional_parameters
31                 default_parameters = connection_class._parameter_defaults
32
33                 for parameter_name, parameter_type in mandatory_parameters.iteritems():
34                         param = (
35                                 parameter_name,
36                                 telepathy.CONN_MGR_PARAM_FLAG_REQUIRED,
37                                 parameter_type,
38                                 '',
39                         )
40                         result.append(param)
41
42                 for parameter_name, parameter_type in optional_parameters.iteritems():
43                         if parameter_name in default_parameters:
44                                 param = (
45                                         parameter_name,
46                                         telepathy.CONN_MGR_PARAM_FLAG_HAS_DEFAULT,
47                                         parameter_name,
48                                         default_parameters[parameter_name],
49                                 )
50                         else:
51                                 param = (parameter_name, 0, parameter_name, '')
52                         result.append(param)
53
54                 return result
55
56         def disconnected(self, conn):
57                 result = telepathy.server.ConnectionManager.disconnected(self, conn)
58                 gobject.timeout_add(5000, self.shutdown)
59
60         def quit(self):
61                 """
62                 Terminates all connections. Must be called upon quit
63                 """
64                 for connection in self._connections:
65                         connection.Disconnect()
66                 logging.info("Connection manager quitting")
67
68         def _shutdown(self):
69                 if (
70                         self._on_shutdown is not None and
71                         len(self._connections) == 0
72                 ):
73                         self._on_shutdown()
74                 return False