summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDebarshi Ray <debarshir@freedesktop.org>2012-07-11 20:04:21 +0200
committerDebarshi Ray <debarshir@freedesktop.org>2012-08-28 19:37:57 +0200
commit6e9636b104afe03ff99bf63bbe280f9b883c2bef (patch)
tree0b2e70d0b271298dc2b006a9a8fecece62346f05
parent401e164871a9664de951f287d335bf58372ee4c4 (diff)
downloadtelepathy-logger-6e9636b104afe03ff99bf63bbe280f9b883c2bef.tar.gz
log-walker: Add rewind skeleton
Fixes: https://bugs.freedesktop.org/41772
-rw-r--r--telepathy-logger/log-walker.c98
-rw-r--r--telepathy-logger/log-walker.h9
2 files changed, 107 insertions, 0 deletions
diff --git a/telepathy-logger/log-walker.c b/telepathy-logger/log-walker.c
index d9cbf1b..8ed206d 100644
--- a/telepathy-logger/log-walker.c
+++ b/telepathy-logger/log-walker.c
@@ -249,6 +249,37 @@ tpl_log_walker_get_events_async_thread (GSimpleAsyncResult *simple,
static void
+tpl_log_walker_rewind (TplLogWalker *walker,
+ guint num_events,
+ GError **error)
+{
+ g_return_if_fail (TPL_IS_LOG_WALKER (walker));
+}
+
+
+static void
+tpl_log_walker_rewind_async_thread (GSimpleAsyncResult *simple,
+ GObject *object,
+ GCancellable *cancellable)
+{
+ GError *error = NULL;
+ TplLogWalkerAsyncData *async_data;
+
+ async_data = (TplLogWalkerAsyncData *) g_async_result_get_user_data (
+ G_ASYNC_RESULT (simple));
+
+ tpl_log_walker_rewind (TPL_LOG_WALKER (object),
+ async_data->num_events, &error);
+
+ if (error != NULL)
+ {
+ g_simple_async_result_set_from_error (simple, error);
+ g_error_free (error);
+ }
+}
+
+
+static void
tpl_log_walker_dispose (GObject *object)
{
TplLogWalkerPriv *priv;
@@ -404,6 +435,73 @@ tpl_log_walker_get_events_finish (TplLogWalker *walker,
/**
+ * tpl_log_walker_rewind_async:
+ * @walker: a #TplLogWalker
+ * @num_events: number of events to move back
+ * @callback: (scope async) (allow-none): a callback to call when
+ * the request is satisfied
+ * @user_data: data to pass to @callback
+ *
+ * Move the @walker back by the last @num_event events that were
+ * returned by tpl_log_walker_get_events_async().
+ */
+void
+tpl_log_walker_rewind_async (TplLogWalker *walker,
+ guint num_events,
+ GAsyncReadyCallback callback,
+ gpointer user_data)
+{
+ GSimpleAsyncResult *simple;
+ TplLogWalkerAsyncData *async_data;
+
+ g_return_if_fail (TPL_IS_LOG_WALKER (walker));
+
+ async_data = tpl_log_walker_async_data_new ();
+ async_data->cb = callback;
+ async_data->user_data = user_data;
+ async_data->num_events = num_events;
+
+ simple = g_simple_async_result_new (G_OBJECT (walker),
+ tpl_log_walker_async_operation_cb, async_data,
+ tpl_log_walker_rewind_async);
+
+ g_simple_async_result_run_in_thread (simple,
+ tpl_log_walker_rewind_async_thread, G_PRIORITY_DEFAULT,
+ NULL);
+
+ g_object_unref (simple);
+}
+
+
+/**
+ * tpl_log_walker_rewind_finish:
+ * @walker: a #TplLogWalker
+ * @result: a #GAsyncResult
+ * @error: a #GError to fill
+ *
+ * Returns: #TRUE if the operation was successful, otherwise #FALSE.
+ */
+gboolean
+tpl_log_walker_rewind_finish (TplLogWalker *walker,
+ GAsyncResult *result,
+ GError **error)
+{
+ GSimpleAsyncResult *simple;
+
+ g_return_val_if_fail (TPL_IS_LOG_WALKER (walker), FALSE);
+ g_return_val_if_fail (g_simple_async_result_is_valid (result,
+ G_OBJECT (walker), tpl_log_walker_rewind_async), FALSE);
+
+ simple = G_SIMPLE_ASYNC_RESULT (result);
+
+ if (g_simple_async_result_propagate_error (simple, error))
+ return FALSE;
+
+ return TRUE;
+}
+
+
+/**
* tpl_log_walker_is_begin:
* @walker: a #TplLogWalker
*
diff --git a/telepathy-logger/log-walker.h b/telepathy-logger/log-walker.h
index 79202b8..df02a8f 100644
--- a/telepathy-logger/log-walker.h
+++ b/telepathy-logger/log-walker.h
@@ -75,6 +75,15 @@ gboolean tpl_log_walker_get_events_finish (TplLogWalker *walker,
GList **events,
GError **error);
+void tpl_log_walker_rewind_async (TplLogWalker *walker,
+ guint num_events,
+ GAsyncReadyCallback callback,
+ gpointer user_data);
+
+gboolean tpl_log_walker_rewind_finish (TplLogWalker *walker,
+ GAsyncResult *result,
+ GError **error);
+
gboolean tpl_log_walker_is_begin (TplLogWalker *walker);
gboolean tpl_log_walker_is_end (TplLogWalker *walker);