summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDebarshi Ray <debarshir@freedesktop.org>2012-06-28 16:03:15 +0200
committerDebarshi Ray <debarshir@freedesktop.org>2012-08-28 19:30:25 +0200
commit87a54bdafbb654c99d716e65162d9336bbf6db3f (patch)
tree4b33fa5293a838ee5ee2db9358dcc298d20cce21
parentde7e0c47de6103c67be5d46e56286d05686c1376 (diff)
downloadtelepathy-logger-87a54bdafbb654c99d716e65162d9336bbf6db3f.tar.gz
log-manager: Implement walk_filtered_events
Fixes: https://bugs.freedesktop.org/41772
-rw-r--r--telepathy-logger/log-manager.c49
-rw-r--r--telepathy-logger/log-manager.h8
2 files changed, 57 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,
diff --git a/telepathy-logger/log-manager.h b/telepathy-logger/log-manager.h
index 6946653..2bc8fa8 100644
--- a/telepathy-logger/log-manager.h
+++ b/telepathy-logger/log-manager.h
@@ -27,6 +27,7 @@
#include <telepathy-glib/telepathy-glib.h>
#include <telepathy-logger/event.h>
+#include <telepathy-logger/log-walker.h>
G_BEGIN_DECLS
#define TPL_TYPE_LOG_MANAGER (tpl_log_manager_get_type ())
@@ -147,6 +148,13 @@ gboolean tpl_log_manager_get_filtered_events_finish (TplLogManager *self,
GList **events,
GError **error);
+TplLogWalker *tpl_log_manager_walk_filtered_events (TplLogManager *manager,
+ TpAccount *account,
+ TplEntity *target,
+ gint type_mask,
+ TplLogEventFilter filter,
+ gpointer filter_data);
+
void tpl_log_manager_get_entities_async (TplLogManager *self,
TpAccount *account,
GAsyncReadyCallback callback,