telepathy-logger: log-manager: Implement walk_filtered_events

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


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

Author: Debarshi Ray <debarshir at freedesktop.org>
Date:   Thu Jun 28 16:03:15 2012 +0200

log-manager: Implement walk_filtered_events

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

---

 telepathy-logger/log-manager.c |   49 ++++++++++++++++++++++++++++++++++++++++
 telepathy-logger/log-manager.h |    8 ++++++
 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,



More information about the telepathy-commits mailing list