Add support for creating contacts from "interesting" friends on LinkedIn. Completes...
[hermes] / package / src / org / maemo / hermes / engine / linkedin / provider.py
index 40058ee..1d17623 100644 (file)
@@ -1,12 +1,30 @@
-import org.maemo.hermes.engine.provider
+import gnome.gconf
+import gobject, gtk, hildon
+import time, thread
+import webbrowser
+from org.maemo.hermes.engine.provider_oauth import OAuthProvider
 import org.maemo.hermes.engine.linkedin.service
+from org.maemo.hermes.engine.linkedin.api import LinkedInApi
 
-class Provider(org.maemo.hermes.engine.provider.Provider):
+class Provider(OAuthProvider):
     """LinkedIn provider for Hermes. 
 
        Copyright (c) Andrew Flegg <andrew@bleb.org> 2010.
        Released under the Artistic Licence."""
 
+    LI_API_URL = "https://api.linkedin.com"
+
+    REQUEST_TOKEN_URL = LI_API_URL + "/uas/oauth/requestToken"
+    AUTHORIZE_URL = LI_API_URL + "/uas/oauth/authorize"
+    ACCESS_TOKEN_URL = LI_API_URL + "/uas/oauth/accessToken"
+
+
+    # -----------------------------------------------------------------------
+    def __init__(self):
+        OAuthProvider.__init__(self)
+        self._api = LinkedInApi(self.consumer, self.make_api_request)
+
+
     # -----------------------------------------------------------------------
     def get_name(self):
         """Return the display name of this service. An icon, of with the lower-case,
@@ -16,27 +34,35 @@ class Provider(org.maemo.hermes.engine.provider.Provider):
     
     
     # -----------------------------------------------------------------------
-    def has_preferences(self):
-        """Whether or not this provider has any preferences. If it does not,
-           open_preferences must NOT be called; as the behaviour is undetermined."""
+    def get_urls(self):
+        """Return the various URLs needed for OAuth."""
            
-        return True
-    
-    
+        return (self.REQUEST_TOKEN_URL, self.ACCESS_TOKEN_URL, self.AUTHORIZE_URL)
+
+
     # -----------------------------------------------------------------------
-    def open_preferences(self, parent):
-        """Open the preferences for this provider as a child of the 'parent' widget."""
+    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(""))
 
-        print "Err, open preferences. OK. Err, right. Hmm."
-        # FIXME: do auth:
-        # get request token
-        # get auth token
-        # open browser to have user allow data access
-        # user inputs the 5 char  
+
+    # -----------------------------------------------------------------------
+    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()
+        return org.maemo.hermes.engine.linkedin.service.Service(self.get_id(), self._api, self._gc.get_bool('/apps/maemo/hermes/linkedin_create_new'))
+
+
+    # -----------------------------------------------------------------------
+    def verify_verifier(self, access_token):
+        return self._api.verify_verifier(access_token)