9 _moduleLogger = logging.getLogger('aliasing')
12 def make_pretty(phonenumber):
14 Function to take a phone number and return the pretty version
16 if phonenumber begins with 0:
18 if phonenumber begins with 1: ( for gizmo callback numbers )
20 if phonenumber is 13 digits:
22 if phonenumber is 10 digits:
26 >>> make_pretty("1234567")
28 >>> make_pretty("2345678901")
30 >>> make_pretty("12345678901")
32 >>> make_pretty("01234567890")
35 if phonenumber is None or phonenumber is "":
38 phonenumber = handle.strip_number(phonenumber)
40 if len(phonenumber) < 3:
43 if phonenumber[0] == "0":
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:]
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:])
62 class AliasingMixin(telepathy.server.ConnectionInterfaceAliasing):
64 USER_ALIAS_ACCOUNT = "account"
65 USER_ALIAS_CALLBACK = "callback"
68 telepathy.server.ConnectionInterfaceAliasing.__init__(self)
75 raise NotImplementedError("Abstract property called")
78 def userAliasType(self):
82 raise NotImplementedError("Abstract property called")
84 def handle(self, handleType, handleId):
88 raise NotImplementedError("Abstract function called")
90 @gtk_toolbox.log_exception(_moduleLogger)
91 def GetAliasFlags(self):
94 @gtk_toolbox.log_exception(_moduleLogger)
95 def RequestAliases(self, contactHandleIds):
96 _moduleLogger.debug("Called RequestAliases")
97 return [self._get_alias(handleId) for handleId in contactHandleIds]
99 @gtk_toolbox.log_exception(_moduleLogger)
100 def GetAliases(self, contactHandleIds):
101 _moduleLogger.debug("Called GetAliases")
104 (handleId, self._get_alias(handleId))
105 for handleId in contactHandleIds
109 @gtk_toolbox.log_exception(_moduleLogger)
110 def SetAliases(self, aliases):
111 _moduleLogger.debug("Called SetAliases")
112 if self.userAliasType == self.USER_ALIAS_ACCOUNT:
113 raise telepathy.errors.PermissionDenied("No user customizable aliases")
114 elif self.userAliasType != self.USER_ALIAS_CALLBACK:
115 raise RuntimeError("Invalid alias type: %r" % self.userAliasType)
117 # first validate that no other handle types are included
118 userHandleAndAlias = None
119 for handleId, alias in aliases.iteritems():
120 h = self.handle(telepathy.HANDLE_TYPE_CONTACT, handleId)
121 if not isinstance(h, handle.ConnectionHandle):
122 raise telepathy.errors.PermissionDenied("No user customizable aliases")
123 userHandleAndAlias = h, alias
124 if userHandleAndAlias is None:
125 _moduleLogger.debug("No user handle")
129 uglyNumber = handle.strip_number(userHandleAndAlias[1])
130 self.session.backend.set_callback_number(uglyNumber)
133 changedAliases = (userHandleAndAlias, )
134 self.AliasesChanged(changedAliases)
136 def _get_alias(self, handleId):
137 h = self.handle(telepathy.HANDLE_TYPE_CONTACT, handleId)
138 if isinstance(h, handle.ConnectionHandle):
139 if self.userAliasType == self.USER_ALIAS_CALLBACK:
140 aliasNumber = self.session.backend.get_callback_number()
141 elif self.userAliasType == self.USER_ALIAS_ACCOUNT:
142 aliasNumber = self.session.backend.get_account_number()
144 raise RuntimeError("Invalid alias type: %r" % self.userAliasType)
145 userAlias = make_pretty(aliasNumber)
148 contactId = h.contactID
150 contactAlias = self.session.addressbook.get_contact_name(contactId)
152 contactAlias = make_pretty(h.phoneNumber)