Yay, renaming
[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                         flags = telepathy.CONN_MGR_PARAM_FLAG_REQUIRED
39                         if parameterName == "password":
40                                 flags |= telepathy.CONN_MGR_PARAM_FLAG_SECRET
41                         param = (
42                                 parameterName,
43                                 flags,
44                                 parameterType,
45                                 '',
46                         )
47                         result.append(param)
48
49                 for parameterName, parameterType in optionalParameters.iteritems():
50                         if parameterName in defaultParameters:
51                                 flags = telepathy.CONN_MGR_PARAM_FLAG_HAS_DEFAULT
52                                 if parameterName == "password":
53                                         flags |= telepathy.CONN_MGR_PARAM_FLAG_SECRET
54                                 default = defaultParameters[parameterName]
55                         else:
56                                 flags = 0
57                                 default = ""
58                         param = (
59                                 parameterName,
60                                 flags,
61                                 parameterName,
62                                 default,
63                         )
64                         result.append(param)
65
66                 return result
67
68         def disconnected(self, conn):
69                 """
70                 Overrides telepathy.server.ConnectionManager
71                 """
72                 result = telepathy.server.ConnectionManager.disconnected(self, conn)
73                 gobject.timeout_add(5000, self.shutdown)
74
75         def quit(self):
76                 """
77                 Terminates all connections. Must be called upon quit
78                 """
79                 for connection in self._connections:
80                         connection.Disconnect()
81                 _moduleLogger.info("Connection manager quitting")
82
83         def _shutdown(self):
84                 if (
85                         self._on_shutdown is not None and
86                         len(self._connections) == 0
87                 ):
88                         self._on_shutdown()
89                 return False