Call-centric work
[theonering] / src / presence.py
1 import logging
2
3 import telepathy
4
5 import gtk_toolbox
6 import simple_presence
7
8
9 _moduleLogger = logging.getLogger('presence')
10
11
12 class PresenceMixin(telepathy.server.ConnectionInterfacePresence, simple_presence.TheOneRingPresence):
13
14         def __init__(self):
15                 telepathy.server.ConnectionInterfacePresence.__init__(self)
16                 simple_presence.TheOneRingPresence.__init__(self)
17
18         @gtk_toolbox.log_exception(_moduleLogger)
19         def GetStatuses(self):
20                 # the arguments are in common to all on-line presences
21                 arguments = {}
22
23                 return dict(
24                         (localType, (telepathyType, True, True, arguments))
25                         for (localType, telepathyType) in self.TO_PRESENCE_TYPE.iteritems()
26                 )
27
28         @gtk_toolbox.log_exception(_moduleLogger)
29         def RequestPresence(self, contactIds):
30                 presences = self.__get_presences(contactIds)
31                 self.PresenceUpdate(presences)
32
33         @gtk_toolbox.log_exception(_moduleLogger)
34         def GetPresence(self, contactIds):
35                 return self.__get_presences(contactIds)
36
37         @gtk_toolbox.log_exception(_moduleLogger)
38         def SetStatus(self, statuses):
39                 assert len(statuses) == 1
40                 status, arguments = statuses.items()[0]
41                 assert len(arguments) == 0
42                 self.set_presence(status)
43
44         def __get_presences(self, contacts):
45                 arguments = {}
46                 return dict(
47                         (h, (0, {presence: arguments}))
48                         for (h, (presenceType, presence)) in self.get_presences(contacts).iteritems()
49                 )