[tracker] Avoid duplicate items in SubjectsChanged
- From: Philip Van Hoof <pvanhoof src gnome org>
- To: svn-commits-list gnome org
- Cc:
- Subject: [tracker] Avoid duplicate items in SubjectsChanged
- Date: Mon, 10 Aug 2009 09:19:51 +0000 (UTC)
commit 522c4e4c10e2545e08a2679c2794c65e4af4561d
Author: Philip Van Hoof <philip codeminded be>
Date: Mon Aug 10 11:19:18 2009 +0200
Avoid duplicate items in SubjectsChanged
src/tracker-store/tracker-resource-class.c | 35 ++++++++++++++++++++++-----
1 files changed, 28 insertions(+), 7 deletions(-)
---
diff --git a/src/tracker-store/tracker-resource-class.c b/src/tracker-store/tracker-resource-class.c
index 482d595..05e3184 100644
--- a/src/tracker-store/tracker-resource-class.c
+++ b/src/tracker-store/tracker-resource-class.c
@@ -266,6 +266,25 @@ has_already (GPtrArray *array, const gchar *uri)
return FALSE;
}
+static gboolean
+changed_has_already (GPtrArray *array, const gchar *uri, const gchar *predicate)
+{
+ guint i;
+
+ if (!array) {
+ return FALSE;
+ }
+
+ for (i = 0; i < array->len; i++) {
+ ChangedItem *item = g_ptr_array_index (array, i);
+ if (g_strcmp0 (item->uri, uri) == 0 && g_strcmp0 (item->predicate, predicate) == 0) {
+ return TRUE;
+ }
+ }
+
+ return FALSE;
+}
+
void
tracker_resource_class_add_event (TrackerResourceClass *object,
const gchar *uri,
@@ -273,7 +292,6 @@ tracker_resource_class_add_event (TrackerResourceClass *object,
TrackerDBusEventsType type)
{
TrackerResourceClassPrivate *priv;
- ChangedItem *item;
priv = TRACKER_RESOURCE_CLASS_GET_PRIVATE (object);
@@ -291,15 +309,18 @@ tracker_resource_class_add_event (TrackerResourceClass *object,
}
break;
case TRACKER_DBUS_EVENTS_TYPE_UPDATE:
+ if (!changed_has_already (priv->ups, uri, predicate)) {
+ ChangedItem *item;
- item = g_slice_new (ChangedItem);
+ item = g_slice_new (ChangedItem);
- item->uri = g_string_chunk_insert_const (priv->changed_strings, uri);
- item->predicate = g_string_chunk_insert_const (priv->changed_strings, predicate);
+ item->uri = g_string_chunk_insert_const (priv->changed_strings, uri);
+ item->predicate = g_string_chunk_insert_const (priv->changed_strings, predicate);
- if (!priv->ups)
- priv->ups = g_ptr_array_new ();
- g_ptr_array_add (priv->ups, item);
+ if (!priv->ups)
+ priv->ups = g_ptr_array_new ();
+ g_ptr_array_add (priv->ups, item);
+ }
break;
case TRACKER_DBUS_EVENTS_TYPE_DELETE:
if (!has_already (priv->dels, uri)) {
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]