Bug #484839 - Keep uids order as is before doing threading
authorMilan Crha <mcrha@redhat.com>
Thu, 22 Oct 2009 16:09:19 +0000 (18:09 +0200)
committerMilan Crha <mcrha@redhat.com>
Thu, 22 Oct 2009 16:09:19 +0000 (18:09 +0200)
camel/camel-folder-thread.c

index 2f0bb06..4c3b51e 100644 (file)
@@ -598,7 +598,6 @@ CamelFolderThread *
 camel_folder_thread_messages_new (CamelFolder *folder, GPtrArray *uids, gboolean thread_subject)
 {
        CamelFolderThread *thread;
-       GHashTable *wanted = NULL;
        GPtrArray *summary;
        GPtrArray *fsummary;
        gint i;
@@ -611,37 +610,29 @@ camel_folder_thread_messages_new (CamelFolder *folder, GPtrArray *uids, gboolean
        thread->folder = folder;
        camel_object_ref((CamelObject *)folder);
 
-       /* get all of the summary items of interest in summary order */
-       if (uids) {
-               wanted = g_hash_table_new(g_str_hash, g_str_equal);
-               for (i=0;i<uids->len;i++)
-                       g_hash_table_insert(wanted, uids->pdata[i], uids->pdata[i]);
-       }
-
        fsummary = camel_folder_summary_array (folder->summary);
        thread->summary = summary = g_ptr_array_new();
        if (fsummary->len - camel_folder_summary_cache_size (folder->summary) > 50)
                camel_folder_summary_reload_from_db (folder->summary, NULL);
 
-       for (i = 0; i < fsummary->len; i++) {
+       /* prefer given order from the summary order */
+       if (!uids)
+               uids = fsummary;
+
+       for (i = 0; i < uids->len; i++) {
                CamelMessageInfo *info;
-               gchar *uid = fsummary->pdata[i];
+               gchar *uid = uids->pdata[i];
 
-               if (wanted == NULL || g_hash_table_lookup(wanted, uid) != NULL) {
-                       info = camel_folder_get_message_info (folder, uid);
-                       if (info)
-                               g_ptr_array_add(summary, info);
-                       /* FIXME: Check if the info is leaking */
-               }
+               info = camel_folder_get_message_info (folder, uid);
+               if (info)
+                       g_ptr_array_add (summary, info);
+               /* FIXME: Check if the info is leaking */
        }
 
        camel_folder_free_summary(folder, fsummary);
 
        thread_summary(thread, summary);
 
-       if (wanted)
-               g_hash_table_destroy(wanted);
-
        return thread;
 }