self.friends = {}
self.blocked_pictures = []
self.callback.progress(0, 0)
+ self.friends_by_url = {}
# -- Get a user session and retrieve Facebook friends...
#
if self.facebook:
+ print "+++ Opening Facebook..."
if self.fb.session_key is None:
self.fb.session_key = self.gc.get_string('/apps/maemo/hermes/session_key')
self.fb.secret = self.gc.get_string('/apps/maemo/hermes/secret_key')
for friend in self.fb.users.getInfo(self.fb.friends.get(), attrs):
key = unicode(friend['name']).encode('trans')
self.friends[key] = friend
+ self.friends_by_url[friend['profile_url']] = friend
friend['pic'] = friend[attrs[2]]
+ friend['account'] = 'facebook'
if friend['website']:
friend['homepage'] = friend['website']
if not friend['pic']:
self.blocked_pictures.append(friend)
+
# -- Retrieve following information from Twitter...
#
if self.twitter is not None:
+ print "+++ Opening Twitter..."
(user, passwd) = self.twitter
api = twitter.Api(username=user, password=passwd)
users = api.GetFriends()
for friend in api.GetFriends():
- self.friends[friend.name] = {'name': unicode(friend.name).encode('trans'), 'pic': friend.profile_image_url, 'birthday_date': None, 'twitter_url': 'http://twitter.com/%s' % (friend.screen_name), 'homepage' : friend.url}
+ key = unicode(friend.name).encode('trans')
+ url = 'http://twitter.com/%s' % (friend.screen_name)
+ self.friends[key] = {'name': friend.name, 'pic': friend.profile_image_url, 'birthday_date': None, 'twitter_url': url, 'homepage': friend.url, 'account': 'twitter'}
+ self.friends_by_url[url] = self.friends[key]
# TODO What if the user has *no* contacts?
# -- Find addresses...
#
print "+++ Syncing contacts..."
- addresses = evolution.ebook.open_addressbook('default')
+ self.addresses = evolution.ebook.open_addressbook('default')
print "+++ Addressbook opened..."
- self.store = ContactStore(addresses)
+ self.store = ContactStore(self.addresses)
print "+++ Contact store created..."
self.updated = []
self.unmatched = []
self.matched = []
- contacts = addresses.get_all_contacts()
+ contacts = self.addresses.get_all_contacts()
contacts.sort(key=lambda obj: obj.get_name())
current = 0
maximum = len(contacts)
current += 1
self.callback.progress(current, maximum)
found = False
- for name in names.variants(contact.get_name()):
- if name in self.friends:
- updated = self.update_contact(contact, self.friends[name], resync)
+ updated = False
+
+ # Try match on existing URL...
+ for url in self.store.get_urls(contact):
+ if url in self.friends_by_url:
+ updated = self.update_contact(contact, self.friends_by_url[url], resync)
found = True
-
if updated:
- self.updated.append(contact)
- addresses.commit_contact(contact)
- print "Saved changes to [%s]" % (contact.get_name())
-
- break
+ break
+
+ # Fallback to names...
+ if not found:
+ for name in names.variants(contact.get_name()):
+ if name in self.friends:
+ updated = self.update_contact(contact, self.friends[name], resync)
+ found = True
+ if updated:
+ break
+
+ # Keep track of updated stuff...
+ if updated:
+ self.updated.append(contact)
+ self.addresses.commit_contact(contact)
+ print "Saved changes to [%s]" % (contact.get_name())
if found:
self.matched.append(contact)
self.update_contact(contact, friend)
- addresses.add_contact(contact)
+ self.addresses.add_contact(contact)
self.updated.append(contact)
- addresses.commit_contact(contact)
+ self.addresses.commit_contact(contact)
print "Created [%s]" % (contact.get_name())
self.matched.append(contact)