[tracker/tracker-store] Fixed class signals feature



commit 5a857ae6b026f0b8081e2b714fd3ee5868c3a09c
Author: Philip Van Hoof <philip codeminded be>
Date:   Mon May 11 12:40:39 2009 +0200

    Fixed class signals feature
    
    Moved the callbacks of libtracker-data into tracker-resources.c
    instead of tracker-resource-class.c, the event_sources was not
    filled in (due to an incomplete port from master), this is now
    taken from priv->event_sources of the TrackerResources singleton.
---
 src/trackerd/tracker-dbus.c           |    2 +-
 src/trackerd/tracker-resource-class.c |   89 +--------------------------------
 src/trackerd/tracker-resource-class.h |    5 ++
 src/trackerd/tracker-resources.c      |   87 +++++++++++++++++++++++++++++++-
 src/trackerd/tracker-resources.h      |    4 +-
 5 files changed, 95 insertions(+), 92 deletions(-)

diff --git a/src/trackerd/tracker-dbus.c b/src/trackerd/tracker-dbus.c
index caef46c..afe3a26 100644
--- a/src/trackerd/tracker-dbus.c
+++ b/src/trackerd/tracker-dbus.c
@@ -371,7 +371,7 @@ tracker_dbus_register_objects (TrackerConfig	*config,
 	}
 
 
-	tracker_resources_set_event_sources (resources, event_sources);
+	tracker_resources_prepare (resources, event_sources);
 
 	return TRUE;
 }
diff --git a/src/trackerd/tracker-resource-class.c b/src/trackerd/tracker-resource-class.c
index c3c175a..8980acb 100644
--- a/src/trackerd/tracker-resource-class.c
+++ b/src/trackerd/tracker-resource-class.c
@@ -38,21 +38,6 @@
 #include "tracker-resource-class.h"
 #include "tracker-marshal.h"
 
-#define RDF_PREFIX TRACKER_RDF_PREFIX
-#define RDF_TYPE RDF_PREFIX "type"
-
-static void on_statements_committed (gpointer user_data);
-static void on_statement_inserted   (const gchar *subject,
-				     const gchar *predicate,
-				     const gchar *object,
-				     GPtrArray   *rdf_types,
-				     gpointer user_data);
-static void on_statement_deleted    (const gchar *subject,
-				     const gchar *predicate,
-				     const gchar *object,
-				     GPtrArray   *rdf_types,
-				     gpointer user_data);
-
 #define TRACKER_RESOURCE_CLASS_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), TRACKER_TYPE_RESOURCE_CLASS, TrackerResourceClassPrivate))
 
 typedef struct {
@@ -124,9 +109,6 @@ tracker_resource_class_class_init (TrackerResourceClassClass *klass)
 static void
 tracker_resource_class_init (TrackerResourceClass *object)
 {
-	tracker_data_set_insert_statement_callback (on_statement_inserted, object);
-	tracker_data_set_delete_statement_callback (on_statement_deleted, object);
-	tracker_data_set_commit_statement_callback (on_statements_committed, object);
 }
 
 static void
@@ -159,7 +141,7 @@ free_array (GPtrArray *array)
 	g_ptr_array_free (array, TRUE);
 }
 
-static void
+void
 tracker_resource_class_emit_events (TrackerResourceClass  *object)
 {
 	TrackerResourceClassPrivate *priv;
@@ -227,7 +209,7 @@ tracker_resource_class_get_rdf_class (TrackerResourceClass  *object)
 	return priv->rdf_class;
 }
 
-static void 
+void 
 tracker_resource_class_add_event (TrackerResourceClass  *object,
 				  const gchar           *uri,
 				  TrackerDBusEventsType type)
@@ -256,70 +238,3 @@ tracker_resource_class_add_event (TrackerResourceClass  *object,
 		break;
 	}
 }
-
-static void
-on_statements_committed (gpointer user_data)
-{
-	GPtrArray *events;
-
-	events = tracker_events_get_pending ();
-
-	if (events) {
-		GSList *event_sources, *l, *to_emit = NULL;
-		guint i;
-
-		for (i = 0; i < events->len; i++) {
-			GValueArray *event = events->pdata[i];
-			const gchar *uri = g_value_get_string (g_value_array_get_nth (event, 0));
-			const gchar *rdf_class = g_value_get_string (g_value_array_get_nth (event, 1));
-			TrackerDBusEventsType type = g_value_get_int (g_value_array_get_nth (event, 2));
-
-			for (l = event_sources; l; l = l->next) {
-				TrackerResourceClass *class_ = l->data;
-				if (g_strcmp0 (rdf_class, tracker_resource_class_get_rdf_class (class_)) == 0) {
-					tracker_resource_class_add_event (class_, uri, type);
-					to_emit = g_slist_prepend (to_emit, class_);
-				}
-			}
-		}
-
-		if (to_emit) {
-			for (l = to_emit; l; l = l->next) {
-				TrackerResourceClass *class_ = l->data;
-				tracker_resource_class_emit_events (class_);
-			}
-
-			g_slist_free (to_emit);
-		}
-	}
-
-	tracker_events_reset ();
-}
-
-static void
-on_statement_inserted (const gchar *subject,
-		       const gchar *predicate,
-		       const gchar *object,
-		       GPtrArray   *rdf_types,
-		       gpointer user_data)
-{
-	if (g_strcmp0 (predicate, RDF_PREFIX "type") == 0) {
-		tracker_events_insert (subject, object, rdf_types, TRACKER_DBUS_EVENTS_TYPE_ADD);
-	} else {
-		tracker_events_insert (subject, object, rdf_types, TRACKER_DBUS_EVENTS_TYPE_UPDATE);
-	}
-}
-
-static void
-on_statement_deleted (const gchar *subject,
-		      const gchar *predicate,
-		      const gchar *object,
-		      GPtrArray   *rdf_types,
-		      gpointer user_data)
-{
-	if (g_strcmp0 (predicate, RDF_PREFIX "type") == 0) {
-		tracker_events_insert (subject, object, rdf_types, TRACKER_DBUS_EVENTS_TYPE_DELETE);
-	} else {
-		tracker_events_insert (subject, object, rdf_types, TRACKER_DBUS_EVENTS_TYPE_UPDATE);
-	}
-}
diff --git a/src/trackerd/tracker-resource-class.h b/src/trackerd/tracker-resource-class.h
index 365fd42..bb1e213 100644
--- a/src/trackerd/tracker-resource-class.h
+++ b/src/trackerd/tracker-resource-class.h
@@ -56,6 +56,11 @@ TrackerResourceClass  *tracker_resource_class_new           (const gchar *rdf_cl
 
 const gchar *          tracker_resource_class_get_rdf_class (TrackerResourceClass  *object);
 
+void                   tracker_resource_class_add_event     (TrackerResourceClass  *object,
+                                                             const gchar           *uri,
+                                                             TrackerDBusEventsType  type);
+void                   tracker_resource_class_emit_events   (TrackerResourceClass  *object);
+
 G_END_DECLS
 
 #endif /* __TRACKERD_RESOURCES_CLASS_H__ */
diff --git a/src/trackerd/tracker-resources.c b/src/trackerd/tracker-resources.c
index f243fd8..fdb29dd 100644
--- a/src/trackerd/tracker-resources.c
+++ b/src/trackerd/tracker-resources.c
@@ -27,6 +27,7 @@
 #include <libtracker-common/tracker-log.h>
 #include <libtracker-common/tracker-utils.h>
 #include <libtracker-common/tracker-type-utils.h>
+#include <libtracker-common/tracker-ontology.h>
 
 #include <libtracker-db/tracker-db-dbus.h>
 
@@ -39,6 +40,10 @@
 #include "tracker-marshal.h"
 #include "tracker-resources.h"
 #include "tracker-resource-class.h"
+#include "tracker-events.h"
+
+#define RDF_PREFIX TRACKER_RDF_PREFIX
+#define RDF_TYPE RDF_PREFIX "type"
 
 G_DEFINE_TYPE(TrackerResources, tracker_resources, G_TYPE_OBJECT)
 
@@ -277,9 +282,83 @@ tracker_resources_sparql_update (TrackerResources	 *self,
 	tracker_dbus_request_success (request_id);
 }
 
+
+static void
+on_statements_committed (gpointer user_data)
+{
+	GPtrArray *events;
+	TrackerResourcesPrivate *priv;
+
+	priv = TRACKER_RESOURCES_GET_PRIVATE (user_data);
+
+	events = tracker_events_get_pending ();
+
+	if (events) {
+		GSList *event_sources, *l, *to_emit = NULL;
+		guint i;
+
+		event_sources =priv->event_sources;
+
+		for (i = 0; i < events->len; i++) {
+			GValueArray *event = events->pdata[i];
+			const gchar *uri = g_value_get_string (g_value_array_get_nth (event, 0));
+			const gchar *rdf_class = g_value_get_string (g_value_array_get_nth (event, 1));
+			TrackerDBusEventsType type = g_value_get_int (g_value_array_get_nth (event, 2));
+
+			for (l = event_sources; l; l = l->next) {
+				TrackerResourceClass *class_ = l->data;
+				if (g_strcmp0 (rdf_class, tracker_resource_class_get_rdf_class (class_)) == 0) {
+					tracker_resource_class_add_event (class_, uri, type);
+					to_emit = g_slist_prepend (to_emit, class_);
+				}
+			}
+		}
+
+		if (to_emit) {
+			for (l = to_emit; l; l = l->next) {
+				TrackerResourceClass *class_ = l->data;
+				tracker_resource_class_emit_events (class_);
+			}
+
+			g_slist_free (to_emit);
+		}
+	}
+
+	tracker_events_reset ();
+}
+
+static void
+on_statement_inserted (const gchar *subject,
+		       const gchar *predicate,
+		       const gchar *object,
+		       GPtrArray   *rdf_types,
+		       gpointer user_data)
+{
+	if (g_strcmp0 (predicate, RDF_PREFIX "type") == 0) {
+		tracker_events_insert (subject, object, rdf_types, TRACKER_DBUS_EVENTS_TYPE_ADD);
+	} else {
+		tracker_events_insert (subject, object, rdf_types, TRACKER_DBUS_EVENTS_TYPE_UPDATE);
+	}
+}
+
+static void
+on_statement_deleted (const gchar *subject,
+		      const gchar *predicate,
+		      const gchar *object,
+		      GPtrArray   *rdf_types,
+		      gpointer user_data)
+{
+	if (g_strcmp0 (predicate, RDF_PREFIX "type") == 0) {
+		tracker_events_insert (subject, object, rdf_types, TRACKER_DBUS_EVENTS_TYPE_DELETE);
+	} else {
+		tracker_events_insert (subject, object, rdf_types, TRACKER_DBUS_EVENTS_TYPE_UPDATE);
+	}
+}
+
+
 void 
-tracker_resources_set_event_sources (TrackerResources *object,
-				     GSList           *event_sources)
+tracker_resources_prepare (TrackerResources *object,
+			   GSList           *event_sources)
 {
 	TrackerResourcesPrivate *priv;
 
@@ -287,5 +366,9 @@ tracker_resources_set_event_sources (TrackerResources *object,
 
 	free_event_sources (priv);
 
+	tracker_data_set_insert_statement_callback (on_statement_inserted, object);
+	tracker_data_set_delete_statement_callback (on_statement_deleted, object);
+	tracker_data_set_commit_statement_callback (on_statements_committed, object);
+
 	priv->event_sources = event_sources;
 }
diff --git a/src/trackerd/tracker-resources.h b/src/trackerd/tracker-resources.h
index d6f3fca..a50d4ef 100644
--- a/src/trackerd/tracker-resources.h
+++ b/src/trackerd/tracker-resources.h
@@ -51,8 +51,8 @@ struct TrackerResourcesClass {
 GType		 tracker_resources_get_type		 (void);
 TrackerResources *tracker_resources_new			 (void);
 
-void		 tracker_resources_set_event_sources	 (TrackerResources       *object,
-							  GSList                 *event_sources);
+void		 tracker_resources_prepare	 (TrackerResources       *object,
+						  GSList                 *event_sources);
 
 /* DBus methods */
 void		 tracker_resources_insert		 (TrackerResources	 *self,



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]