9 USER_ALIAS_ACCOUNT = "account"
10 USER_ALIAS_CALLBACK = "callback"
12 USER_ALIAS = USER_ALIAS_ACCOUNT
15 _moduleLogger = logging.getLogger('aliasing')
18 def make_pretty(phonenumber):
20 Function to take a phone number and return the pretty version
22 if phonenumber begins with 0:
24 if phonenumber begins with 1: ( for gizmo callback numbers )
26 if phonenumber is 13 digits:
28 if phonenumber is 10 digits:
32 >>> make_pretty("1234567")
34 >>> make_pretty("2345678901")
36 >>> make_pretty("12345678901")
38 >>> make_pretty("01234567890")
41 if phonenumber is None or phonenumber is "":
44 phonenumber = handle.strip_number(phonenumber)
46 if len(phonenumber) < 3:
49 if phonenumber[0] == "0":
51 prettynumber += "+%s" % phonenumber[0:3]
52 if 3 < len(phonenumber):
53 prettynumber += "-(%s)" % phonenumber[3:6]
54 if 6 < len(phonenumber):
55 prettynumber += "-%s" % phonenumber[6:9]
56 if 9 < len(phonenumber):
57 prettynumber += "-%s" % phonenumber[9:]
59 elif len(phonenumber) <= 7:
60 prettynumber = "%s-%s" % (phonenumber[0:3], phonenumber[3:])
61 elif len(phonenumber) > 8 and phonenumber[0] == "1":
62 prettynumber = "1 (%s)-%s-%s" % (phonenumber[1:4], phonenumber[4:7], phonenumber[7:])
63 elif len(phonenumber) > 7:
64 prettynumber = "(%s)-%s-%s" % (phonenumber[0:3], phonenumber[3:6], phonenumber[6:])
68 class AliasingMixin(telepathy.server.ConnectionInterfaceAliasing):
71 telepathy.server.ConnectionInterfaceAliasing.__init__(self)
78 raise NotImplementedError("Abstract property called")
80 def handle(self, handleType, handleId):
84 raise NotImplementedError("Abstract function called")
86 @gtk_toolbox.log_exception(_moduleLogger)
87 def GetAliasFlags(self):
90 @gtk_toolbox.log_exception(_moduleLogger)
91 def RequestAliases(self, contactHandleIds):
92 _moduleLogger.debug("Called RequestAliases")
93 return [self._get_alias(handleId) for handleId in contactHandleIds]
95 @gtk_toolbox.log_exception(_moduleLogger)
96 def GetAliases(self, contactHandleIds):
97 _moduleLogger.debug("Called GetAliases")
100 (handleId, self._get_alias(handleId))
101 for handleId in contactHandleIds
105 @gtk_toolbox.log_exception(_moduleLogger)
106 def SetAliases(self, aliases):
107 _moduleLogger.debug("Called SetAliases")
108 if USER_ALIAS == USER_ALIAS_ACCOUNT:
109 raise telepathy.errors.PermissionDenied("No user customizable aliases")
110 elif USER_ALIAS != USER_ALIAS_CALLBACK:
111 raise RuntimeError("Invalid alias type: %r" % USER_ALIAS)
113 # first validate that no other handle types are included
114 userHandleAndAlias = None
115 for handleId, alias in aliases.iteritems():
116 h = self.handle(telepathy.HANDLE_TYPE_CONTACT, handleId)
117 if not isinstance(h, handle.ConnectionHandle):
118 raise telepathy.errors.PermissionDenied("No user customizable aliases")
119 userHandleAndAlias = h, alias
120 if userHandleAndAlias is None:
121 _moduleLogger.debug("No user handle")
125 uglyNumber = handle.strip_number(userHandleAndAlias[1])
126 self.session.backend.set_callback_number(uglyNumber)
129 changedAliases = (userHandleAndAlias, )
130 self.AliasesChanged(changedAliases)
132 def _get_alias(self, handleId):
133 h = self.handle(telepathy.HANDLE_TYPE_CONTACT, handleId)
134 if isinstance(h, handle.ConnectionHandle):
135 if USER_ALIAS == USER_ALIAS_CALLBACK:
136 aliasNumber = self.session.backend.get_callback_number()
137 elif USER_ALIAS == USER_ALIAS_ACCOUNT:
138 aliasNumber = self.session.backend.get_account_number()
140 raise RuntimeError("Invalid alias type: %r" % USER_ALIAS)
141 userAlias = make_pretty(aliasNumber)
144 contactId = h.contactID
146 contactAlias = self.session.addressbook.get_contact_name(contactId)
148 contactAlias = make_pretty(h.phoneNumber)