Make sure unmatched friends are *actually* keyed off name.
[hermes] / package / src / org / maemo / hermes / engine / hermes.py
index c69aeaf..e4b4713 100644 (file)
@@ -30,7 +30,7 @@ class Hermes:
         self.matched = []
         self.unmatched = []
         self.friends = {}
-        self.addresses = None
+        self.address_book = None
         
         # -- Other initialisation...
         #
@@ -43,9 +43,9 @@ class Hermes:
         self._progress("Reading contacts...", 1, 10000)
         
         contacts = []
-        self.addresses = evolution.ebook.open_addressbook('default')
-        for contact in self.addresses.get_all_contacts():
-            contacts.append(Contact(self.addresses, contact))
+        self.address_book = self._get_address_book()
+        for econtact in self.address_book.get_all_contacts():
+            contacts.append(self._create_contact_wrapper(econtact))
 
         # work out progress bar info
         total_contacts = len(contacts) * len(self._services)
@@ -77,10 +77,10 @@ class Hermes:
                 friend = service.process_contact(contact)
                 if friend:
                     contact.add_mapping(service.get_id())
-                    friend.update_friend(result)
+                    result.update_from_friend(friend)
             
             if result.get_name() is not None:
-                self.update_contact(result, overwrite_existing_fields)
+                self.update_contact(contact, result, overwrite_existing_fields)
             else:
                 self.unmatched.append(contact)
             
@@ -101,6 +101,10 @@ class Hermes:
             self._progress("Finalising...", current_tick, total_ticks)
             current_tick += len(contacts)
             service.finalise(self.updated, overwrite_existing_fields)
+            for friend in service.get_unmatched_friends():
+                friend.set_source(service.get_id())
+                key = unicode(friend.get_name()).encode('trans') + "_" + service.get_id()
+                self.friends[key] = friend
             
         # commit changes
         tick_increment = total_contacts / (len(self.updated) or 1)
@@ -109,7 +113,7 @@ class Hermes:
             print "committing changes to:", contact.get_name(), contact
             self._progress("Saving changes...", current_tick, total_ticks)
             current_tick += tick_increment
-            self.addresses.commit_contact(contact.get_econtact())
+            self.address_book.commit_contact(contact.get_econtact())
             
         self._progress('Finished', 1, -1)
         
@@ -119,7 +123,9 @@ class Hermes:
         """Update the given contact with information from the given friend."""
         
         print "updating contact ", contact, " with friend ", friend
-        self.updated.append(contact)
+        if friend.update_contact(contact, resync):
+            self.updated.append(contact)
+
         self.matched.append(contact)
         if friend.get_source() is not None:
             contact.add_mapping(friend.get_source())
@@ -127,13 +133,26 @@ class Hermes:
 
     # -----------------------------------------------------------------------
     def create_contact_from_friend(self, friend):
-        econtact = evolution.ebook.EContact()
-        econtact.props.full_name = friend['name']
-        econtact.props.given_name = friend['first_name']
-        econtact.props.family_name = friend['last_name']
-        contact = Contact(self.addresses, econtact)
+        econtact = self._create_empty_contact(friend)
+        contact = self._create_contact_wrapper(econtact)
                 
-        self.addresses.add_contact(contact.get_econtact())
+        self.address_book.add_contact(contact.get_econtact())
         self.update_contact(contact, friend)
         
         print "Created [%s]" % (contact.get_name())
+        
+        
+    # -----------------------------------------------------------------------
+    def _get_address_book(self):
+        return evolution.ebook.open_addressbook('default')
+
+    # -----------------------------------------------------------------------
+    def _create_empty_contact(self, friend):
+        econtact = evolution.ebook.EContact()
+        econtact.props.full_name = friend['name']
+        econtact.props.given_name = friend['first_name']
+        econtact.props.family_name = friend['last_name']
+    
+    # -----------------------------------------------------------------------
+    def _create_contact_wrapper(self, econtact):
+        return Contact(self.address_book, econtact)
\ No newline at end of file