[next] telepathy-mission-control: wait-for-name: use GDBus directly
Simon McVittie
smcv at kemper.freedesktop.org
Thu Apr 3 07:28:05 PDT 2014
Module: telepathy-mission-control
Branch: next
Commit: f6f008987d0b7bd9c67f517fd487c4309113740b
URL: http://cgit.freedesktop.org/telepathy/telepathy-mission-control/commit/?id=f6f008987d0b7bd9c67f517fd487c4309113740b
Author: Simon McVittie <simon.mcvittie at collabora.co.uk>
Date: Wed Mar 26 19:17:29 2014 +0000
wait-for-name: use GDBus directly
---
util/wait-for-name.c | 88 ++++++++++++++++++++++++++++++++------------------
1 file changed, 57 insertions(+), 31 deletions(-)
diff --git a/util/wait-for-name.c b/util/wait-for-name.c
index bce176a..6ba15cf 100644
--- a/util/wait-for-name.c
+++ b/util/wait-for-name.c
@@ -50,9 +50,9 @@
#endif
#include <glib.h>
+#include <gio/gio.h>
#include <telepathy-glib/telepathy-glib.h>
-#include <telepathy-glib/telepathy-glib-dbus.h>
static int exit_status = EX_SOFTWARE;
static guint timeout_id = 0;
@@ -79,41 +79,49 @@ quit_because_timeout (gpointer data)
}
static void
-noc_cb (TpDBusDaemon *bus_daemon,
- const gchar *name,
- const gchar *new_owner,
- gpointer data)
+name_appeared_cb (GDBusConnection *connection,
+ const gchar *name,
+ const gchar *name_owner,
+ gpointer user_data)
{
- if (new_owner[0] == '\0')
- {
- g_debug ("Waiting for %s", name);
- }
- else
- {
- g_debug ("%s now owned by %s", name, new_owner);
+ g_debug ("%s now owned by %s", name, name_owner);
- if (idle_id == 0)
- idle_id = g_idle_add (quit_because_found, g_main_loop_ref (data));
- }
+ if (idle_id == 0)
+ idle_id = g_idle_add (quit_because_found, g_main_loop_ref (user_data));
+}
+
+static void
+name_vanished_cb (GDBusConnection *connection,
+ const gchar *name,
+ gpointer user_data)
+{
+ g_debug ("Waiting for %s", name);
}
static void
-start_service_cb (TpDBusDaemon *bus_daemon,
- guint ret,
- const GError *error,
- gpointer user_data,
- GObject *weak_object)
+start_service_cb (GObject *source_object,
+ GAsyncResult *result,
+ gpointer user_data)
{
GMainLoop *loop = user_data;
+ GVariant *tuple;
+ guint32 ret;
+ GError *error = NULL;
+
+ tuple = g_dbus_connection_call_finish (G_DBUS_CONNECTION (source_object),
+ result, &error);
- if (error != NULL)
+ if (tuple == NULL)
{
g_message ("%s", error->message);
+ g_error_free (error);
g_main_loop_quit (loop);
exit_status = EX_TEMPFAIL;
}
else
{
+ g_variant_get (tuple, "(u)", &ret);
+
switch (ret)
{
case 1: /* DBUS_START_REPLY_SUCCESS */
@@ -128,7 +136,11 @@ start_service_cb (TpDBusDaemon *bus_daemon,
g_message ("ignoring unknown result from StartServiceByName: %u", ret);
break;
}
+
+ g_variant_unref (tuple);
}
+
+ g_main_loop_unref (loop);
}
#define WFN_TIMEOUT (5 * 60) /* 5 minutes */
@@ -143,10 +155,11 @@ int
main (int argc,
char **argv)
{
- TpDBusDaemon *bus_daemon;
+ GDBusConnection *bus;
GMainLoop *loop;
GError *error = NULL;
GOptionContext *context;
+ guint watch;
g_set_prgname ("mc6-wait-for-name");
@@ -176,10 +189,9 @@ main (int argc,
return EX_USAGE;
}
- g_type_init ();
- bus_daemon = tp_dbus_daemon_dup (&error);
+ bus = g_bus_get_sync (G_BUS_TYPE_SESSION, NULL, &error);
- if (bus_daemon == NULL)
+ if (bus == NULL)
{
g_message ("%s", error->message);
g_error_free (error);
@@ -190,19 +202,33 @@ main (int argc,
if (activate != NULL)
{
- tp_cli_dbus_daemon_call_start_service_by_name (bus_daemon, -1,
- activate, 0 /* no flags */, start_service_cb, g_main_loop_ref (loop),
- (GDestroyNotify) g_main_loop_unref, NULL);
+ g_dbus_connection_call (bus,
+ "org.freedesktop.DBus",
+ "/org/freedesktop/DBus",
+ "org.freedesktop.DBus",
+ "StartServiceByName",
+ g_variant_new ("(su)", activate, 0 /* no flags */),
+ G_VARIANT_TYPE ("(u)"),
+ G_DBUS_CALL_FLAGS_NONE, -1, NULL,
+ start_service_cb,
+ g_main_loop_ref (loop));
}
- tp_dbus_daemon_watch_name_owner (bus_daemon, argv[1],
- noc_cb, g_main_loop_ref (loop), (GDestroyNotify) g_main_loop_unref);
+ watch = g_bus_watch_name_on_connection (bus,
+ argv[1],
+ G_BUS_NAME_WATCHER_FLAGS_NONE,
+ name_appeared_cb,
+ name_vanished_cb,
+ g_main_loop_ref (loop),
+ (GDestroyNotify) g_main_loop_unref);
g_timeout_add_seconds (WFN_TIMEOUT, quit_because_timeout,
g_main_loop_ref (loop));
g_main_loop_run (loop);
+ g_bus_unwatch_name (watch);
+
if (timeout_id != 0)
{
g_source_remove (timeout_id);
@@ -216,7 +242,7 @@ main (int argc,
}
g_main_loop_unref (loop);
- g_object_unref (bus_daemon);
+ g_object_unref (bus);
return exit_status;
}
More information about the telepathy-commits
mailing list