Cleaning up the unimplemented location support
[theonering] / src / aliasing.py
1 import logging
2
3 import telepathy
4
5 import gtk_toolbox
6 import handle
7
8
9 _moduleLogger = logging.getLogger('aliasing')
10
11
12 def make_pretty(phonenumber):
13         """
14         Function to take a phone number and return the pretty version
15         pretty numbers:
16                 if phonenumber begins with 0:
17                         ...-(...)-...-....
18                 if phonenumber begins with 1: ( for gizmo callback numbers )
19                         1 (...)-...-....
20                 if phonenumber is 13 digits:
21                         (...)-...-....
22                 if phonenumber is 10 digits:
23                         ...-....
24         >>> make_pretty("12")
25         '12'
26         >>> make_pretty("1234567")
27         '123-4567'
28         >>> make_pretty("2345678901")
29         '(234)-567-8901'
30         >>> make_pretty("12345678901")
31         '1 (234)-567-8901'
32         >>> make_pretty("01234567890")
33         '+012-(345)-678-90'
34         """
35         if phonenumber is None or phonenumber is "":
36                 return ""
37
38         phonenumber = handle.strip_number(phonenumber)
39
40         if len(phonenumber) < 3:
41                 return phonenumber
42
43         if phonenumber[0] == "0":
44                 prettynumber = ""
45                 prettynumber += "+%s" % phonenumber[0:3]
46                 if 3 < len(phonenumber):
47                         prettynumber += "-(%s)" % phonenumber[3:6]
48                         if 6 < len(phonenumber):
49                                 prettynumber += "-%s" % phonenumber[6:9]
50                                 if 9 < len(phonenumber):
51                                         prettynumber += "-%s" % phonenumber[9:]
52                 return prettynumber
53         elif len(phonenumber) <= 7:
54                 prettynumber = "%s-%s" % (phonenumber[0:3], phonenumber[3:])
55         elif len(phonenumber) > 8 and phonenumber[0] == "1":
56                 prettynumber = "1 (%s)-%s-%s" % (phonenumber[1:4], phonenumber[4:7], phonenumber[7:])
57         elif len(phonenumber) > 7:
58                 prettynumber = "(%s)-%s-%s" % (phonenumber[0:3], phonenumber[3:6], phonenumber[6:])
59         return prettynumber
60
61
62 class AliasingMixin(telepathy.server.ConnectionInterfaceAliasing):
63
64         def __init__(self):
65                 telepathy.server.ConnectionInterfaceAliasing.__init__(self)
66
67         @property
68         def session(self):
69                 """
70                 @abstract
71                 """
72                 raise NotImplementedError("Abstract property called")
73
74         @property
75         def handle(self):
76                 """
77                 @abstract
78                 """
79                 raise NotImplementedError("Abstract property called")
80
81         @gtk_toolbox.log_exception(_moduleLogger)
82         def GetAliasFlags(self):
83                 return 0
84
85         @gtk_toolbox.log_exception(_moduleLogger)
86         def RequestAliases(self, contactHandleIds):
87                 _moduleLogger.debug("Called RequestAliases")
88                 return [self._get_alias(handleId) for handleId in contactHandleIds]
89
90         @gtk_toolbox.log_exception(_moduleLogger)
91         def GetAliases(self, contactHandleIds):
92                 _moduleLogger.debug("Called GetAliases")
93
94                 idToAlias = dict(
95                         (handleId, self._get_alias(handleId))
96                         for handleId in contactHandleIds
97                 )
98                 return idToAlias
99
100         @gtk_toolbox.log_exception(_moduleLogger)
101         def SetAliases(self, aliases):
102                 # @todo Look into setting callback number through this mechanism
103                 raise telepathy.PermissionDenied("No user customizable aliases")
104
105         def _get_alias(self, handleId):
106                 h = self.handle(telepathy.HANDLE_TYPE_CONTACT, handleId)
107                 if isinstance(h, handle.ConnectionHandle):
108                         callbackNumber = self.session.backend.get_callback_number()
109                         userAlias = make_pretty(callbackNumber)
110                         return userAlias
111                 else:
112                         contactAlias = self.session.addressbook.get_contact_name(h.contactID)
113                         return contactAlias