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