summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/libtracker-sparql/tracker-connection.c23
-rw-r--r--src/libtracker-sparql/tracker-notifier.c15
-rw-r--r--src/libtracker-sparql/tracker-private.h12
3 files changed, 48 insertions, 2 deletions
diff --git a/src/libtracker-sparql/tracker-connection.c b/src/libtracker-sparql/tracker-connection.c
index 5dcc3d226..c6284d46e 100644
--- a/src/libtracker-sparql/tracker-connection.c
+++ b/src/libtracker-sparql/tracker-connection.c
@@ -93,6 +93,29 @@ tracker_sparql_connection_class_init (TrackerSparqlConnectionClass *klass)
object_class->dispose = tracker_sparql_connection_dispose;
}
+gboolean
+tracker_sparql_connection_lookup_dbus_service (TrackerSparqlConnection *connection,
+ const gchar *dbus_name,
+ const gchar *dbus_path,
+ gchar **name,
+ gchar **path)
+{
+ TrackerSparqlConnectionClass *connection_class;
+
+ g_return_val_if_fail (TRACKER_IS_SPARQL_CONNECTION (connection), FALSE);
+ g_return_val_if_fail (dbus_name != NULL, FALSE);
+
+ connection_class = TRACKER_SPARQL_CONNECTION_GET_CLASS (connection);
+ if (!connection_class->lookup_dbus_service)
+ return FALSE;
+
+ return TRACKER_SPARQL_CONNECTION_GET_CLASS (connection)->lookup_dbus_service (connection,
+ dbus_name,
+ dbus_path,
+ name,
+ path);
+}
+
/* The constructor functions are defined in the libtracker-sparql-backend, but
* documented here. */
diff --git a/src/libtracker-sparql/tracker-notifier.c b/src/libtracker-sparql/tracker-notifier.c
index cf1c9a9dd..fce0cbde5 100644
--- a/src/libtracker-sparql/tracker-notifier.c
+++ b/src/libtracker-sparql/tracker-notifier.c
@@ -50,6 +50,7 @@
#include "tracker-private.h"
#include "tracker-sparql-enum-types.h"
#include <libtracker-common/tracker-common.h>
+#include <direct/tracker-direct.h>
typedef struct _TrackerNotifierPrivate TrackerNotifierPrivate;
typedef struct _TrackerNotifierSubscription TrackerNotifierSubscription;
@@ -811,6 +812,7 @@ tracker_notifier_signal_subscribe (TrackerNotifier *notifier,
{
TrackerNotifierSubscription *subscription;
TrackerNotifierPrivate *priv;
+ gchar *dbus_name = NULL, *dbus_path = NULL;
g_return_val_if_fail (TRACKER_IS_NOTIFIER (notifier), 0);
g_return_val_if_fail (G_IS_DBUS_CONNECTION (connection), 0);
@@ -821,15 +823,21 @@ tracker_notifier_signal_subscribe (TrackerNotifier *notifier,
if (!object_path)
object_path = DEFAULT_OBJECT_PATH;
+ tracker_sparql_connection_lookup_dbus_service (priv->connection,
+ service,
+ object_path,
+ &dbus_name,
+ &dbus_path);
+
subscription = tracker_notifier_subscription_new (notifier, connection,
service, object_path);
subscription->handler_id =
g_dbus_connection_signal_subscribe (connection,
- service,
+ dbus_name ? dbus_name : service,
"org.freedesktop.Tracker3.Endpoint",
"GraphUpdated",
- object_path,
+ dbus_path ? dbus_path : object_path,
graph,
G_DBUS_SIGNAL_FLAGS_NONE,
graph_updated_cb,
@@ -839,6 +847,9 @@ tracker_notifier_signal_subscribe (TrackerNotifier *notifier,
GUINT_TO_POINTER (subscription->handler_id),
subscription);
+ g_free (dbus_name);
+ g_free (dbus_path);
+
return subscription->handler_id;
}
diff --git a/src/libtracker-sparql/tracker-private.h b/src/libtracker-sparql/tracker-private.h
index da93ac862..b8c6381ec 100644
--- a/src/libtracker-sparql/tracker-private.h
+++ b/src/libtracker-sparql/tracker-private.h
@@ -106,6 +106,12 @@ struct _TrackerSparqlConnectionClass
GAsyncResult *res,
GError **error);
TrackerBatch * (* create_batch) (TrackerSparqlConnection *connection);
+
+ gboolean (* lookup_dbus_service) (TrackerSparqlConnection *connection,
+ const gchar *dbus_name,
+ const gchar *dbus_path,
+ gchar **name,
+ gchar **path);
};
typedef struct _TrackerSparqlCursorClass TrackerSparqlCursorClass;
@@ -262,6 +268,12 @@ struct _TrackerSerializerClass {
GInputStreamClass parent_class;
};
+gboolean
+tracker_sparql_connection_lookup_dbus_service (TrackerSparqlConnection *connection,
+ const gchar *dbus_name,
+ const gchar *dbus_path,
+ gchar **name,
+ gchar **path);
void tracker_sparql_cursor_set_connection (TrackerSparqlCursor *cursor,
TrackerSparqlConnection *connection);
GError * _translate_internal_error (GError *error);