6 import util.misc as util_misc
10 _moduleLogger = logging.getLogger('aliasing')
13 def make_pretty(phonenumber):
15 Function to take a phone number and return the pretty version
17 if phonenumber begins with 0:
19 if phonenumber begins with 1: ( for gizmo callback numbers )
21 if phonenumber is 13 digits:
23 if phonenumber is 10 digits:
27 >>> make_pretty("1234567")
29 >>> make_pretty("2345678901")
31 >>> make_pretty("12345678901")
33 >>> make_pretty("01234567890")
36 if phonenumber is None or phonenumber is "":
39 phonenumber = util_misc.strip_number(phonenumber)
41 if len(phonenumber) < 3:
44 if phonenumber[0] == "0":
46 prettynumber += "+%s" % phonenumber[0:3]
47 if 3 < len(phonenumber):
48 prettynumber += "-(%s)" % phonenumber[3:6]
49 if 6 < len(phonenumber):
50 prettynumber += "-%s" % phonenumber[6:9]
51 if 9 < len(phonenumber):
52 prettynumber += "-%s" % phonenumber[9:]
54 elif len(phonenumber) <= 7:
55 prettynumber = "%s-%s" % (phonenumber[0:3], phonenumber[3:])
56 elif len(phonenumber) > 8 and phonenumber[0] == "1":
57 prettynumber = "1 (%s)-%s-%s" % (phonenumber[1:4], phonenumber[4:7], phonenumber[7:])
58 elif len(phonenumber) > 7:
59 prettynumber = "(%s)-%s-%s" % (phonenumber[0:3], phonenumber[3:6], phonenumber[6:])
63 class AliasingMixin(telepathy.server.ConnectionInterfaceAliasing):
65 USER_ALIAS_ACCOUNT = "account"
66 USER_ALIAS_CALLBACK = "callback"
69 telepathy.server.ConnectionInterfaceAliasing.__init__(self)
76 raise NotImplementedError("Abstract property called")
79 def userAliasType(self):
83 raise NotImplementedError("Abstract property called")
85 def handle(self, handleType, handleId):
89 raise NotImplementedError("Abstract function called")
91 @gtk_toolbox.log_exception(_moduleLogger)
92 def GetAliasFlags(self):
95 @gtk_toolbox.log_exception(_moduleLogger)
96 def RequestAliases(self, contactHandleIds):
97 _moduleLogger.debug("Called RequestAliases")
98 return [self._get_alias(handleId) for handleId in contactHandleIds]
100 @gtk_toolbox.log_exception(_moduleLogger)
101 def GetAliases(self, contactHandleIds):
102 _moduleLogger.debug("Called GetAliases")
105 (handleId, self._get_alias(handleId))
106 for handleId in contactHandleIds
110 @gtk_toolbox.log_exception(_moduleLogger)
111 def SetAliases(self, aliases):
112 _moduleLogger.debug("Called SetAliases")
113 if self.userAliasType == self.USER_ALIAS_ACCOUNT:
114 raise telepathy.errors.PermissionDenied("No user customizable aliases")
115 elif self.userAliasType != self.USER_ALIAS_CALLBACK:
116 raise RuntimeError("Invalid alias type: %r" % self.userAliasType)
118 # first validate that no other handle types are included
119 userHandleAndAlias = None
120 for handleId, alias in aliases.iteritems():
121 h = self.handle(telepathy.HANDLE_TYPE_CONTACT, handleId)
122 if not isinstance(h, handle.ConnectionHandle):
123 raise telepathy.errors.PermissionDenied("No user customizable aliases")
124 userHandleAndAlias = h, alias
125 if userHandleAndAlias is None:
126 _moduleLogger.debug("No user handle")
130 uglyNumber = util_misc.strip_number(userHandleAndAlias[1])
131 self.session.backend.set_callback_number(uglyNumber)
134 changedAliases = (userHandleAndAlias, )
135 self.AliasesChanged(changedAliases)
137 def _get_alias(self, handleId):
138 h = self.handle(telepathy.HANDLE_TYPE_CONTACT, handleId)
139 if isinstance(h, handle.ConnectionHandle):
140 if self.userAliasType == self.USER_ALIAS_CALLBACK:
141 aliasNumber = self.session.backend.get_callback_number()
142 elif self.userAliasType == self.USER_ALIAS_ACCOUNT:
143 aliasNumber = self.session.backend.get_account_number()
145 raise RuntimeError("Invalid alias type: %r" % self.userAliasType)
146 userAlias = make_pretty(aliasNumber)
149 contactId = h.contactID
151 contactAlias = self.session.addressbook.get_contact_name(contactId)
153 contactAlias = make_pretty(h.phoneNumber)