[epiphany] suggestion-model: Deduplicate results
- From: Michael Catanzaro <mcatanzaro src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [epiphany] suggestion-model: Deduplicate results
- Date: Fri, 8 Nov 2019 17:00:16 +0000 (UTC)
commit 46943e60e526f7bfc160f05b7f412d1eb07b8fce
Author: Dimitrios Christidis <dimitrios christidis me>
Date: Thu Nov 7 23:49:35 2019 +0100
suggestion-model: Deduplicate results
Fixes: https://gitlab.gnome.org/GNOME/epiphany/issues/897
src/ephy-suggestion-model.c | 23 +++++++++++++++++++++++
1 file changed, 23 insertions(+)
---
diff --git a/src/ephy-suggestion-model.c b/src/ephy-suggestion-model.c
index 09483a79e..cc4f34beb 100644
--- a/src/ephy-suggestion-model.c
+++ b/src/ephy-suggestion-model.c
@@ -33,6 +33,7 @@ struct _EphySuggestionModel {
GObject parent;
EphyHistoryService *history_service;
EphyBookmarksManager *bookmarks_manager;
+ GSequence *urls;
GSequence *items;
GCancellable *icon_cancellable;
};
@@ -58,6 +59,7 @@ ephy_suggestion_model_finalize (GObject *object)
g_clear_object (&self->bookmarks_manager);
g_clear_object (&self->history_service);
+ g_clear_pointer (&self->urls, g_sequence_free);
g_clear_pointer (&self->items, g_sequence_free);
g_cancellable_cancel (self->icon_cancellable);
@@ -249,6 +251,7 @@ static guint
add_bookmarks (EphySuggestionModel *self,
const char *query)
{
+ g_autoptr (GList) new_urls = NULL;
GSequence *bookmarks;
guint added = 0;
@@ -265,6 +268,10 @@ add_bookmarks (EphySuggestionModel *self,
url = ephy_bookmark_get_url (bookmark);
title = ephy_bookmark_get_title (bookmark);
+ if (g_sequence_lookup (self->urls, (gpointer)url, (GCompareDataFunc)g_strcmp0,
+ NULL))
+ continue;
+
if (strlen (title) == 0)
title = url;
@@ -278,11 +285,16 @@ add_bookmarks (EphySuggestionModel *self,
suggestion = ephy_suggestion_new (markup, title, url);
load_favicon (self, suggestion, url);
+ new_urls = g_list_prepend (new_urls, g_strdup (url));
g_sequence_append (self->items, suggestion);
added++;
}
}
+ for (GList *p = new_urls; p != NULL; p = p->next)
+ g_sequence_append (self->urls, g_steal_pointer (&p->data));
+ g_sequence_sort (self->urls, (GCompareDataFunc)g_strcmp0, NULL);
+
return added;
}
@@ -300,6 +312,10 @@ add_history (EphySuggestionModel *self,
g_autofree gchar *markup = NULL;
const gchar *title = url->title;
+ if (g_sequence_lookup (self->urls, url->url, (GCompareDataFunc)g_strcmp0,
+ NULL))
+ continue;
+
if (strlen (url->title) == 0)
title = url->url;
@@ -388,6 +404,7 @@ add_tabs (EphySuggestionModel *self,
g_autofree gchar *escaped_title = NULL;
g_autofree gchar *markup = NULL;
const gchar *display_address;
+ const gchar *url;
g_autofree gchar *address = NULL;
const gchar *title;
g_autofree gchar *title_casefold = NULL;
@@ -400,6 +417,7 @@ add_tabs (EphySuggestionModel *self,
embed = EPHY_EMBED (gtk_notebook_get_nth_page (GTK_NOTEBOOK (notebook), i));
webview = ephy_embed_get_web_view (embed);
display_address = ephy_web_view_get_display_address (webview);
+ url = ephy_web_view_get_address (webview);
address = g_strdup_printf ("ephy-tab://%d", i);
title = webkit_web_view_get_title (WEBKIT_WEB_VIEW (webview));
@@ -414,11 +432,14 @@ add_tabs (EphySuggestionModel *self,
suggestion = ephy_suggestion_new_with_custom_subtitle (markup, title, _("Switch to Tab"), address);
load_favicon (self, suggestion, display_address);
+ g_sequence_append (self->urls, g_strdup (url));
g_sequence_append (self->items, suggestion);
added++;
}
}
+ g_sequence_sort (self->urls, (GCompareDataFunc)g_strcmp0, NULL);
+
return added;
}
@@ -446,6 +467,8 @@ query_completed_cb (EphyHistoryService *service,
removed = g_sequence_get_length (self->items);
+ g_clear_pointer (&self->urls, g_sequence_free);
+ self->urls = g_sequence_new (g_free);
g_clear_pointer (&self->items, g_sequence_free);
self->items = g_sequence_new (g_object_unref);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]