diff options
Diffstat (limited to 'mail/message-list.c')
-rw-r--r-- | mail/message-list.c | 525 |
1 files changed, 100 insertions, 425 deletions
diff --git a/mail/message-list.c b/mail/message-list.c index c7361087b8..466d4c5777 100644 --- a/mail/message-list.c +++ b/mail/message-list.c @@ -36,17 +36,8 @@ #include <gconf/gconf-client.h> -#include <camel/camel-exception.h> -#include <camel/camel-file-utils.h> -#include <camel/camel-folder.h> -#include <camel/camel-folder-thread.h> -#include <camel/camel-folder-summary.h> -#include <camel/camel-vee-folder.h> -#include <camel/camel-string-utils.h> - -#include <libedataserver/e-memory.h> - #include "e-util/e-icon-factory.h" +#include "e-util/e-poolv.h" #include "e-util/e-profile-event.h" #include "e-util/e-util-private.h" #include "e-util/e-util.h" @@ -84,12 +75,15 @@ #endif #ifdef G_OS_WIN32 -/* Undefine the similar macro from <pthread.h>,it doesn't check if - * localtime() returns NULL. - */ +#ifdef gmtime_r +#undef gmtime_r +#endif +#ifdef localtime_r #undef localtime_r +#endif -/* The localtime() in Microsoft's C library is MT-safe */ +/* The gmtime() and localtime() in Microsoft's C library are MT-safe */ +#define gmtime_r(tp,tmp) (gmtime(tp)?(*(tmp)=*gmtime(tp),(tmp)):0) #define localtime_r(tp,tmp) (localtime(tp)?(*(tmp)=*localtime(tp),(tmp)):0) #endif @@ -207,11 +201,6 @@ static gint on_click (ETree *tree, gint row, ETreePath path, gint col, GdkEvent static gchar *filter_date (time_t date); static gchar *filter_size (gint size); -static void folder_changed (CamelObject *o, gpointer event_data, gpointer user_data); - -static void save_hide_state(MessageList *ml); -static void load_hide_state(MessageList *ml); - /* note: @changes is owned/freed by the caller */ /*static void mail_do_regenerate_messagelist (MessageList *list, const gchar *search, const gchar *hideexpr, CamelFolderChangeInfo *changes);*/ static void mail_regen_list(MessageList *ml, const gchar *search, const gchar *hideexpr, CamelFolderChangeInfo *changes); @@ -219,6 +208,10 @@ static void mail_regen_cancel(MessageList *ml); static void clear_info(gchar *key, ETreePath *node, MessageList *ml); +static void folder_changed (CamelFolder *folder, + CamelFolderChangeInfo *info, + MessageList *ml); + enum { MESSAGE_SELECTED, MESSAGE_LIST_BUILT, @@ -273,7 +266,7 @@ e_mail_address_new (const gchar *address) cia = camel_internet_address_new (); if (camel_address_unformat (CAMEL_ADDRESS (cia), address) == -1) { - camel_object_unref (cia); + g_object_unref (cia); return NULL; } camel_internet_address_get (cia, 0, &name, &addr); @@ -286,7 +279,7 @@ e_mail_address_new (const gchar *address) new->wname = NULL; } - camel_object_unref (cia); + g_object_unref (cia); return new; } @@ -509,7 +502,7 @@ clear_selection(MessageList *ml, struct _MLSelection *selection) selection->uids = NULL; } if (selection->folder) { - camel_object_unref(selection->folder); + g_object_unref (selection->folder); selection->folder = NULL; } g_free(selection->folder_uri); @@ -893,7 +886,7 @@ message_list_copy(MessageList *ml, gboolean cut) p->clipboard.uids = uids; p->clipboard.folder = ml->folder; - camel_object_ref(p->clipboard.folder); + g_object_ref (p->clipboard.folder); p->clipboard.folder_uri = g_strdup(ml->folder_uri); gtk_selection_owner_set(p->invisible, GDK_SELECTION_CLIPBOARD, gtk_get_current_event_time()); } else { @@ -1973,7 +1966,6 @@ void message_list_save_state (MessageList *ml) { save_tree_state (ml); - save_hide_state (ml); } static void @@ -1982,6 +1974,7 @@ message_list_setup_etree (MessageList *message_list, gboolean outgoing) /* build the spec based on the folder, and possibly from a saved file */ /* otherwise, leave default */ if (message_list->folder) { + CamelStore *parent_store; gchar *path; gchar *name; gint data = 1; @@ -1992,7 +1985,8 @@ message_list_setup_etree (MessageList *message_list, gboolean outgoing) g_object_set (message_list, "uniform_row_height", TRUE, NULL); - name = camel_service_get_name (CAMEL_SERVICE (message_list->folder->parent_store), TRUE); + parent_store = camel_folder_get_parent_store (message_list->folder); + name = camel_service_get_name (CAMEL_SERVICE (parent_store), TRUE); d(printf ("folder name is '%s'\n", name)); path = mail_config_folder_to_cachename (message_list->folder, "et-expanded-"); @@ -2040,14 +2034,22 @@ ml_selection_clear_event(GtkWidget *widget, GdkEventSelection *event, MessageLis } static void -ml_selection_received(GtkWidget *widget, GtkSelectionData *data, guint time, MessageList *ml) +ml_selection_received (GtkWidget *widget, + GtkSelectionData *selection_data, + guint time, + MessageList *ml) { - if (data->target != gdk_atom_intern ("x-uid-list", FALSE)) { + GdkAtom target; + + target = gtk_selection_data_get_target (selection_data); + + if (target != gdk_atom_intern ("x-uid-list", FALSE)) { d(printf("Unknown selection received by message-list\n")); return; } - em_utils_selection_get_uidlist(data, ml->folder, FALSE, NULL); + em_utils_selection_get_uidlist ( + selection_data, ml->folder, FALSE, NULL); } static void @@ -2096,10 +2098,14 @@ struct _drop_msg { static gchar * ml_drop_async_desc (struct _drop_msg *m) { + const gchar *full_name; + + full_name = camel_folder_get_full_name (m->folder); + if (m->move) - return g_strdup_printf(_("Moving messages into folder %s"), m->folder->full_name); + return g_strdup_printf(_("Moving messages into folder %s"), full_name); else - return g_strdup_printf(_("Copying messages into folder %s"), m->folder->full_name); + return g_strdup_printf(_("Copying messages into folder %s"), full_name); } static void @@ -2138,11 +2144,9 @@ ml_drop_async_done (struct _drop_msg *m) static void ml_drop_async_free (struct _drop_msg *m) { - g_object_unref(m->context); - camel_object_unref(m->folder); - - g_free(m->selection->data); - g_free(m->selection); + g_object_unref (m->context); + g_object_unref (m->folder); + gtk_selection_data_free (m->selection); } static MailMsgInfo ml_drop_async_info = { @@ -2161,30 +2165,39 @@ ml_drop_action(struct _drop_msg *m) } static void -ml_tree_drag_data_received (ETree *tree, gint row, ETreePath path, gint col, - GdkDragContext *context, gint x, gint y, - GtkSelectionData *data, guint info, - guint time, MessageList *ml) +ml_tree_drag_data_received (ETree *tree, + gint row, + ETreePath path, + gint col, + GdkDragContext *context, + gint x, + gint y, + GtkSelectionData *selection_data, + guint info, + guint time, + MessageList *ml) { struct _drop_msg *m; - /* this means we are receiving no data */ - if (!ml->folder || data->data == NULL || data->length == -1) + if (ml->folder == NULL) + return; + + if (gtk_selection_data_get_data (selection_data) == NULL) + return; + + if (gtk_selection_data_get_length (selection_data) == -1) return; m = mail_msg_new(&ml_drop_async_info); m->context = context; g_object_ref(context); m->folder = ml->folder; - camel_object_ref(m->folder); + g_object_ref (m->folder); m->action = context->action; m->info = info; /* need to copy, goes away once we exit */ - m->selection = g_malloc0(sizeof(*m->selection)); - m->selection->data = g_malloc(data->length); - memcpy(m->selection->data, data->data, data->length); - m->selection->length = data->length; + m->selection = gtk_selection_data_copy (selection_data); ml_drop_action(m); } @@ -2306,16 +2319,9 @@ message_list_init (MessageList *message_list) (GDestroyNotify) NULL, (GDestroyNotify) e_poolv_destroy); - message_list->hidden = NULL; - message_list->hidden_pool = NULL; - message_list->hide_before = ML_HIDE_NONE_START; - message_list->hide_after = ML_HIDE_NONE_END; - message_list->search = NULL; message_list->ensure_uid = NULL; - message_list->hide_lock = g_mutex_new(); - message_list->uid_nodemap = g_hash_table_new (g_str_hash, g_str_equal); message_list->async_event = mail_async_event_new(); @@ -2370,8 +2376,9 @@ message_list_destroy(GtkObject *object) message_list->uid_nodemap = NULL; } - camel_object_unhook_event(message_list->folder, "folder_changed", folder_changed, message_list); - camel_object_unref (message_list->folder); + g_signal_handlers_disconnect_by_func ( + message_list->folder, folder_changed, message_list); + g_object_unref (message_list->folder); message_list->folder = NULL; } @@ -2492,19 +2499,11 @@ message_list_finalize (GObject *object) if (message_list->thread_tree) camel_folder_thread_messages_unref(message_list->thread_tree); - if (message_list->hidden) { - g_hash_table_destroy(message_list->hidden); - e_mempool_destroy(message_list->hidden_pool); - message_list->hidden = NULL; - message_list->hidden_pool = NULL; - } - g_free(message_list->search); g_free(message_list->ensure_uid); g_free(message_list->frozen_search); g_free(message_list->cursor_uid); - g_mutex_free(message_list->hide_lock); g_mutex_free (message_list->regen_lock); g_free(message_list->folder_uri); @@ -2576,8 +2575,8 @@ message_list_class_init (MessageListClass *class) PROP_SHELL_BACKEND, g_param_spec_object ( "shell-backend", - _("Shell Backend"), - _("The mail shell backend"), + "Shell Backend", + "The mail shell backend", E_TYPE_SHELL_BACKEND, G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY)); @@ -3534,22 +3533,25 @@ main_folder_changed (CamelObject *o, gpointer event_data, gpointer user_data) } static void -folder_changed (CamelObject *o, gpointer event_data, gpointer user_data) +folder_changed (CamelFolder *folder, + CamelFolderChangeInfo *info, + MessageList *ml) { CamelFolderChangeInfo *changes; - MessageList *ml = MESSAGE_LIST (user_data); if (ml->priv->destroyed) return; - if (event_data) { + if (info != NULL) { changes = camel_folder_change_info_new(); - camel_folder_change_info_cat(changes, (CamelFolderChangeInfo *)event_data); + camel_folder_change_info_cat (changes, info); } else { changes = NULL; } - mail_async_event_emit(ml->async_event, MAIL_ASYNC_GUI, (MailAsyncFunc)main_folder_changed, o, changes, user_data); + mail_async_event_emit ( + ml->async_event, MAIL_ASYNC_GUI, (MailAsyncFunc) + main_folder_changed, folder, changes, ml); } /** @@ -3590,7 +3592,6 @@ message_list_set_folder (MessageList *message_list, CamelFolder *folder, const g if (message_list->folder != NULL) { save_tree_state (message_list); - save_hide_state (message_list); } e_tree_memory_freeze(E_TREE_MEMORY(etm)); @@ -3604,9 +3605,9 @@ message_list_set_folder (MessageList *message_list, CamelFolder *folder, const g } if (message_list->folder) { - camel_object_unhook_event((CamelObject *)message_list->folder, "folder_changed", - folder_changed, message_list); - camel_object_unref (message_list->folder); + g_signal_handlers_disconnect_by_func ( + message_list->folder, folder_changed, message_list); + g_object_unref (message_list->folder); message_list->folder = NULL; } @@ -3630,7 +3631,7 @@ message_list_set_folder (MessageList *message_list, CamelFolder *folder, const g gint strikeout_col = -1; ECell *cell; - camel_object_ref (folder); + g_object_ref (folder); message_list->folder = folder; message_list->just_set_folder = TRUE; @@ -3656,14 +3657,15 @@ message_list_set_folder (MessageList *message_list, CamelFolder *folder, const g /* Build the etree suitable for this folder */ message_list_setup_etree (message_list, outgoing); - camel_object_hook_event (folder, "folder_changed", folder_changed, message_list); + g_signal_connect ( + folder, "changed", + G_CALLBACK (folder_changed), message_list); gconf = mail_config_get_gconf_client (); hide_deleted = !gconf_client_get_bool (gconf, "/apps/evolution/mail/display/show_deleted", NULL); message_list->hidedeleted = hide_deleted && !(folder->folder_flags & CAMEL_FOLDER_IS_TRASH); message_list->hidejunk = folder_store_supports_vjunk_folder (message_list->folder) && !(folder->folder_flags & CAMEL_FOLDER_IS_JUNK) && !(folder->folder_flags & CAMEL_FOLDER_IS_TRASH); - load_hide_state (message_list); if (message_list->frozen == 0) mail_regen_list (message_list, message_list->search, NULL, NULL); } @@ -4005,229 +4007,6 @@ message_list_ensure_message (MessageList *ml, const gchar *uid) ml->ensure_uid = g_strdup (uid); } -/* returns the number of messages displayable *after* expression hiding has taken place */ -guint -message_list_length (MessageList *ml) -{ - return ml->hide_unhidden; -} - -struct _glibsuxcrap { - guint count; - CamelFolder *folder; -}; - -static void -glib_crapback(gpointer key, gpointer data, gpointer x) -{ - struct _glibsuxcrap *y = x; - CamelMessageInfo *mi; - - if (y->count) - return; - - mi = camel_folder_get_message_info(y->folder, key); - if (mi) { - y->count++; - camel_folder_free_message_info(y->folder, mi); - } -} - -/* returns 0 or 1 depending if there are hidden messages */ -guint -message_list_hidden(MessageList *ml) -{ - guint hidden = 0; - - MESSAGE_LIST_LOCK (ml, hide_lock); - if (ml->hidden && ml->folder) { - /* this is a hack, should probably just maintain the hidden table better */ - struct _glibsuxcrap x = { 0, ml->folder }; - g_hash_table_foreach(ml->hidden, glib_crapback, &x); - hidden = x.count; - } - MESSAGE_LIST_UNLOCK (ml, hide_lock); - - return hidden; -} - -/* add a new expression to hide, or set the range. - @expr: A new search expression - all matching messages will be hidden. May be %NULL. - @lower: Use ML_HIDE_NONE_START to specify no messages hidden from the start of the list. - @upper: Use ML_HIDE_NONE_END to specify no message hidden from the end of the list. - - For either @upper or @lower, use ML_HIDE_SAME, to keep the previously set hide range. - If either range is negative, then the range is taken from the end of the available list - of messages, once other hiding has been performed. Use message_list_length() to find out - how many messages are available for hiding. - - Example: hide_add(ml, NULL, -100, ML_HIDE_NONE_END) -> hide all but the last (most recent) - 100 messages. -*/ -void -message_list_hide_add (MessageList *ml, const gchar *expr, guint lower, guint upper) -{ - MESSAGE_LIST_LOCK (ml, hide_lock); - - if (lower != ML_HIDE_SAME) - ml->hide_before = lower; - if (upper != ML_HIDE_SAME) - ml->hide_after = upper; - - MESSAGE_LIST_UNLOCK (ml, hide_lock); - - mail_regen_list (ml, ml->search, expr, NULL); -} - -/* hide specific uid's */ -void -message_list_hide_uids (MessageList *ml, GPtrArray *uids) -{ - gint i; - gchar *uid; - - /* first see if we need to do any work, if so, then do it all at once */ - for (i = 0; i < uids->len; i++) { - if (g_hash_table_lookup (ml->uid_nodemap, uids->pdata[i])) { - MESSAGE_LIST_LOCK (ml, hide_lock); - if (ml->hidden == NULL) { - ml->hidden = g_hash_table_new (g_str_hash, g_str_equal); - ml->hidden_pool = e_mempool_new (512, 256, E_MEMPOOL_ALIGN_BYTE); - } - - uid = e_mempool_strdup (ml->hidden_pool, uids->pdata[i]); - g_hash_table_insert (ml->hidden, uid, uid); - for (; i < uids->len; i++) { - if (g_hash_table_lookup (ml->uid_nodemap, uids->pdata[i])) { - uid = e_mempool_strdup (ml->hidden_pool, uids->pdata[i]); - g_hash_table_insert (ml->hidden, uid, uid); - } - } - MESSAGE_LIST_UNLOCK (ml, hide_lock); - /* save this here incase the user pops up another window, so they are consistent */ - save_hide_state(ml); - if (ml->frozen == 0) - mail_regen_list (ml, ml->search, NULL, NULL); - break; - } - } -} - -/* no longer hide any messages */ -void -message_list_hide_clear (MessageList *ml) -{ - MESSAGE_LIST_LOCK (ml, hide_lock); - if (ml->hidden) { - g_hash_table_destroy (ml->hidden); - e_mempool_destroy (ml->hidden_pool); - ml->hidden = NULL; - ml->hidden_pool = NULL; - } - ml->hide_before = ML_HIDE_NONE_START; - ml->hide_after = ML_HIDE_NONE_END; - MESSAGE_LIST_UNLOCK (ml, hide_lock); - - if (ml->thread_tree) { - camel_folder_thread_messages_unref(ml->thread_tree); - ml->thread_tree = NULL; - } - - /* save this here incase the user pops up another window, so they are consistent */ - save_hide_state(ml); - if (ml->frozen == 0) - mail_regen_list (ml, ml->search, NULL, NULL); -} - -#define HIDE_STATE_VERSION (1) - -/* version 1 file is: - uintf 1 - uintf hide_before - uintf hide_after - string* uids -*/ - -static void -load_hide_state (MessageList *ml) -{ - gchar *filename; - FILE *in; - gint32 version, lower, upper; - - MESSAGE_LIST_LOCK(ml, hide_lock); - if (ml->hidden) { - g_hash_table_destroy (ml->hidden); - e_mempool_destroy (ml->hidden_pool); - ml->hidden = NULL; - ml->hidden_pool = NULL; - } - ml->hide_before = ML_HIDE_NONE_START; - ml->hide_after = ML_HIDE_NONE_END; - - filename = mail_config_folder_to_cachename(ml->folder, "hidestate-"); - in = g_fopen(filename, "rb"); - if (in) { - camel_file_util_decode_fixed_int32 (in, &version); - if (version == HIDE_STATE_VERSION) { - ml->hidden = g_hash_table_new(g_str_hash, g_str_equal); - ml->hidden_pool = e_mempool_new(512, 256, E_MEMPOOL_ALIGN_BYTE); - camel_file_util_decode_fixed_int32 (in, &lower); - ml->hide_before = lower; - camel_file_util_decode_fixed_int32 (in, &upper); - ml->hide_after = upper; - while (!feof(in)) { - gchar *olduid, *uid; - - if (camel_file_util_decode_string (in, &olduid) != -1) { - uid = e_mempool_strdup(ml->hidden_pool, olduid); - g_free (olduid); - g_hash_table_insert(ml->hidden, uid, uid); - } - } - } - fclose(in); - } - g_free(filename); - - MESSAGE_LIST_UNLOCK(ml, hide_lock); -} - -static void -hide_save_1 (gchar *uid, gchar *keydata, FILE *out) -{ - camel_file_util_encode_string (out, uid); -} - -/* save the hide state. Note that messages are hidden by uid, if the uid's change, then - this will become invalid, but is easy to reset in the ui */ -static void -save_hide_state (MessageList *ml) -{ - gchar *filename; - FILE *out; - - if (ml->folder == NULL) - return; - - MESSAGE_LIST_LOCK(ml, hide_lock); - - filename = mail_config_folder_to_cachename(ml->folder, "hidestate-"); - if (ml->hidden == NULL && ml->hide_before == ML_HIDE_NONE_START && ml->hide_after == ML_HIDE_NONE_END) { - g_unlink(filename); - } else if ((out = g_fopen (filename, "wb"))) { - camel_file_util_encode_fixed_int32 (out, HIDE_STATE_VERSION); - camel_file_util_encode_fixed_int32 (out, ml->hide_before); - camel_file_util_encode_fixed_int32 (out, ml->hide_after); - if (ml->hidden) - g_hash_table_foreach(ml->hidden, (GHFunc)hide_save_1, out); - fclose(out); - } - g_free (filename); - - MESSAGE_LIST_UNLOCK(ml, hide_lock); -} - struct sort_column_data { ETableCol *col; gboolean ascending; @@ -4369,8 +4148,7 @@ ml_sort_uids_by_tree (MessageList *ml, GPtrArray *uids) g_ptr_array_add (sort_data.sort_columns, data); } - if (uids->len - camel_folder_summary_cache_size (ml->folder->summary) > 50) - camel_folder_summary_reload_from_db (ml->folder->summary, NULL); + camel_folder_summary_prepare_fetch_all (ml->folder->summary, NULL); for (i = 0; i < uids->len; i++) { gchar *uid; @@ -4437,7 +4215,7 @@ regen_list_desc (struct _regen_list_msg *m) static void regen_list_exec (struct _regen_list_msg *m) { - GPtrArray *uids, *uidnew, *showuids, *searchuids = NULL; + GPtrArray *uids, *searchuids = NULL; CamelMessageInfo *info; ETreePath cursor; ETree *tree; @@ -4530,122 +4308,33 @@ regen_list_exec (struct _regen_list_msg *m) if (camel_exception_is_set (&m->base.ex)) return; - /* perform hiding */ - if (m->hideexpr && camel_folder_has_search_capability(m->folder)) { - uidnew = camel_folder_search_by_expression (m->ml->folder, m->hideexpr, &m->base.ex); - /* well, lets not abort just because this faileld ... */ - camel_exception_clear (&m->base.ex); - - if (uidnew) { - MESSAGE_LIST_LOCK(m->ml, hide_lock); - - if (m->ml->hidden == NULL) { - m->ml->hidden = g_hash_table_new (g_str_hash, g_str_equal); - m->ml->hidden_pool = e_mempool_new (512, 256, E_MEMPOOL_ALIGN_BYTE); - } - - for (i = 0; i < uidnew->len; i++) { - if (g_hash_table_lookup (m->ml->hidden, uidnew->pdata[i]) == NULL) { - gchar *uid = e_mempool_strdup (m->ml->hidden_pool, uidnew->pdata[i]); - g_hash_table_insert (m->ml->hidden, uid, uid); - } - } - - MESSAGE_LIST_UNLOCK(m->ml, hide_lock); - - camel_folder_search_free (m->ml->folder, uidnew); - } - } - - MESSAGE_LIST_LOCK(m->ml, hide_lock); - - m->ml->hide_unhidden = uids->len; - - /* what semantics do we want from hide_before, hide_after? - probably <0 means measure from the end of the list */ - - /* perform uid hiding */ - if (m->ml->hidden || m->ml->hide_before != ML_HIDE_NONE_START || m->ml->hide_after != ML_HIDE_NONE_END) { - gint start, end; - uidnew = g_ptr_array_new (); - - /* first, hide matches */ - if (m->ml->hidden) { - gint subtr = 0; - - for (i = 0; i < uids->len; i++) { - if (g_hash_table_lookup (m->ml->hidden, uids->pdata[i]) == NULL) - g_ptr_array_add (uidnew, uids->pdata[i]); - else if (m->last_row >= 0) { - /* if we are going to hide message above last selected row, then we should - decrease our last row number, to put cursor on a proper place. */ - ETreePath node = g_hash_table_lookup (m->ml->uid_nodemap, (const gchar *) uids->pdata[i]); - - if (node && m->last_row > e_tree_table_adapter_row_of_node (e_tree_get_table_adapter (tree), node)) - subtr ++; - } - } - - m->last_row -= subtr; - } - - /* then calculate the subrange visible and chop it out */ - m->ml->hide_unhidden = uidnew->len; - - if (m->ml->hide_before != ML_HIDE_NONE_START || m->ml->hide_after != ML_HIDE_NONE_END) { - GPtrArray *uid2 = g_ptr_array_new (); - - start = m->ml->hide_before; - if (start < 0) - start += m->ml->hide_unhidden; - end = m->ml->hide_after; - if (end < 0) - end += m->ml->hide_unhidden; - - start = MAX(start, 0); - end = MIN(end, uidnew->len); - for (i = start; i < end; i++) { - g_ptr_array_add (uid2, uidnew->pdata[i]); - } - - g_ptr_array_free (uidnew, TRUE); - uidnew = uid2; - } - showuids = uidnew; - } else { - uidnew = NULL; - showuids = uids; - } - - MESSAGE_LIST_UNLOCK(m->ml, hide_lock); - e_profile_event_emit("list.threaduids", m->folder->full_name, 0); - /* camel_folder_summary_reload_from_db (m->folder->summary, NULL); */ + /* camel_folder_summary_prepare_fetch_all (m->folder->summary, NULL); */ if (!camel_operation_cancel_check(m->base.cancel)) { /* update/build a new tree */ if (m->dotree) { - ml_sort_uids_by_tree (m->ml, showuids); + ml_sort_uids_by_tree (m->ml, uids); if (m->tree) - camel_folder_thread_messages_apply (m->tree, showuids); + camel_folder_thread_messages_apply (m->tree, uids); else - m->tree = camel_folder_thread_messages_new (m->folder, showuids, m->thread_subject); + m->tree = camel_folder_thread_messages_new (m->folder, uids, m->thread_subject); } else { - camel_folder_sort_uids (m->ml->folder, showuids); + CamelException ex; + + camel_folder_sort_uids (m->ml->folder, uids); m->summary = g_ptr_array_new (); - if (showuids->len > camel_folder_summary_cache_size (m->folder->summary) ) { - CamelException ex; - camel_exception_init (&ex); - camel_folder_summary_reload_from_db (m->folder->summary, &ex); - if (camel_exception_is_set (&ex)) { - g_warning ("Exception while reloading: %s\n", camel_exception_get_description (&ex)); - camel_exception_clear (&ex); - } + camel_exception_init (&ex); + camel_folder_summary_prepare_fetch_all (m->folder->summary, &ex); + if (camel_exception_is_set (&ex)) { + g_warning ("Exception while reloading: %s\n", camel_exception_get_description (&ex)); + camel_exception_clear (&ex); } - for (i = 0; i < showuids->len; i++) { - info = camel_folder_get_message_info (m->folder, showuids->pdata[i]); + + for (i = 0; i < uids->len; i++) { + info = camel_folder_get_message_info (m->folder, uids->pdata[i]); if (info) g_ptr_array_add(m->summary, info); } @@ -4654,9 +4343,6 @@ regen_list_exec (struct _regen_list_msg *m) m->complete = TRUE; } - if (uidnew) - g_ptr_array_free (uidnew, TRUE); - if (searchuids) camel_folder_search_free (m->folder, searchuids); else @@ -4752,17 +4438,11 @@ regen_list_done (struct _regen_list_msg *m) } } -#if GTK_CHECK_VERSION(2,19,7) if (gtk_widget_get_visible (GTK_WIDGET (m->ml))) { -#else - if (GTK_WIDGET_VISIBLE (GTK_WIDGET (m->ml))) { -#endif - if (message_list_length (m->ml) <= 0) { + if (e_tree_row_count (E_TREE (m->ml)) <= 0) { /* space is used to indicate no search too */ if (m->ml->search && *m->ml->search && strcmp (m->ml->search, " ") != 0) e_tree_set_info_message (tree, _("No message satisfies your search criteria. Either clear search with Search->Clear menu item or change it.")); - else if (m->ml->hidden) - e_tree_set_info_message (tree, _("There are only hidden messages in this folder. Use View->Show Hidden Messages to show them.")); else e_tree_set_info_message (tree, _("There are no messages in this folder.")); } else @@ -4794,7 +4474,7 @@ regen_list_free (struct _regen_list_msg *m) g_free (m->search); g_free (m->hideexpr); - camel_object_unref (m->folder); + g_object_unref (m->folder); if (m->changes) camel_folder_change_info_free (m->changes); @@ -4908,8 +4588,7 @@ mail_regen_list (MessageList *ml, const gchar *search, const gchar *hideexpr, Ca m->hidedel = ml->hidedeleted; m->hidejunk = ml->hidejunk; m->thread_subject = gconf_client_get_bool (gconf, "/apps/evolution/mail/display/thread_subject", NULL); - m->folder = ml->folder; - camel_object_ref(m->folder); + m->folder = g_object_ref (ml->folder); m->last_row = -1; m->expand_state = NULL; @@ -4921,12 +4600,8 @@ mail_regen_list (MessageList *ml, const gchar *search, const gchar *hideexpr, Ca camel_folder_thread_messages_ref(m->tree); } - if (message_list_length (ml) <= 0) { -#if GTK_CHECK_VERSION(2,19,7) + if (e_tree_row_count (E_TREE (ml)) <= 0) { if (gtk_widget_get_visible (GTK_WIDGET (ml))) { -#else - if (GTK_WIDGET_VISIBLE (GTK_WIDGET (ml))) { -#endif /* there is some info why the message list is empty, let it be something useful */ gchar *txt = g_strconcat (_("Generating message list"), "..." , NULL); |