diff options
-rw-r--r-- | data/dbus/tracker-resources.xml | 4 | ||||
-rw-r--r-- | examples/class-signal/class-signal.c | 4 | ||||
-rw-r--r-- | src/libtracker-common/tracker-dbus.h | 3 | ||||
-rw-r--r-- | src/libtracker-data/tracker-class.c | 91 | ||||
-rw-r--r-- | src/libtracker-data/tracker-class.h | 5 | ||||
-rw-r--r-- | src/tracker-store/tracker-events.c | 4 | ||||
-rw-r--r-- | src/tracker-store/tracker-resources.c | 12 | ||||
-rw-r--r-- | tests/functional-tests/class-signal-test.vala | 1 |
8 files changed, 77 insertions, 47 deletions
diff --git a/data/dbus/tracker-resources.xml b/data/dbus/tracker-resources.xml index e709adc10..b415217a6 100644 --- a/data/dbus/tracker-resources.xml +++ b/data/dbus/tracker-resources.xml @@ -56,8 +56,8 @@ <signal name="ClassSignal"> <arg type="s" name ="classname" /> - <arg type="a(iii)" name="deletes" /> - <arg type="a(iii)" name="inserts" /> + <arg type="a(iiii)" name="deletes" /> + <arg type="a(iiii)" name="inserts" /> </signal> </interface> diff --git a/examples/class-signal/class-signal.c b/examples/class-signal/class-signal.c index 34a3512b4..3f8324a16 100644 --- a/examples/class-signal/class-signal.c +++ b/examples/class-signal/class-signal.c @@ -75,9 +75,11 @@ class_signal_cb (DBusMessage *message) while ((arg_type = dbus_message_iter_get_arg_type (&arr)) != DBUS_TYPE_INVALID) { DBusMessageIter strct; - gint subject = 0, predicate = 0, object = 0; + gint graph = 0, subject = 0, predicate = 0, object = 0; dbus_message_iter_recurse (&arr, &strct); + dbus_message_iter_get_basic (&strct, &graph); + dbus_message_iter_next (&strct); dbus_message_iter_get_basic (&strct, &subject); dbus_message_iter_next (&strct); dbus_message_iter_get_basic (&strct, &predicate); diff --git a/src/libtracker-common/tracker-dbus.h b/src/libtracker-common/tracker-dbus.h index 483c4b7df..b97cde92a 100644 --- a/src/libtracker-common/tracker-dbus.h +++ b/src/libtracker-common/tracker-dbus.h @@ -41,12 +41,13 @@ G_BEGIN_DECLS #define TRACKER_TYPE_INT_ARRAY_MAP \ dbus_g_type_get_map ("GHashTable", G_TYPE_INT, DBUS_TYPE_G_INT_ARRAY) -#define TRACKER_TYPE_THREE_INT_ARRAY \ +#define TRACKER_TYPE_FOUR_INT_ARRAY \ dbus_g_type_get_collection ("GPtrArray", \ dbus_g_type_get_struct("GValueArray", \ G_TYPE_INT, \ G_TYPE_INT, \ G_TYPE_INT, \ + G_TYPE_INT, \ G_TYPE_INVALID)) #define TRACKER_TYPE_EVENT_ARRAY \ diff --git a/src/libtracker-data/tracker-class.c b/src/libtracker-data/tracker-class.c index a4ac1dbba..b5af70e15 100644 --- a/src/libtracker-data/tracker-class.c +++ b/src/libtracker-data/tracker-class.c @@ -48,21 +48,21 @@ struct _TrackerClassPrivate { struct { struct { GArray *sub_pred_ids; - GArray *object_ids; + GArray *obj_graph_ids; } pending; struct { GArray *sub_pred_ids; - GArray *object_ids; + GArray *obj_graph_ids; } ready; } deletes; struct { struct { GArray *sub_pred_ids; - GArray *object_ids; + GArray *obj_graph_ids; } pending; struct { GArray *sub_pred_ids; - GArray *object_ids; + GArray *obj_graph_ids; } ready; } inserts; }; @@ -94,14 +94,14 @@ tracker_class_init (TrackerClass *service) priv->last_domain_indexes = NULL; priv->deletes.pending.sub_pred_ids = g_array_new (FALSE, FALSE, sizeof (gint64)); - priv->deletes.pending.object_ids = g_array_new (FALSE, FALSE, sizeof (gint)); + priv->deletes.pending.obj_graph_ids = g_array_new (FALSE, FALSE, sizeof (gint64)); priv->deletes.ready.sub_pred_ids = g_array_new (FALSE, FALSE, sizeof (gint64)); - priv->deletes.ready.object_ids = g_array_new (FALSE, FALSE, sizeof (gint)); + priv->deletes.ready.obj_graph_ids = g_array_new (FALSE, FALSE, sizeof (gint64)); priv->inserts.pending.sub_pred_ids = g_array_new (FALSE, FALSE, sizeof (gint64)); - priv->inserts.pending.object_ids = g_array_new (FALSE, FALSE, sizeof (gint)); + priv->inserts.pending.obj_graph_ids = g_array_new (FALSE, FALSE, sizeof (gint64)); priv->inserts.ready.sub_pred_ids = g_array_new (FALSE, FALSE, sizeof (gint64)); - priv->inserts.ready.object_ids = g_array_new (FALSE, FALSE, sizeof (gint)); + priv->inserts.ready.obj_graph_ids = g_array_new (FALSE, FALSE, sizeof (gint64)); /* Make GET_PRIV working */ service->priv = priv; @@ -121,14 +121,14 @@ class_finalize (GObject *object) g_array_free (priv->domain_indexes, TRUE); g_array_free (priv->deletes.pending.sub_pred_ids, TRUE); - g_array_free (priv->deletes.pending.object_ids, TRUE); + g_array_free (priv->deletes.pending.obj_graph_ids, TRUE); g_array_free (priv->deletes.ready.sub_pred_ids, TRUE); - g_array_free (priv->deletes.ready.object_ids, TRUE); + g_array_free (priv->deletes.ready.obj_graph_ids, TRUE); g_array_free (priv->inserts.pending.sub_pred_ids, TRUE); - g_array_free (priv->inserts.pending.object_ids, TRUE); + g_array_free (priv->inserts.pending.obj_graph_ids, TRUE); g_array_free (priv->inserts.ready.sub_pred_ids, TRUE); - g_array_free (priv->inserts.ready.object_ids, TRUE); + g_array_free (priv->inserts.ready.obj_graph_ids, TRUE); if (priv->last_domain_indexes) g_array_free (priv->last_domain_indexes, TRUE); @@ -482,15 +482,20 @@ tracker_class_foreach_insert_event (TrackerClass *class, priv = GET_PRIV (class); for (i = 0; i < priv->inserts.ready.sub_pred_ids->len; i++) { - gint subject_id, pred_id, object_id; + gint graph_id, subject_id, pred_id, object_id; gint64 sub_pred_id; + gint64 obj_graph_id; sub_pred_id = g_array_index (priv->inserts.ready.sub_pred_ids, gint64, i); + obj_graph_id = g_array_index (priv->inserts.ready.obj_graph_ids, gint64, i); + pred_id = sub_pred_id & 0xffffffff; subject_id = sub_pred_id >> 32; - object_id = g_array_index (priv->inserts.ready.object_ids, gint, i); + object_id = obj_graph_id & 0xffffffff; + graph_id = obj_graph_id >> 32; + - foreach (subject_id, pred_id, object_id, user_data); + foreach (graph_id, subject_id, pred_id, object_id, user_data); } } @@ -508,15 +513,19 @@ tracker_class_foreach_delete_event (TrackerClass *class, priv = GET_PRIV (class); for (i = 0; i < priv->deletes.ready.sub_pred_ids->len; i++) { - gint subject_id, pred_id, object_id; + gint graph_id, subject_id, pred_id, object_id; gint64 sub_pred_id; + gint64 obj_graph_id; sub_pred_id = g_array_index (priv->deletes.ready.sub_pred_ids, gint64, i); + obj_graph_id = g_array_index (priv->deletes.ready.obj_graph_ids, gint64, i); + pred_id = sub_pred_id & 0xffffffff; subject_id = sub_pred_id >> 32; - object_id = g_array_index (priv->deletes.ready.object_ids, gint, i); + object_id = obj_graph_id & 0xffffffff; + graph_id = obj_graph_id >> 32; - foreach (subject_id, pred_id, object_id, user_data); + foreach (graph_id, subject_id, pred_id, object_id, user_data); } } @@ -531,10 +540,10 @@ tracker_class_reset_ready_events (TrackerClass *class) /* Reset */ g_array_set_size (priv->deletes.ready.sub_pred_ids, 0); - g_array_set_size (priv->deletes.ready.object_ids, 0); + g_array_set_size (priv->deletes.ready.obj_graph_ids, 0); g_array_set_size (priv->inserts.ready.sub_pred_ids, 0); - g_array_set_size (priv->inserts.ready.object_ids, 0); + g_array_set_size (priv->inserts.ready.obj_graph_ids, 0); } @@ -549,10 +558,10 @@ tracker_class_reset_pending_events (TrackerClass *class) /* Reset */ g_array_set_size (priv->deletes.pending.sub_pred_ids, 0); - g_array_set_size (priv->deletes.pending.object_ids, 0); + g_array_set_size (priv->deletes.pending.obj_graph_ids, 0); g_array_set_size (priv->inserts.pending.sub_pred_ids, 0); - g_array_set_size (priv->inserts.pending.object_ids, 0); + g_array_set_size (priv->inserts.pending.obj_graph_ids, 0); } @@ -565,10 +574,10 @@ tracker_class_transact_events (TrackerClass *class) priv = GET_PRIV (class); /* Move */ - g_array_insert_vals (priv->deletes.ready.object_ids, - priv->deletes.ready.object_ids->len, - priv->deletes.pending.object_ids->data, - priv->deletes.pending.object_ids->len); + g_array_insert_vals (priv->deletes.ready.obj_graph_ids, + priv->deletes.ready.obj_graph_ids->len, + priv->deletes.pending.obj_graph_ids->data, + priv->deletes.pending.obj_graph_ids->len); g_array_insert_vals (priv->deletes.ready.sub_pred_ids, priv->deletes.ready.sub_pred_ids->len, @@ -577,14 +586,14 @@ tracker_class_transact_events (TrackerClass *class) /* Reset */ g_array_set_size (priv->deletes.pending.sub_pred_ids, 0); - g_array_set_size (priv->deletes.pending.object_ids, 0); + g_array_set_size (priv->deletes.pending.obj_graph_ids, 0); /* Move */ - g_array_insert_vals (priv->inserts.ready.object_ids, - priv->inserts.ready.object_ids->len, - priv->inserts.pending.object_ids->data, - priv->inserts.pending.object_ids->len); + g_array_insert_vals (priv->inserts.ready.obj_graph_ids, + priv->inserts.ready.obj_graph_ids->len, + priv->inserts.pending.obj_graph_ids->data, + priv->inserts.pending.obj_graph_ids->len); g_array_insert_vals (priv->inserts.ready.sub_pred_ids, priv->inserts.ready.sub_pred_ids->len, @@ -593,37 +602,42 @@ tracker_class_transact_events (TrackerClass *class) /* Reset */ g_array_set_size (priv->inserts.pending.sub_pred_ids, 0); - g_array_set_size (priv->inserts.pending.object_ids, 0); + g_array_set_size (priv->inserts.pending.obj_graph_ids, 0); } static void insert_vals_into_arrays (GArray *sub_pred_ids, - GArray *object_ids, + GArray *obj_graph_ids, + gint graph_id, gint subject_id, gint pred_id, gint object_id) { guint i; gint64 sub_pred_id; + gint64 obj_graph_id; sub_pred_id = (gint64) subject_id; sub_pred_id = sub_pred_id << 32 | pred_id; + obj_graph_id = (gint64) object_id; + obj_graph_id = obj_graph_id << 32 | graph_id; for (i = 0; i < sub_pred_ids->len; i++) { if (sub_pred_id < g_array_index (sub_pred_ids, gint64, i)) { g_array_insert_val (sub_pred_ids, i, sub_pred_id); - g_array_insert_val (object_ids, i, object_id); + g_array_insert_val (obj_graph_ids, i, obj_graph_id); return; } } g_array_append_val (sub_pred_ids, sub_pred_id); - g_array_append_val (object_ids, object_id); + g_array_append_val (obj_graph_ids, obj_graph_id); } void tracker_class_add_insert_event (TrackerClass *class, + gint graph_id, gint subject_id, gint pred_id, gint object_id) @@ -634,7 +648,8 @@ tracker_class_add_insert_event (TrackerClass *class, priv = GET_PRIV (class); insert_vals_into_arrays (priv->inserts.pending.sub_pred_ids, - priv->inserts.pending.object_ids, + priv->inserts.pending.obj_graph_ids, + graph_id, subject_id, pred_id, object_id); @@ -642,6 +657,7 @@ tracker_class_add_insert_event (TrackerClass *class, void tracker_class_add_delete_event (TrackerClass *class, + gint graph_id, gint subject_id, gint pred_id, gint object_id) @@ -652,7 +668,8 @@ tracker_class_add_delete_event (TrackerClass *class, priv = GET_PRIV (class); insert_vals_into_arrays (priv->deletes.pending.sub_pred_ids, - priv->deletes.pending.object_ids, + priv->deletes.pending.obj_graph_ids, + graph_id, subject_id, pred_id, object_id); diff --git a/src/libtracker-data/tracker-class.h b/src/libtracker-data/tracker-class.h index 2bc90a1c4..2b4d5c1fb 100644 --- a/src/libtracker-data/tracker-class.h +++ b/src/libtracker-data/tracker-class.h @@ -50,7 +50,8 @@ struct _TrackerClassClass { GObjectClass parent_class; }; -typedef void (*TrackerEventsForeach) (gint subject_id, +typedef void (*TrackerEventsForeach) (gint graph_id, + gint subject_id, gint pred_id, gint object_id, gpointer user_data); @@ -102,10 +103,12 @@ void tracker_class_reset_ready_events (TrackerClass *cla void tracker_class_reset_pending_events (TrackerClass *class); void tracker_class_transact_events (TrackerClass *class); void tracker_class_add_delete_event (TrackerClass *class, + gint graph_id, gint subject_id, gint pred_id, gint object_id); void tracker_class_add_insert_event (TrackerClass *class, + gint graph_id, gint subject_id, gint pred_id, gint object_id); diff --git a/src/tracker-store/tracker-events.c b/src/tracker-store/tracker-events.c index 017567530..ddc065465 100644 --- a/src/tracker-store/tracker-events.c +++ b/src/tracker-store/tracker-events.c @@ -104,6 +104,7 @@ tracker_events_add_insert (gint graph_id, if (class) { tracker_class_add_insert_event (class, + graph_id, subject_id, pred_id, object_id); @@ -116,6 +117,7 @@ tracker_events_add_insert (gint graph_id, for (i = 0; i < rdf_types->len; i++) { if (is_allowed (private, rdf_types->pdata[i], 0)) { tracker_class_add_insert_event (rdf_types->pdata[i], + graph_id, subject_id, pred_id, object_id); @@ -165,6 +167,7 @@ tracker_events_add_delete (gint graph_id, if (class) { tracker_class_add_delete_event (class, + graph_id, subject_id, pred_id, object_id); @@ -177,6 +180,7 @@ tracker_events_add_delete (gint graph_id, for (i = 0; i < rdf_types->len; i++) { if (is_allowed (private, rdf_types->pdata[i], 0)) { tracker_class_add_delete_event (rdf_types->pdata[i], + graph_id, subject_id, pred_id, object_id); diff --git a/src/tracker-store/tracker-resources.c b/src/tracker-store/tracker-resources.c index 3fc0d1b0d..89f68c8c7 100644 --- a/src/tracker-store/tracker-resources.c +++ b/src/tracker-store/tracker-resources.c @@ -131,8 +131,8 @@ tracker_resources_class_init (TrackerResourcesClass *klass) tracker_marshal_VOID__STRING_BOXED_BOXED, G_TYPE_NONE, 3, G_TYPE_STRING, - TRACKER_TYPE_THREE_INT_ARRAY, - TRACKER_TYPE_THREE_INT_ARRAY); + TRACKER_TYPE_FOUR_INT_ARRAY, + TRACKER_TYPE_FOUR_INT_ARRAY); g_type_class_add_private (object_class, sizeof (TrackerResourcesPrivate)); } @@ -534,7 +534,8 @@ tracker_resources_batch_commit (TrackerResources *self, } static void -foreach_add_to_iter (gint subject_id, +foreach_add_to_iter (gint graph_id, + gint subject_id, gint pred_id, gint object_id, gpointer user_data) @@ -543,6 +544,7 @@ foreach_add_to_iter (gint subject_id, DBusMessageIter struct_iter; dbus_message_iter_open_container (array_iter, DBUS_TYPE_STRUCT, NULL, &struct_iter); + dbus_message_iter_append_basic (&struct_iter, DBUS_TYPE_INT32, &graph_id); dbus_message_iter_append_basic (&struct_iter, DBUS_TYPE_INT32, &subject_id); dbus_message_iter_append_basic (&struct_iter, DBUS_TYPE_INT32, &pred_id); dbus_message_iter_append_basic (&struct_iter, DBUS_TYPE_INT32, &object_id); @@ -571,7 +573,7 @@ emit_class_signal (TrackerResources *self, dbus_message_iter_append_basic (&iter, DBUS_TYPE_STRING, &class_uri); dbus_message_iter_open_container (&iter, DBUS_TYPE_ARRAY, - "(iii)", &deletes_iter); + "(iiii)", &deletes_iter); tracker_class_foreach_delete_event (class, foreach_add_to_iter, &deletes_iter); @@ -579,7 +581,7 @@ emit_class_signal (TrackerResources *self, dbus_message_iter_open_container (&iter, DBUS_TYPE_ARRAY, - "(iii)", &inserts_iter); + "(iiii)", &inserts_iter); tracker_class_foreach_insert_event (class, foreach_add_to_iter, &inserts_iter); diff --git a/tests/functional-tests/class-signal-test.vala b/tests/functional-tests/class-signal-test.vala index f5d1cfdc6..5affae32c 100644 --- a/tests/functional-tests/class-signal-test.vala +++ b/tests/functional-tests/class-signal-test.vala @@ -25,6 +25,7 @@ const string title_data = "title"; struct Event { + int graph_id; int subject_id; int pred_id; int object_id; |