telepathy-logger: log-walker: Add is_begin and is_end methods, and use them in get_events

Nicolas Dufresne nicolasd at kemper.freedesktop.org
Tue Aug 28 13:01:05 PDT 2012


Module: telepathy-logger
Branch: master
Commit: 7c93de6ba523445ab44ecd034d04764b0833114c
URL:    http://cgit.freedesktop.org/telepathy/telepathy-logger/commit/?id=7c93de6ba523445ab44ecd034d04764b0833114c

Author: Debarshi Ray <debarshir at freedesktop.org>
Date:   Thu Jul  5 13:18:37 2012 +0200

log-walker: Add is_begin and is_end methods, and use them in get_events

Fixes: https://bugs.freedesktop.org/41772

---

 telepathy-logger/log-walker.c |   54 +++++++++++++++++++++++++++++++++++++++-
 telepathy-logger/log-walker.h |    4 +++
 2 files changed, 56 insertions(+), 2 deletions(-)

diff --git a/telepathy-logger/log-walker.c b/telepathy-logger/log-walker.c
index d2df31b..b400a07 100644
--- a/telepathy-logger/log-walker.c
+++ b/telepathy-logger/log-walker.c
@@ -45,6 +45,8 @@ struct _TplLogWalkerPriv
 {
   GList *caches;
   GList *iters;
+  gboolean is_begin;
+  gboolean is_end;
 };
 
 
@@ -111,7 +113,10 @@ tpl_log_walker_get_events (TplLogWalker *walker,
   events = NULL;
   i = 0;
 
-  while (i < num_events)
+  if (priv->is_end == TRUE)
+    goto out;
+
+  while (i < num_events && priv->is_end == FALSE)
     {
       GList *k;
       GList *l;
@@ -160,9 +165,14 @@ tpl_log_walker_get_events (TplLogWalker *walker,
           i++;
         }
       else
-        break;
+        priv->is_end = TRUE;
     }
 
+  /* We are still at the beginning if all the log stores were empty. */
+  if (priv->history != NULL)
+    priv->is_begin = FALSE;
+
+ out:
   return events;
 }
 
@@ -219,8 +229,14 @@ tpl_log_walker_finalize (GObject *object)
 static void
 tpl_log_walker_init (TplLogWalker *walker)
 {
+  TplLogWalkerPriv *priv;
+
   walker->priv = G_TYPE_INSTANCE_GET_PRIVATE (walker, TPL_TYPE_LOG_WALKER,
       TplLogWalkerPriv);
+  priv = walker->priv;
+
+  priv->is_begin = TRUE;
+  priv->is_end = FALSE;
 }
 
 
@@ -328,3 +344,37 @@ tpl_log_walker_get_events_finish (TplLogWalker *walker,
 
   return TRUE;
 }
+
+
+/**
+ * tpl_log_walker_is_begin:
+ * @walker: a #TplLogWalker
+ *
+ * Determines whether @walker is pointing at the most recent event in
+ * the logs. This is the case when @walker has not yet returned any
+ * events or has been rewound completely.
+ *
+ * Returns: #TRUE if @walker is pointing at the most recent event,
+ * otherwise #FALSE.
+ */
+gboolean
+tpl_log_walker_is_begin (TplLogWalker *walker)
+{
+  return walker->priv->is_begin;
+}
+
+
+/**
+ * tpl_log_walker_is_end:
+ * @walker: a #TplLogWalker
+ *
+ * Determines whether @walker has run out of events. This is the case
+ * when @walker has returned all the events from the logs.
+ *
+ * Returns: #TRUE if @walker has run out of events, otherwise #FALSE.
+ */
+gboolean
+tpl_log_walker_is_end (TplLogWalker *walker)
+{
+  return walker->priv->is_end;
+}
diff --git a/telepathy-logger/log-walker.h b/telepathy-logger/log-walker.h
index b26b5dd..79202b8 100644
--- a/telepathy-logger/log-walker.h
+++ b/telepathy-logger/log-walker.h
@@ -75,6 +75,10 @@ gboolean tpl_log_walker_get_events_finish (TplLogWalker *walker,
     GList **events,
     GError **error);
 
+gboolean tpl_log_walker_is_begin (TplLogWalker *walker);
+
+gboolean tpl_log_walker_is_end (TplLogWalker *walker);
+
 G_END_DECLS
 
 #endif /* __TPL_LOG_WALKER_H__ */



More information about the telepathy-commits mailing list