summaryrefslogtreecommitdiff
path: root/examples
diff options
context:
space:
mode:
authorPhilip Van Hoof <philip@codeminded.be>2011-01-17 13:47:54 +0100
committerJürg Billeter <j@bitron.ch>2011-01-18 09:45:26 +0100
commitf57e5d9f6a6f07fe87c2f9b60b40a832d8831097 (patch)
tree9487d7ff81aa2d4f50115c37ef8dd1c0154a7740 /examples
parent3aaaa872de2acd09a147140187a59501fd1a886b (diff)
downloadtracker-f57e5d9f6a6f07fe87c2f9b60b40a832d8831097.tar.gz
examples: class-signal: GDBus port of the class signal example
Diffstat (limited to 'examples')
-rw-r--r--examples/class-signal/Makefile.am23
-rw-r--r--examples/class-signal/class-signal.c84
2 files changed, 43 insertions, 64 deletions
diff --git a/examples/class-signal/Makefile.am b/examples/class-signal/Makefile.am
index 313b8fdaf..a4400c95c 100644
--- a/examples/class-signal/Makefile.am
+++ b/examples/class-signal/Makefile.am
@@ -2,23 +2,14 @@ include $(top_srcdir)/Makefile.decl
noinst_PROGRAMS = class-signal
-AM_CPPFLAGS = \
- $(BUILD_CFLAGS) \
- -I$(top_srcdir)/src \
- $(LIBTRACKER_SPARQL_CFLAGS) \
- $(TRACKER_DBUS_CFLAGS)
+AM_CPPFLAGS = \
+ $(BUILD_CFLAGS) \
+ -I$(top_srcdir)/src \
+ $(LIBTRACKER_SPARQL_CFLAGS)
-LDADD = \
+LDADD = \
$(top_builddir)/src/libtracker-sparql/libtracker-sparql-$(TRACKER_API_VERSION).la \
- $(BUILD_LIBS) \
- $(LIBTRACKER_SPARQL_LIBS) \
- $(TRACKER_DBUS_LIBS)
-
-# NOTE: class-signal needed to have gio/dbus/dbus-glib-1 CFLAGS/LIBS
-# added. The reason for this is that the
-# LIBTRACKER_SPARQL_{CFLAGS|LIBS} no longer include dbus/dbus-glib-1
-# so these tests fail without that. The fix is to update the test
-# cases to use gdbus. For now this is a temporary fix for these tests,
-# -mr.
+ $(BUILD_LIBS) \
+ $(LIBTRACKER_SPARQL_LIBS)
class_signal_SOURCES = class-signal.c
diff --git a/examples/class-signal/class-signal.c b/examples/class-signal/class-signal.c
index de36281da..65750c2dc 100644
--- a/examples/class-signal/class-signal.c
+++ b/examples/class-signal/class-signal.c
@@ -17,17 +17,10 @@
* Boston, MA 02110-1301, USA.
*/
-#include <dbus/dbus-glib-bindings.h>
-#include <dbus/dbus-glib-lowlevel.h>
+#include <gio/gio.h>
#include <libtracker-sparql/tracker-sparql.h>
-#define DBUS_MATCH_STR \
- "type='signal', " \
- "sender='" TRACKER_DBUS_SERVICE "', " \
- "path='" TRACKER_DBUS_OBJECT_RESOURCES "', " \
- "interface='" TRACKER_DBUS_INTERFACE_RESOURCES "'"
-
static TrackerSparqlConnection *con;
static void
@@ -56,68 +49,63 @@ handle_statement (gint subject, gint predicate)
}
static void
-class_signal_cb (DBusMessage *message)
+class_signal_cb (GDBusConnection *connection,
+ const gchar *sender_name,
+ const gchar *object_path,
+ const gchar *interface_name,
+ const gchar *signal_name,
+ GVariant *parameters,
+ gpointer user_data)
+
{
- DBusMessageIter iter, arr;
+ GVariantIter *iter1, *iter2;
gchar *class_name;
- gint arg_type, i;
+ gint graph = 0, subject = 0, predicate = 0, object = 0;
- dbus_message_iter_init (message, &iter);
- dbus_message_iter_get_basic (&iter, &class_name);
+ g_variant_get (parameters, "(&sa(iiii)a(iiii))", &class_name, &iter1, &iter2);
g_print ("%s:\n", class_name);
- for (i = 0; i < 2; i++) {
- dbus_message_iter_next (&iter);
- dbus_message_iter_recurse (&iter, &arr);
-
- while ((arg_type = dbus_message_iter_get_arg_type (&arr)) != DBUS_TYPE_INVALID) {
- DBusMessageIter strct;
- 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);
- dbus_message_iter_next (&strct);
- dbus_message_iter_get_basic (&strct, &object);
- handle_statement (subject, predicate);
- dbus_message_iter_next (&arr);
- }
+ while (g_variant_iter_loop (iter1, "(iiii)", &graph, &subject, &predicate, &object)) {
+ handle_statement (subject, predicate);
}
-}
-static DBusHandlerResult
-message_filter (DBusConnection *connection, DBusMessage *message, gpointer ud)
-{
- if (dbus_message_is_signal (message, TRACKER_DBUS_INTERFACE_RESOURCES, "GraphUpdated")) {
- class_signal_cb (message);
- return DBUS_HANDLER_RESULT_HANDLED;
+ while (g_variant_iter_loop (iter2, "(iiii)", &graph, &subject, &predicate, &object)) {
+ handle_statement (subject, predicate);
}
- return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
-}
+ g_variant_iter_free (iter1);
+ g_variant_iter_free (iter2);
+}
gint
main (gint argc, gchar *argv[])
{
GMainLoop *loop;
GError *error = NULL;
- DBusConnection *connection;
+ GDBusConnection *connection;
+ guint signal_id;
g_type_init ();
loop = g_main_loop_new (NULL, FALSE);
con = tracker_sparql_connection_get (NULL, &error);
- connection = dbus_bus_get_private (DBUS_BUS_SESSION, NULL);
- dbus_bus_request_name (connection, TRACKER_DBUS_SERVICE, 0, NULL);
- dbus_connection_add_filter (connection, message_filter, NULL, NULL);
- dbus_bus_add_match (connection, DBUS_MATCH_STR, NULL);
- dbus_connection_setup_with_g_main (connection, NULL);
+ connection = g_bus_get_sync (G_BUS_TYPE_SESSION, NULL, NULL);
+
+ signal_id = g_dbus_connection_signal_subscribe (connection,
+ TRACKER_DBUS_SERVICE,
+ TRACKER_DBUS_INTERFACE_RESOURCES,
+ "GraphUpdated",
+ TRACKER_DBUS_OBJECT_RESOURCES,
+ NULL, /* Use class-name here */
+ G_DBUS_SIGNAL_FLAGS_NONE,
+ class_signal_cb,
+ NULL,
+ NULL);
+
g_main_loop_run (loop);
+ g_dbus_connection_signal_unsubscribe (connection, signal_id);
g_main_loop_unref (loop);
g_object_unref (con);
- dbus_connection_unref (connection);
+ g_object_unref (connection);
return 0;
}