[next] telepathy-glib: Add tp_debug_client_get_messages_async()

Simon McVittie smcv at kemper.freedesktop.org
Wed Apr 25 07:26:08 PDT 2012


Module: telepathy-glib
Branch: next
Commit: 8c1aa2f67d0013507da8c0205df1054e673c8552
URL:    http://cgit.freedesktop.org/telepathy/telepathy-glib/commit/?id=8c1aa2f67d0013507da8c0205df1054e673c8552

Author: Guillaume Desmottes <guillaume.desmottes at collabora.co.uk>
Date:   Fri Apr 13 14:35:09 2012 +0200

Add tp_debug_client_get_messages_async()

---

 telepathy-glib/debug-client.c |   89 +++++++++++++++++++++++++++++++++++++++++
 telepathy-glib/debug-client.h |   10 +++++
 tests/dbus/debug-client.c     |   66 ++++++++++++++++++++++++++++++
 3 files changed, 165 insertions(+), 0 deletions(-)

diff --git a/telepathy-glib/debug-client.c b/telepathy-glib/debug-client.c
index a0f129f..1fcf257 100644
--- a/telepathy-glib/debug-client.c
+++ b/telepathy-glib/debug-client.c
@@ -19,6 +19,7 @@
  */
 
 #include <telepathy-glib/debug-client.h>
+#include <telepathy-glib/debug-message-internal.h>
 #include <telepathy-glib/dbus.h>
 #include <telepathy-glib/errors.h>
 #include <telepathy-glib/interfaces.h>
@@ -408,3 +409,91 @@ tp_debug_client_is_enabled (TpDebugClient *self)
 {
   return self->priv->enabled;
 }
+
+static void
+get_messages_cb (TpDebugClient *self,
+    const GPtrArray *messages,
+    const GError *error,
+    gpointer user_data,
+    GObject *weak_object)
+{
+  GSimpleAsyncResult *result = user_data;
+  guint i;
+  GPtrArray *messages_arr;
+
+  if (error != NULL)
+    {
+      DEBUG ("GetMessages() failed: %s", error->message);
+      goto out;
+    }
+
+  messages_arr = g_ptr_array_new_with_free_func (g_object_unref);
+
+  for (i = 0; i < messages->len; i++)
+    {
+      TpDebugMessage *msg;
+      gdouble timestamp;
+      const gchar *domain, *message;
+      TpDebugLevel level;
+
+      tp_value_array_unpack (g_ptr_array_index (messages, i), 4,
+          &timestamp, &domain, &level, &message);
+
+      msg = _tp_debug_message_new (timestamp, domain, level, message);
+
+      g_ptr_array_add (messages_arr, msg);
+    }
+
+  g_simple_async_result_set_op_res_gpointer (result, messages_arr,
+      (GDestroyNotify) g_ptr_array_unref);
+
+out:
+  g_simple_async_result_complete (result);
+}
+
+/**
+ * tp_debug_client_get_messages_async:
+ * @self: a #TpDebugClient
+ * @callback: callback to call when the messages have been retrieved
+ * @user_data: data to pass to @callback
+ *
+ * Retrieve buffered messages from @self. Once @callback is called,
+ * use tp_debug_client_get_messages_finish() to retrieve the #TpDebugMessage
+ * objects.
+ *
+ * Since: UNRELEASED
+ */
+void
+tp_debug_client_get_messages_async (
+    TpDebugClient *self,
+    GAsyncReadyCallback callback,
+    gpointer user_data)
+{
+  GSimpleAsyncResult *result = g_simple_async_result_new (G_OBJECT (self),
+      callback, user_data, tp_debug_client_set_enabled_async);
+
+  tp_cli_debug_call_get_messages (self, -1, get_messages_cb,
+      result, g_object_unref, NULL);
+}
+
+/**
+ * tp_debug_client_get_messages_finish:
+ * @self: a #TpDebugClient
+ * @result: a #GAsyncResult
+ * @error: a #GError to fill
+ *
+ * Finishes tp_debug_client_set_enabled_async().
+ *
+ * Returns: (transfer full) (type GLib.PtrArray) (element-type TelepathyGLib.DebugMessage):
+ * a #GPtrArray of #TpDebugMessage
+ *
+ * Since: UNRELEASED
+ */
+GPtrArray *
+tp_debug_client_get_messages_finish (TpDebugClient *self,
+    GAsyncResult *result,
+    GError **error)
+{
+  _tp_implement_finish_return_copy_pointer (self,
+      tp_debug_client_set_enabled_async, g_ptr_array_ref)
+}
diff --git a/telepathy-glib/debug-client.h b/telepathy-glib/debug-client.h
index 9a38b4b..861be03 100644
--- a/telepathy-glib/debug-client.h
+++ b/telepathy-glib/debug-client.h
@@ -23,6 +23,7 @@
 
 #include <telepathy-glib/defs.h>
 #include <telepathy-glib/proxy.h>
+#include <telepathy-glib/debug-message.h>
 
 G_BEGIN_DECLS
 
@@ -74,6 +75,15 @@ GType tp_debug_client_get_type (void);
 
 void tp_debug_client_init_known_interfaces (void);
 
+void tp_debug_client_get_messages_async (
+    TpDebugClient *self,
+    GAsyncReadyCallback callback,
+    gpointer user_data);
+
+GPtrArray * tp_debug_client_get_messages_finish (TpDebugClient *self,
+    GAsyncResult *result,
+    GError **error) G_GNUC_WARN_UNUSED_RESULT;
+
 G_END_DECLS
 
 #include <telepathy-glib/_gen/tp-cli-debug.h>
diff --git a/tests/dbus/debug-client.c b/tests/dbus/debug-client.c
index c490c4a..c528e61 100644
--- a/tests/dbus/debug-client.c
+++ b/tests/dbus/debug-client.c
@@ -26,6 +26,7 @@ typedef struct {
     /* Client side object */
     TpDebugClient *client;
 
+    GPtrArray *messages;
     GError *error /* initialized where needed */;
     gint wait;
 } Test;
@@ -59,6 +60,8 @@ teardown (Test *test,
 
   tp_clear_object (&test->sender);
   tp_clear_object (&test->client);
+
+  tp_clear_pointer (&test->messages, g_ptr_array_unref);
 }
 
 static void
@@ -173,6 +176,67 @@ test_set_enabled (Test *test,
   g_assert (!enabled);
 }
 
+static void
+get_messages_cb (GObject *source,
+    GAsyncResult *result,
+    gpointer user_data)
+{
+  Test *test = user_data;
+
+  tp_clear_pointer (&test->messages, g_ptr_array_unref);
+
+  test->messages = tp_debug_client_get_messages_finish (
+      TP_DEBUG_CLIENT (source), result, &test->error);
+
+  test->wait--;
+  if (test->wait <= 0)
+    g_main_loop_quit (test->mainloop);
+}
+
+static void
+test_get_messages (Test *test,
+    gconstpointer data G_GNUC_UNUSED)
+{
+  GDateTime *time1, *time2, *t;
+  GTimeVal time_val;
+  TpDebugMessage *msg;
+
+  time1 = g_date_time_new_now_utc ();
+  g_date_time_to_timeval (time1, &time_val);
+
+  tp_debug_sender_add_message (test->sender, &time_val, "domain1",
+      G_LOG_LEVEL_MESSAGE, "message1");
+
+  time2 = g_date_time_new_now_local ();
+  g_date_time_to_timeval (time2, &time_val);
+
+  tp_debug_sender_add_message (test->sender, &time_val, "domain2",
+      G_LOG_LEVEL_DEBUG, "message2");
+
+  tp_debug_client_get_messages_async (test->client, get_messages_cb, test);
+
+  test->wait = 1;
+  g_main_loop_run (test->mainloop);
+  g_assert_no_error (test->error);
+
+  g_assert (test->messages != NULL);
+  g_assert_cmpuint (test->messages->len, ==, 2);
+
+  msg = g_ptr_array_index (test->messages, 0);
+  g_assert (TP_IS_DEBUG_MESSAGE (msg));
+
+  t = tp_debug_message_get_time (msg);
+  g_assert (t != NULL);
+  /* Don't use g_date_time_equal() as the gouble -> GDateTime conversion in
+   * _tp_debug_message_new() may result in a difference of one (!)
+   * millisecond */
+  g_assert_cmpuint (g_date_time_to_unix (t), ==, g_date_time_to_unix (time1));
+
+  g_assert_cmpstr (tp_debug_message_get_domain (msg), ==, "domain1");
+  g_assert_cmpuint (tp_debug_message_get_level (msg), ==, G_LOG_LEVEL_MESSAGE);
+  g_assert_cmpstr (tp_debug_message_get_message (msg), ==, "message1");
+}
+
 int
 main (int argc,
       char **argv)
@@ -188,6 +252,8 @@ main (int argc,
       test_core_feature, teardown);
   g_test_add ("/debug-client/set-enabled", Test, NULL, setup,
       test_set_enabled, teardown);
+  g_test_add ("/debug-client/get-messages", Test, NULL, setup,
+      test_get_messages, teardown);
 
   return g_test_run ();
 }



More information about the telepathy-commits mailing list