summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSam Thursfield <sam@afuera.me.uk>2018-04-20 19:00:31 +0200
committerSam Thursfield <sam@afuera.me.uk>2018-08-11 20:14:54 +0200
commiteb24ea93bc550934d15223d002b490143e604921 (patch)
tree2a1c2151161a7178550871b43ebb84647107fcf3
parent061667e1eeac036130a944083aca4fcf16004e6a (diff)
downloadtracker-sam/tracker-sparql-connection-set-dbus-connection.tar.gz
Add tracker_sparql_connection_get/set_dbus_connection()sam/tracker-sparql-connection-set-dbus-connection
Currently it's only possible to open a TrackerSparqlConnection to an instance of Tracker that is running on the session-wide message bus. There are use cases for running the Tracker daemons on a private session bus though. In fact it's necessary to do this if you want to set up a custom domain without having to become root and create .service files in /usr/share/dbus-1/services. It would also be useful for the functional-tests to be able to use libtracker-sparql instead of having to talk directly to Tracker's D-Bus API.
-rw-r--r--src/libtracker-bus/tracker-bus.vala8
-rw-r--r--src/libtracker-sparql-backend/tracker-backend.vala13
-rw-r--r--src/libtracker-sparql/tracker-connection.vala29
-rw-r--r--src/libtracker-sparql/tracker-notifier.c4
-rw-r--r--tests/functional-tests/ipc/test-bus-query.vala2
-rw-r--r--tests/functional-tests/ipc/test-bus-update.vala2
6 files changed, 51 insertions, 7 deletions
diff --git a/src/libtracker-bus/tracker-bus.vala b/src/libtracker-bus/tracker-bus.vala
index 4ba3eedb4..3b971d030 100644
--- a/src/libtracker-bus/tracker-bus.vala
+++ b/src/libtracker-bus/tracker-bus.vala
@@ -21,9 +21,13 @@ public class Tracker.Bus.Connection : Tracker.Sparql.Connection {
DBusConnection bus;
string dbus_name;
- public Connection (string dbus_name) throws Sparql.Error, IOError, DBusError, GLib.Error {
+ public Connection (string dbus_name, DBusConnection? dbus_connection) throws Sparql.Error, IOError, DBusError, GLib.Error {
this.dbus_name = dbus_name;
- bus = GLib.Bus.get_sync (Tracker.IPC.bus ());
+
+ if (dbus_connection == null)
+ bus = GLib.Bus.get_sync (Tracker.IPC.bus ());
+ else
+ bus = dbus_connection;
debug ("Waiting for service to become available...");
diff --git a/src/libtracker-sparql-backend/tracker-backend.vala b/src/libtracker-sparql-backend/tracker-backend.vala
index cc6d23c43..845cbd2b8 100644
--- a/src/libtracker-sparql-backend/tracker-backend.vala
+++ b/src/libtracker-sparql-backend/tracker-backend.vala
@@ -19,6 +19,7 @@
static string domain_name = null;
static Tracker.DomainOntology domain_ontology = null;
+static DBusConnection global_dbus_connection = null;
class Tracker.Sparql.Backend : Connection {
bool initialized;
@@ -192,7 +193,7 @@ class Tracker.Sparql.Backend : Connection {
switch (backend) {
case Backend.AUTO:
- bus = new Tracker.Bus.Connection (domain_ontology.get_domain ());
+ bus = new Tracker.Bus.Connection (domain_ontology.get_domain (), global_dbus_connection);
try {
direct = create_readonly_direct ();
@@ -207,7 +208,7 @@ class Tracker.Sparql.Backend : Connection {
break;
case Backend.BUS:
- bus = new Tracker.Bus.Connection (domain_ontology.get_domain ());
+ bus = new Tracker.Bus.Connection (domain_ontology.get_domain (), global_dbus_connection);
break;
default:
@@ -358,3 +359,11 @@ public static void tracker_sparql_connection_set_domain (string? domain) {
public static string? tracker_sparql_connection_get_domain () {
return domain_name;
}
+
+public static void tracker_sparql_connection_set_dbus_connection (DBusConnection dbus_connection) {
+ global_dbus_connection = dbus_connection;
+}
+
+public static DBusConnection? tracker_sparql_connection_get_dbus_connection () {
+ return global_dbus_connection;
+}
diff --git a/src/libtracker-sparql/tracker-connection.vala b/src/libtracker-sparql/tracker-connection.vala
index 412f7e88f..a949ea26a 100644
--- a/src/libtracker-sparql/tracker-connection.vala
+++ b/src/libtracker-sparql/tracker-connection.vala
@@ -606,4 +606,33 @@ public abstract class Tracker.Sparql.Connection : Object {
* Since: 2.0
*/
public extern static string? get_domain ();
+
+ /**
+ * tracker_sparql_connection_set_dbus_connection:
+ * @dbus_connection: A #GDBusConnection to a suitable message bus.
+ *
+ * By default, a connection is opened to the session-wide Tracker services
+ * running on the D-Bus session bus. This function allows you to connect to
+ * Tracker services that are running on a different bus.
+ *
+ * This function must be called before any tracker_sparql_connection_get()
+ * calls happen.
+ *
+ * See also: the TRACKER_IPC_BUS environment variable.
+ *
+ * Since: 2.2
+ */
+ public extern static void set_dbus_connection (DBusConnection dbus_connection);
+
+ /**
+ * tracker_sparql_connection_get_dbus_connection:
+ *
+ * Gets the D-Bus connection that is used to contact the Tracker services.
+ *
+ * Returns: (transfer none): A #GDBusConnection instance, or %NULL if the
+ * default is being used.
+ *
+ * Since: 2.0
+ */
+ public extern static DBusConnection? get_dbus_connection ();
}
diff --git a/src/libtracker-sparql/tracker-notifier.c b/src/libtracker-sparql/tracker-notifier.c
index 72b29da65..7058955c0 100644
--- a/src/libtracker-sparql/tracker-notifier.c
+++ b/src/libtracker-sparql/tracker-notifier.c
@@ -704,7 +704,9 @@ tracker_notifier_initable_init (GInitable *initable,
tracker_notifier_cache_id (notifier, "nie:dataSource");
tracker_notifier_cache_id (notifier, "tracker:extractor-data-source");
- priv->dbus_connection = g_bus_get_sync (G_BUS_TYPE_SESSION, cancellable, error);
+ priv->dbus_connection = tracker_sparql_connection_get_dbus_connection ();
+ if (!priv->dbus_connection)
+ priv->dbus_connection = g_bus_get_sync (G_BUS_TYPE_SESSION, cancellable, error);
if (!priv->dbus_connection)
return FALSE;
diff --git a/tests/functional-tests/ipc/test-bus-query.vala b/tests/functional-tests/ipc/test-bus-query.vala
index b818a5f02..997dc9e7c 100644
--- a/tests/functional-tests/ipc/test-bus-query.vala
+++ b/tests/functional-tests/ipc/test-bus-query.vala
@@ -5,7 +5,7 @@ int
main( string[] args )
{
try {
- TestApp app = new TestApp (new Tracker.Bus.Connection ("org.freedesktop.Tracker1"));
+ TestApp app = new TestApp (new Tracker.Bus.Connection ("org.freedesktop.Tracker1", null));
return app.run ();
} catch (GLib.Error e) {
diff --git a/tests/functional-tests/ipc/test-bus-update.vala b/tests/functional-tests/ipc/test-bus-update.vala
index b818a5f02..997dc9e7c 100644
--- a/tests/functional-tests/ipc/test-bus-update.vala
+++ b/tests/functional-tests/ipc/test-bus-update.vala
@@ -5,7 +5,7 @@ int
main( string[] args )
{
try {
- TestApp app = new TestApp (new Tracker.Bus.Connection ("org.freedesktop.Tracker1"));
+ TestApp app = new TestApp (new Tracker.Bus.Connection ("org.freedesktop.Tracker1", null));
return app.run ();
} catch (GLib.Error e) {