diff options
author | Debarshi Ray <debarshir@freedesktop.org> | 2012-06-28 16:03:15 +0200 |
---|---|---|
committer | Debarshi Ray <debarshir@freedesktop.org> | 2012-08-28 19:30:25 +0200 |
commit | 87a54bdafbb654c99d716e65162d9336bbf6db3f (patch) | |
tree | 4b33fa5293a838ee5ee2db9358dcc298d20cce21 /telepathy-logger/log-manager.c | |
parent | de7e0c47de6103c67be5d46e56286d05686c1376 (diff) | |
download | telepathy-logger-87a54bdafbb654c99d716e65162d9336bbf6db3f.tar.gz |
log-manager: Implement walk_filtered_events
Fixes: https://bugs.freedesktop.org/41772
Diffstat (limited to 'telepathy-logger/log-manager.c')
-rw-r--r-- | telepathy-logger/log-manager.c | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/telepathy-logger/log-manager.c b/telepathy-logger/log-manager.c index b4b92dd..5a11c6e 100644 --- a/telepathy-logger/log-manager.c +++ b/telepathy-logger/log-manager.c @@ -1,6 +1,7 @@ /* * Copyright (C) 2003-2007 Imendio AB * Copyright (C) 2007-2011 Collabora Ltd. + * Copyright (C) 2012 Red Hat, Inc. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -43,6 +44,7 @@ #define DEBUG_FLAG TPL_DEBUG_LOG_MANAGER #include <telepathy-logger/debug-internal.h> +#include <telepathy-logger/log-walker-internal.h> #include <telepathy-logger/util-internal.h> /** @@ -1193,6 +1195,53 @@ tpl_log_manager_get_filtered_events_finish (TplLogManager *self, } +/** + * tpl_log_manager_walk_filtered_events: + * @manager: a #TplLogManager + * @account: a #TpAccount + * @target: a non-NULL #TplEntity + * @type_mask: event type filter see #TplEventTypeMask + * @filter: (scope call) (allow-none): an optional filter function + * @filter_data: user data to pass to @filter + * + * Create a #TplLogWalker to traverse all the events exchanged with @target. + + * Returns: (transfer full): a #TplLogWalker + */ +TplLogWalker * +tpl_log_manager_walk_filtered_events (TplLogManager *manager, + TpAccount *account, + TplEntity *target, + gint type_mask, + TplLogEventFilter filter, + gpointer filter_data) +{ + TplLogManagerPriv *priv; + TplLogWalker *walker; + GList *l; + + g_return_val_if_fail (TPL_IS_LOG_MANAGER (manager), NULL); + g_return_val_if_fail (TPL_IS_ENTITY (target), NULL); + + priv = manager->priv; + walker = tpl_log_walker_new (); + + for (l = priv->readable_stores; l != NULL; l = g_list_next (l)) + { + TplLogStore *store = TPL_LOG_STORE (l->data); + TplLogIter *iter; + + iter = _tpl_log_store_create_iter (store, account, target, type_mask, + filter, filter_data); + + if (iter != NULL) + tpl_log_walker_add_iter (walker, iter); + } + + return walker; +} + + static void _get_entities_async_thread (GSimpleAsyncResult *simple, GObject *object, |