From: Andrew Flegg Date: Sun, 19 Dec 2010 13:08:51 +0000 (+0000) Subject: Add support for creating contacts from "interesting" friends on LinkedIn. Completes... X-Git-Tag: 0.8.8~5 X-Git-Url: https://vcs.maemo.org/git/?p=hermes;a=commitdiff_plain;h=ed2b92d9b0524d2a704283fe0cbe430b118f2985 Add support for creating contacts from "interesting" friends on LinkedIn. Completes MB#10802 --- diff --git a/package/src/org/maemo/hermes/engine/facebook/service.py b/package/src/org/maemo/hermes/engine/facebook/service.py index aa912c5..0db44ca 100644 --- a/package/src/org/maemo/hermes/engine/facebook/service.py +++ b/package/src/org/maemo/hermes/engine/facebook/service.py @@ -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 diff --git a/package/src/org/maemo/hermes/engine/friend.py b/package/src/org/maemo/hermes/engine/friend.py index 00eba50..42af12a 100644 --- a/package/src/org/maemo/hermes/engine/friend.py +++ b/package/src/org/maemo/hermes/engine/friend.py @@ -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): diff --git a/package/src/org/maemo/hermes/engine/hermes.py b/package/src/org/maemo/hermes/engine/hermes.py index 9d569d8..ab2d445 100644 --- a/package/src/org/maemo/hermes/engine/hermes.py +++ b/package/src/org/maemo/hermes/engine/hermes.py @@ -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: diff --git a/package/src/org/maemo/hermes/engine/linkedin/provider.py b/package/src/org/maemo/hermes/engine/linkedin/provider.py index 3a915a2..1d17623 100644 --- a/package/src/org/maemo/hermes/engine/linkedin/provider.py +++ b/package/src/org/maemo/hermes/engine/linkedin/provider.py @@ -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')) # ----------------------------------------------------------------------- diff --git a/package/src/org/maemo/hermes/engine/linkedin/service.py b/package/src/org/maemo/hermes/engine/linkedin/service.py index 805ea3a..29b9137 100644 --- a/package/src/org/maemo/hermes/engine/linkedin/service.py +++ b/package/src/org/maemo/hermes/engine/linkedin/service.py @@ -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): diff --git a/package/src/org/maemo/hermes/engine/provider_oauth.py b/package/src/org/maemo/hermes/engine/provider_oauth.py index 690dcef..fb94128 100644 --- a/package/src/org/maemo/hermes/engine/provider_oauth.py +++ b/package/src/org/maemo/hermes/engine/provider_oauth.py @@ -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 diff --git a/package/src/org/maemo/hermes/gui/gtkui.py b/package/src/org/maemo/hermes/gui/gtkui.py index f948453..001c456 100644 --- a/package/src/org/maemo/hermes/gui/gtkui.py +++ b/package/src/org/maemo/hermes/gui/gtkui.py @@ -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() diff --git a/package/test/unit/test_friend.py b/package/test/unit/test_friend.py index 5e950ab..731f119 100644 --- a/package/test/unit/test_friend.py +++ b/package/test/unit/test_friend.py @@ -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()