talons

Fork of Claws Mail https://www.claws-mail
Log | Files | Refs | README | LICENSE

commit 545e65efdf4a51f3a918c537d7c3ca73f05bc4ec
parent f8e7417ff3ed69290d0849dca5d4bfa772aa09aa
Author: Colin Leroy <colin@colino.net>
Date:   Wed, 26 Sep 2012 07:39:32 +0000

2012-09-26 [colin]	3.8.1cvs74

	* src/folder.c
	* src/folder.h
	* src/imap.c
	* src/procmsg.c
	* src/procmsg.h
	* src/summaryview.c
		Factorize msg list to num list code;
		Make search faster using cache instead
		of network I/O

Diffstat:
MChangeLog | 12++++++++++++
MPATCHSETS | 1+
Mconfigure.ac | 2+-
Msrc/folder.c | 24+++++++++++++++++-------
Msrc/folder.h | 2++
Msrc/imap.c | 7+------
Msrc/procmsg.c | 13+++++++++++++
Msrc/procmsg.h | 3++-
Msrc/summaryview.c | 8++------
9 files changed, 51 insertions(+), 21 deletions(-)

diff --git a/ChangeLog b/ChangeLog @@ -1,3 +1,15 @@ +2012-09-26 [colin] 3.8.1cvs74 + + * src/folder.c + * src/folder.h + * src/imap.c + * src/procmsg.c + * src/procmsg.h + * src/summaryview.c + Factorize msg list to num list code; + Make search faster using cache instead + of network I/O + 2012-09-25 [mones] 3.8.1cvs73 * src/gtk/quicksearch.c diff --git a/PATCHSETS b/PATCHSETS @@ -4448,3 +4448,4 @@ ( cvs diff -u -r 1.1.2.1 -r 1.1.2.2 src/advsearch.c; ) > 3.8.1cvs71.patchset ( cvs diff -u -r 1.1.2.2 -r 1.1.2.3 src/advsearch.c; ) > 3.8.1cvs72.patchset ( cvs diff -u -r 1.1.2.113 -r 1.1.2.114 src/gtk/quicksearch.c; ) > 3.8.1cvs73.patchset +( cvs diff -u -r 1.213.2.213 -r 1.213.2.214 src/folder.c; cvs diff -u -r 1.87.2.68 -r 1.87.2.69 src/folder.h; cvs diff -u -r 1.179.2.263 -r 1.179.2.264 src/imap.c; cvs diff -u -r 1.150.2.129 -r 1.150.2.130 src/procmsg.c; cvs diff -u -r 1.60.2.64 -r 1.60.2.65 src/procmsg.h; cvs diff -u -r 1.395.2.454 -r 1.395.2.455 src/summaryview.c; ) > 3.8.1cvs74.patchset diff --git a/configure.ac b/configure.ac @@ -12,7 +12,7 @@ MINOR_VERSION=8 MICRO_VERSION=1 INTERFACE_AGE=0 BINARY_AGE=0 -EXTRA_VERSION=73 +EXTRA_VERSION=74 EXTRA_RELEASE= EXTRA_GTK2_VERSION= diff --git a/src/folder.c b/src/folder.c @@ -4749,6 +4749,17 @@ gint folder_item_search_msgs (Folder *folder, } } +MsgNumberList *folder_item_get_number_list(FolderItem *item) +{ + GSList *nums = NULL; + GSList *msglist = folder_item_get_msg_list(item); + + nums = procmsg_get_number_list_for_msgs(msglist); + procmsg_msg_list_free(msglist); + + return nums; +} + gint folder_item_search_msgs_local (Folder *folder, FolderItem *container, MsgNumberList **msgs, @@ -4765,17 +4776,16 @@ gint folder_item_search_msgs_local (Folder *folder, GSList *nums = NULL; if (*msgs == NULL) { - gboolean old_valid = TRUE; - - msgcount = folder->klass->get_num_list(folder, container, &nums, &old_valid); - - if (msgcount < 0) - return -1; + nums = folder_item_get_number_list(container); } else { nums = *msgs; - msgcount = g_slist_length(nums); } + msgcount = g_slist_length(nums); + + if (msgcount < 0) + return -1; + for (cur = nums; cur != NULL; cur = cur->next) { guint msgnum = GPOINTER_TO_UINT(cur->data); MsgInfo *msg = folder_item_get_msginfo(container, msgnum); diff --git a/src/folder.h b/src/folder.h @@ -912,6 +912,8 @@ MsgInfo *folder_item_get_msginfo (FolderItem *item, MsgInfo *folder_item_get_msginfo_by_msgid(FolderItem *item, const gchar *msgid); GSList *folder_item_get_msg_list (FolderItem *item); +MsgNumberList *folder_item_get_number_list(FolderItem *item); + /* return value is locale charset */ gchar *folder_item_fetch_msg (FolderItem *item, gint num); diff --git a/src/imap.c b/src/imap.c @@ -5226,15 +5226,10 @@ static GSList * imap_get_lep_set_from_numlist(IMAPFolder *folder, MsgNumberList static GSList * imap_get_lep_set_from_msglist(IMAPFolder *folder, MsgInfoList *msglist) { MsgNumberList *numlist = NULL; - MsgInfoList *cur; GSList *seq_list; - for (cur = msglist; cur != NULL; cur = g_slist_next(cur)) { - MsgInfo *msginfo = (MsgInfo *) cur->data; + numlist = procmsg_get_number_list_for_msgs(msglist); - numlist = g_slist_prepend(numlist, GINT_TO_POINTER(msginfo->msgnum)); - } - numlist = g_slist_reverse(numlist); seq_list = imap_get_lep_set_from_numlist(folder, numlist); g_slist_free(numlist); diff --git a/src/procmsg.c b/src/procmsg.c @@ -89,6 +89,19 @@ void procmsg_msg_list_free(GSList *mlist) g_slist_free(mlist); } +MsgNumberList *procmsg_get_number_list_for_msgs(MsgInfoList *msglist) +{ + GSList *cur = NULL; + GSList *nums = NULL; + + for (cur = msglist; cur; cur = cur->next) { + MsgInfo *msg = (MsgInfo *)cur->data; + nums = g_slist_prepend(nums, GUINT_TO_POINTER(msg->msgnum)); + } + + return g_slist_reverse(nums); +} + struct MarkSum { gint *new_msgs; gint *unread_msgs; diff --git a/src/procmsg.h b/src/procmsg.h @@ -281,7 +281,8 @@ struct _MailFilteringData GSList *procmsg_read_cache (FolderItem *item, gboolean scan_file); -void procmsg_msg_list_free (GSList *mlist); +void procmsg_msg_list_free (MsgInfoList *mlist); +MsgNumberList *procmsg_get_number_list_for_msgs(MsgInfoList *msglist); void procmsg_get_mark_sum (const gchar *folder, gint *new_msgs, gint *unread_msgs, diff --git a/src/summaryview.c b/src/summaryview.c @@ -2157,12 +2157,8 @@ void summary_select_by_msg_list(SummaryView *summaryview, GSList *msginfos) ctree = GTK_CMCTREE(summaryview->ctree); - msgnum_list = NULL; - for(walk = msginfos; walk; walk = walk->next) { - MsgInfo *msginfo; - msginfo = walk->data; - msgnum_list = g_slist_prepend(msgnum_list, GUINT_TO_POINTER(msginfo->msgnum)); - } + msgnum_list = procmsg_get_number_list_for_msgs(msginfos); + START_LONG_OPERATION(summaryview, FALSE); for(walk = msgnum_list; walk; walk = walk->next) { GtkCMCTreeNode *node;