diff options
author | Guillaume Desmottes <guillaume.desmottes@collabora.co.uk> | 2012-04-13 14:35:09 +0200 |
---|---|---|
committer | Guillaume Desmottes <guillaume.desmottes@collabora.co.uk> | 2012-04-18 08:57:32 +0200 |
commit | 8c1aa2f67d0013507da8c0205df1054e673c8552 (patch) | |
tree | 5e3dda7817e9b46dc1e2fd63869b5f64d51dab9e | |
parent | 99341b830f11761fbf3c52b05e42564defbde7bd (diff) |
Add tp_debug_client_get_messages_async()
-rw-r--r-- | telepathy-glib/debug-client.c | 89 | ||||
-rw-r--r-- | telepathy-glib/debug-client.h | 10 | ||||
-rw-r--r-- | 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 a0f129fcd..1fcf25728 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, + ×tamp, &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 9a38b4b67..861be0370 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 c490c4a2d..c528e6103 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 (); } |