Add manual mapping for 0.2.0 release
[hermes] / package / src / hermes.py
index e7ec2fc..3f5afb5 100644 (file)
@@ -102,10 +102,12 @@ class Hermes:
     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')
@@ -125,21 +127,28 @@ class Hermes:
       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?
 
@@ -152,14 +161,14 @@ class Hermes:
     # -- 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)
@@ -167,17 +176,30 @@ class Hermes:
       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)
@@ -199,9 +221,9 @@ class Hermes:
 
         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)