aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--libempathy/empathy-log-manager.c24
1 files changed, 21 insertions, 3 deletions
diff --git a/libempathy/empathy-log-manager.c b/libempathy/empathy-log-manager.c
index f734a184d..54e9a62f3 100644
--- a/libempathy/empathy-log-manager.c
+++ b/libempathy/empathy-log-manager.c
@@ -173,6 +173,17 @@ empathy_log_manager_exists (EmpathyLogManager *manager,
return FALSE;
}
+static void
+log_manager_get_dates_foreach (gpointer data,
+ gpointer user_data)
+{
+ /* g_list_first is needed in case an older date was last inserted */
+ GList *orig = g_list_first (user_data);
+
+ if (g_list_find_custom (orig, data, (GCompareFunc) strcmp))
+ orig = g_list_insert_sorted (orig, g_strdup (data), (GCompareFunc) strcmp);
+}
+
GList *
empathy_log_manager_get_dates (EmpathyLogManager *manager,
McAccount *account,
@@ -198,9 +209,16 @@ empathy_log_manager_get_dates (EmpathyLogManager *manager,
if (!out)
out = source->get_dates (manager, account, chat_id, chatroom);
else
- /* TODO fix this */
- out = g_list_concat (out, source->get_dates (manager, account,
- chat_id, chatroom));
+ {
+ GList *new = source->get_dates (manager, account, chat_id, chatroom);
+ g_list_foreach (new, log_manager_get_dates_foreach, out);
+
+ g_list_foreach (new, (GFunc) g_free, NULL);
+ g_list_free (new);
+
+ /* Similar reason for using g_list_first here as before */
+ out = g_list_first (out);
+ }
}
return out;