summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDebarshi Ray <debarshir@freedesktop.org>2012-07-05 13:18:37 +0200
committerDebarshi Ray <debarshir@freedesktop.org>2012-08-28 19:37:56 +0200
commit7c93de6ba523445ab44ecd034d04764b0833114c (patch)
treec8334f78c06d63ce13d4cfe887cd85c55d5a1bf6
parentc3a6999e0bd7513dd01010e5d2607b2afe9885ef (diff)
downloadtelepathy-logger-7c93de6ba523445ab44ecd034d04764b0833114c.tar.gz
log-walker: Add is_begin and is_end methods, and use them in get_events
Fixes: https://bugs.freedesktop.org/41772
-rw-r--r--telepathy-logger/log-walker.c54
-rw-r--r--telepathy-logger/log-walker.h4
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__ */