osx/addressbook/edit_default_address.py
| changeset 20: |
b6b0e9bc226d |
| author: |
Greg Darke <greg+laptop@tsukasa.net.au> |
| date: |
Thu Apr 16 00:45:45 2009 +1000 (10 months ago) |
| permissions: |
-rw-r--r-- |
| description: |
Ignore some stuff |
2# Copyright 2009 Greg Darke <greg+laptop@tsukasa.net.au> 3# Licensed for distribution under the GPL version 2, check COPYING for details 5# This program reads in all of your contact details (from AddressBook) and then 6# turns them into internation numbers (removes the leading 0, and repaces it 7# with +61). This program will also add an area code if it detects one is missing. 10reload(sys).setdefaultencoding('utf8') # Hacky 13logging.basicConfig(level=logging.DEBUG) 18 print >>sys.stderr, 'Seems you do not have pyobjc working for this version of python' 21class dictobject(dict): 22 def __getattr__(self, key): 26 raise AttributeError, str(key) 28 def __setattr__(self, key, value): 31def getDisplayName(person): 32 firstName = unicode(person.valueForProperty_(AddressBook.kABFirstNameProperty)) 33 lastName = unicode(person.valueForProperty_(AddressBook.kABLastNameProperty)) 34 companyName = unicode(person.valueForProperty_(AddressBook.kABOrganizationProperty)) 36 flags = person.valueForProperty_(AddressBook.kABPersonFlags) 39 lastNameFirst = (flags & AddressBook.kABNameOrderingMask) == AddressBook.kABLastNameFirst 41 if (flags & AddressBook.kABShowAsMask) == AddressBook.kABShowAsMask: 45 if lastName and firstName: 47 return '%s %s' % (lastName, firstName, ) 49 return '%s %s' % (firstName, lastName, ) 55def getEmailAddresses(person): 57 emailAddresses = person.valueForProperty_(AddressBook.kABEmailProperty) 58 for i in xrange(emailAddresses.count()): 60 address=emailAddresses.valueAtIndex_(i), 61 label=emailAddresses.labelAtIndex_(i), 62 isDefault=emailAddresses.primaryIdentifier()==emailAddresses.identifierAtIndex_(i), 64 line = '%s %2d\t%10s\t%s' % ( 65 '->' if email.isDefault else ' ', 66 i, email.label, email.address, 70 return '\n'.join(lines) 72def changeDefaultEmailAddress(person, index): 73 emails = person.valueForProperty_(AddressBook.kABEmailProperty) 74 if emails.indexForIdentifier_(emails.primaryIdentifier()) == index: 76 emails = emails.mutableCopy() 77 emails.setPrimaryIdentifier_(emails.identifierAtIndex_(index)) 79 person.setValue_forProperty_(emails, AddressBook.kABEmailProperty) 81def createSearchQuery(values): 82 def _createSingleSearchQuery(prop, value): 83 return AddressBook.ABPerson.searchElementForProperty_label_key_value_comparison_( 88 AddressBook.kABPrefixMatchCaseInsensitive, # Comparison 91 AddressBook.kABFirstNameProperty, 92 AddressBook.kABLastNameProperty, 93 AddressBook.kABNicknameProperty, 98 query = AddressBook.ABSearchElement.searchElementForConjunction_children_( 99 AddressBook.kABSearchOr, 100 [_createSingleSearchQuery(prop, value) for prop in PROPS], 102 innerQuery.append(query) 104 return AddressBook.ABSearchElement.searchElementForConjunction_children_( 105 AddressBook.kABSearchAnd, 110 sys.stdout.write('\033[H\033[2J') 114 book = AddressBook.ABAddressBook.sharedAddressBook() 116 def _searchForUser(): 117 name = raw_input('Enter name: ') 121 nameElements = name.strip().split() 124 query = createSearchQuery(nameElements) 125 results = book.recordsMatchingSearchElement_(query) 127 if len(results) == 0: 128 print 'User not found' 131 # Hmm, we need to pick somebody 132 return _pickUserFromList(results) 136 def _pickUserFromList(searchResults): 138 while personID < 0 or personID >= len(searchResults): 139 for i, person in enumerate(searchResults): 140 print '%2d\t%s' % (i, getDisplayName(person)) 141 personID = raw_input('Person number (enter to cancel): ') 145 personID = int(personID) 148 return searchResults[personID] 150 def _pickNewDefaultAddress(person): 152 emailAddresses = person.valueForProperty_(AddressBook.kABEmailProperty).count() 153 while emailID < 0 or emailID >= emailAddresses: 154 print 'Email addresses for %s:' % getDisplayName(person) 155 print getEmailAddresses(person) 156 emailID = raw_input('New default address (enter to cancel): ') 160 emailID = int(emailID) 168 person = _searchForUser() 173 emailIndex = _pickNewDefaultAddress(person) 176 if emailIndex is None: 177 print 'Cancelled change' 179 changeDefaultEmailAddress(person, emailIndex) 185if __name__ == "__main__":