diff options
author | Debarshi Ray <debarshir@freedesktop.org> | 2012-07-05 13:18:37 +0200 |
---|---|---|
committer | Debarshi Ray <debarshir@freedesktop.org> | 2012-08-28 19:37:56 +0200 |
commit | 7c93de6ba523445ab44ecd034d04764b0833114c (patch) | |
tree | c8334f78c06d63ce13d4cfe887cd85c55d5a1bf6 /telepathy-logger | |
parent | c3a6999e0bd7513dd01010e5d2607b2afe9885ef (diff) | |
download | telepathy-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
Diffstat (limited to 'telepathy-logger')
-rw-r--r-- | telepathy-logger/log-walker.c | 54 | ||||
-rw-r--r-- | 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__ */ |