[tracker/tracker-store] Fixed class signals feature
- From: Philip Van Hoof <pvanhoof src gnome org>
- To: svn-commits-list gnome org
- Subject: [tracker/tracker-store] Fixed class signals feature
- Date: Mon, 11 May 2009 06:42:27 -0400 (EDT)
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]