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