diff --git a/sugar/shell/StartPage.py b/sugar/shell/StartPage.py index 3aa2e7e8..27a3277d 100644 --- a/sugar/shell/StartPage.py +++ b/sugar/shell/StartPage.py @@ -18,6 +18,11 @@ _COLUMN_ADDRESS = 1 _COLUMN_SUBTITLE = 2 _COLUMN_SERVICE = 3 +class SearchHelper(object): + def __init__(self, activity_uid): + self.search_uid = activity_uid + self.found = False + class ActivitiesModel(gtk.ListStore): def __init__(self): gtk.ListStore.__init__(self, gobject.TYPE_STRING, gobject.TYPE_STRING, @@ -25,9 +30,31 @@ class ActivitiesModel(gtk.ListStore): def add_web_page(self, title, address): self.append([ title, address, None, None ]) + + def _filter_dupe_activities(self, model, path, it, user_data): + """Search the list of list rows for an existing service that + has the activity ID we're looking for.""" + helper = user_data + (service, ) = model.get(it, _COLUMN_SERVICE) + if not service: + return False + if service.get_activity_uid() == helper.search_uid: + helper.found = True + return True + return False def add_activity(self, buddy, service): # Web Activity check + activity_uid = service.get_activity_uid() + if activity_uid is None: + return + # Don't show dupes + helper = SearchHelper(activity_uid) + self.foreach(self._filter_dupe_activities, helper) + if helper.found == True: + return + + # Only accept browser activities for now if service.get_type() == BrowserActivity._BROWSER_ACTIVITY_TYPE: escaped_title = service.get_one_property('Title') escaped_uri = service.get_one_property('URI')