]> git.0d.be Git - empathy.git/commitdiff
Implemented get_filtered_messages in empathy log store.
authorJonny Lamb <jonny.lamb@collabora.co.uk>
Fri, 6 Mar 2009 11:52:54 +0000 (11:52 +0000)
committerXavier Claessens <xclaesse@src.gnome.org>
Fri, 6 Mar 2009 11:52:54 +0000 (11:52 +0000)
Signed-off-by: Jonny Lamb <jonny.lamb@collabora.co.uk>
svn path=/trunk/; revision=2607

libempathy/empathy-log-store-empathy.c

index 8df57a2e2f6f3bd09a3c08917fd1052cf1e7e333..8bae296857b2d88d51f98c59f2d1c204e82d16fa 100644 (file)
@@ -709,6 +709,46 @@ log_store_empathy_get_name (EmpathyLogStore *self)
   return priv->name;
 }
 
+static GList *
+log_store_empathy_get_filtered_messages (EmpathyLogStore *self,
+                                         McAccount *account,
+                                         const gchar *chat_id,
+                                         gboolean chatroom,
+                                         guint num_messages,
+                                         EmpathyLogMessageFilter filter,
+                                         gpointer user_data)
+{
+  GList *dates, *l, *messages = NULL;
+
+  dates = log_store_empathy_get_dates (self, account, chat_id, chatroom);
+
+  for (l = g_list_last (dates); l && g_list_length (messages) < num_messages; l = g_list_previous (l))
+    {
+      GList *new_messages, *n, *next;
+
+      new_messages = log_store_empathy_get_messages_for_date (self, account,
+          chat_id, chatroom, l->data);
+
+      n = new_messages;
+      while (n)
+        {
+          next = g_list_next (n);
+          if (!filter (n->data, user_data))
+            {
+              g_object_unref (n->data);
+              new_messages = g_list_remove (new_messages, n->data);
+            }
+          n = next;
+        }
+      messages = g_list_concat (messages, new_messages);
+    }
+
+  g_list_foreach (dates, (GFunc) g_free, NULL);
+  g_list_free (dates);
+
+  return messages;
+}
+
 static void
 log_store_iface_init (gpointer g_iface,
                       gpointer iface_data)
@@ -723,4 +763,5 @@ log_store_iface_init (gpointer g_iface,
   iface->get_chats = log_store_empathy_get_chats;
   iface->search_new = log_store_empathy_search_new;
   iface->ack_message = NULL;
+  iface->get_filtered_messages = log_store_empathy_get_filtered_messages;
 }