Add support for creating contacts from "interesting" friends on LinkedIn. Completes...
authorAndrew Flegg <andrew@bleb.org>
Sun, 19 Dec 2010 13:08:51 +0000 (13:08 +0000)
committerAndrew Flegg <andrew@bleb.org>
Sun, 2 Jan 2011 19:53:46 +0000 (19:53 +0000)
package/src/org/maemo/hermes/engine/facebook/service.py
package/src/org/maemo/hermes/engine/friend.py
package/src/org/maemo/hermes/engine/hermes.py
package/src/org/maemo/hermes/engine/linkedin/provider.py
package/src/org/maemo/hermes/engine/linkedin/service.py
package/src/org/maemo/hermes/engine/provider_oauth.py
package/src/org/maemo/hermes/gui/gtkui.py
package/test/unit/test_friend.py

index aa912c5..0db44ca 100644 (file)
@@ -32,8 +32,7 @@ class Service(org.maemo.hermes.engine.service.Service):
         friends = []
         if self._create_birthday_only:
             for friend in self._friends_without_contact:
-                if friend.has_birthday_date():
-                    friends.append(friend)
+                friends.append(friend)
                     
         return friends
     
index 00eba50..42af12a 100644 (file)
@@ -25,7 +25,12 @@ class Friend():
         return "Friend %s" % self.get_name()
     
     # public accessors -----------------
-    
+        
+    def is_interesting(self):
+        """A friend is interesting if there's more info than URLs
+           and photos."""
+        return self._attributes.has_key('bday') or self._multi_attributes.has_key('phone')
+
     def add_url(self, url):
        if url:
            if not isinstance(url, basestring):
index 9d569d8..ab2d445 100644 (file)
@@ -86,10 +86,11 @@ class Hermes:
             tick_increment = len(contacts) / (len(to_create) or 1)
             print tick_increment, to_create
             for friend in to_create:
-                friend.set_source(service.get_id())
                 self._progress("Creating contacts...", current_tick, total_ticks)
                 current_tick += tick_increment
-                self.create_contact_from_friend(friend)
+                if friend.is_interesting():
+                    friend.set_source(service.get_id())
+                    self.create_contact_from_friend(friend)
                 
         # finalisation
         for service in self._services:
index 3a915a2..1d17623 100644 (file)
@@ -39,12 +39,28 @@ class Provider(OAuthProvider):
            
         return (self.REQUEST_TOKEN_URL, self.ACCESS_TOKEN_URL, self.AUTHORIZE_URL)
 
+
+    # -----------------------------------------------------------------------
+    def additional_prefs(self, dialog):
+        self._checkbox = hildon.CheckButton(gtk.HILDON_SIZE_FINGER_HEIGHT)
+        self._checkbox.set_label(_('Import new contacts'))
+        self._checkbox.set_active(self._gc.get_bool('/apps/maemo/hermes/linkedin_create_new'))
+        
+        dialog.vbox.add(self._checkbox)
+        dialog.vbox.add(gtk.Label(""))
+
+
+    # -----------------------------------------------------------------------
+    def handle_prefs_response(self, result):
+        self._gc.set_bool('/apps/maemo/hermes/linkedin_create_new', self._checkbox.get_active())
+        self._checkbox = None
+
     
     # -----------------------------------------------------------------------
     def service(self, gui_callback):
         """Return the service backend."""
            
-        return org.maemo.hermes.engine.linkedin.service.Service(self.get_id(), self._api)
+        return org.maemo.hermes.engine.linkedin.service.Service(self.get_id(), self._api, self._gc.get_bool('/apps/maemo/hermes/linkedin_create_new'))
 
 
     # -----------------------------------------------------------------------
index 805ea3a..29b9137 100644 (file)
@@ -11,8 +11,8 @@ class Service(org.maemo.hermes.engine.facebook.service.Service):
        
        
     # -----------------------------------------------------------------------
-    def __init__(self, service_id, linkedInApi):
-        org.maemo.hermes.engine.facebook.service.Service.__init__(self, service_id, None)
+    def __init__(self, service_id, linkedInApi, create_new = False):
+        org.maemo.hermes.engine.facebook.service.Service.__init__(self, service_id, None, create_new)
         self.linkedInApi = linkedInApi
 
     
@@ -21,7 +21,7 @@ class Service(org.maemo.hermes.engine.facebook.service.Service):
         friends = self.linkedInApi.get_friends()
         for friend in friends:
             self._register_friend(friend)
-
+            
 
     # -----------------------------------------------------------------------
     def is_profile_url(self, url):
index 690dcef..fb94128 100644 (file)
@@ -89,10 +89,10 @@ class OAuthProvider(org.maemo.hermes.engine.provider.Provider):
         result = dialog.run()
         dialog.hide()
         
-        self.handle_prefs_response(result)
         if result == gtk.RESPONSE_CANCEL or result == gtk.RESPONSE_DELETE_EVENT:
             return None
     
+        self.handle_prefs_response(result)
         return result == gtk.RESPONSE_YES
 
 
@@ -180,9 +180,7 @@ class OAuthProvider(org.maemo.hermes.engine.provider.Provider):
         try:
             return oauth.OAuthToken.from_string(token_str)
         except KeyError, e:
-            print token_str
-            import traceback
-            traceback.print_exc()
+            print "Invalid: ", token_str
             return None
 
 
index f948453..001c456 100644 (file)
@@ -13,6 +13,7 @@ from org.maemo.hermes.gui.mapcontact import MapContact
 from org.maemo.hermes.gui.accountsdialogue import AccountsDialogue
 from org.bleb.wimpworks import HildonMainScreenLayout
 from org.maemo.hermes.engine.hermes import Hermes
+from org.maemo.hermes.engine.service import CredentialsExpiredException
 
 class HermesGUI(WimpWorks):
     """Provides the GUI for Hermes, allowing the syncing of Facebook and
@@ -144,6 +145,9 @@ class HermesGUI(WimpWorks):
             except urllib2.URLError, e:
                 traceback.print_exc()
                 gobject.idle_add(self.report_error, _('Network connection error. Check connectivity.'))
+                
+            except CredentialsExpiredException, e:
+                gobject.idle_add(self.report_error, _('Credentials expired. Please reauthorise: ') + e.message)
           
             except Exception, e:
                 traceback.print_exc()
index 5e950ab..731f119 100644 (file)
@@ -49,7 +49,22 @@ class TestFriend(unittest.TestCase):
         friend.update_contact(contact, False)
         assert 'http://chitter.com/bob.smith' in contact.get_urls()
         assert 'http://www.friendface.com/bob.smith' in contact.get_urls()
+        
+        
+    def test_interesting_friends(self):
+        friend = Friend(name = 'Bob Smith', source = 'test')
+        assert not friend.is_interesting()
+        
+        friend.add_url('http://chitter.com/bob.smith')
+        assert not friend.is_interesting()
+        
+        friend.add_phone(PhoneNumber("01234 567890"))
+        assert friend.is_interesting()
 
+        friend = Friend(name = 'Bob Smith', source = 'test')
+        friend.set_birthday_date("01/01/2010")
+        assert friend.is_interesting()
+        
     
 if __name__ == '__main__':
     unittest.main()