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