dovecot-2.0: lib-storage: Added MAIL_SORT_POP3_ORDER
dovecot at dovecot.org
dovecot at dovecot.org
Wed May 4 12:44:27 EEST 2011
details: http://hg.dovecot.org/dovecot-2.0/rev/fac2d4fe86b1
changeset: 12767:fac2d4fe86b1
user: Timo Sirainen <tss at iki.fi>
date: Wed May 04 11:43:16 2011 +0200
description:
lib-storage: Added MAIL_SORT_POP3_ORDER
diffstat:
src/lib-storage/index/index-sort.c | 45 ++++++++++++++++++++++++++++++++++++++
src/lib-storage/mail-storage.h | 1 +
2 files changed, 46 insertions(+), 0 deletions(-)
diffs (80 lines):
diff -r bf0a80c91536 -r fac2d4fe86b1 src/lib-storage/index/index-sort.c
--- a/src/lib-storage/index/index-sort.c Wed May 04 11:42:17 2011 +0200
+++ b/src/lib-storage/index/index-sort.c Wed May 04 11:43:16 2011 +0200
@@ -81,6 +81,30 @@
node->size = 0;
}
+static uoff_t index_sort_get_pop3_order(struct mail *mail)
+{
+ const char *str;
+ uoff_t size;
+
+ if (mail_get_special(mail, MAIL_FETCH_POP3_ORDER, &str) < 0 ||
+ str_to_uoff(str, &size) < 0)
+ return (uint32_t)-1;
+ else
+ return size;
+}
+
+static void
+index_sort_list_add_pop3_order(struct mail_search_sort_program *program,
+ struct mail *mail)
+{
+ ARRAY_TYPE(mail_sort_node_size) *nodes = program->context;
+ struct mail_sort_node_size *node;
+
+ node = array_append_space(nodes);
+ node->seq = mail->seq;
+ node->size = index_sort_get_pop3_order(mail);
+}
+
static float index_sort_get_score(struct mail *mail)
{
const char *str;
@@ -283,6 +307,16 @@
program->context = nodes;
break;
}
+ case MAIL_SORT_POP3_ORDER: {
+ ARRAY_TYPE(mail_sort_node_size) *nodes;
+
+ nodes = i_malloc(sizeof(*nodes));
+ i_array_init(nodes, 128);
+ program->sort_list_add = index_sort_list_add_pop3_order;
+ program->sort_list_finish = index_sort_list_finish_size;
+ program->context = nodes;
+ break;
+ }
default:
i_unreached();
}
@@ -486,6 +520,17 @@
ret = float1 < float2 ? -1 :
(float1 > float2 ? 1 : 0);
break;
+ case MAIL_SORT_POP3_ORDER:
+ /* 32bit numbers would be enough, but since there is already
+ existing code for uoff_t in sizes, just use them. */
+ mail_set_seq(mail, seq1);
+ size1 = index_sort_get_pop3_order(mail);
+ mail_set_seq(mail, seq2);
+ size2 = index_sort_get_pop3_order(mail);
+
+ ret = size1 < size2 ? -1 :
+ (size1 > size2 ? 1 : 0);
+ break;
case MAIL_SORT_END:
return seq1 < seq2 ? -1 :
(seq1 > seq2 ? 1 : 0);
diff -r bf0a80c91536 -r fac2d4fe86b1 src/lib-storage/mail-storage.h
--- a/src/lib-storage/mail-storage.h Wed May 04 11:42:17 2011 +0200
+++ b/src/lib-storage/mail-storage.h Wed May 04 11:43:16 2011 +0200
@@ -92,6 +92,7 @@
MAIL_SORT_SEARCH_SCORE = 0x0080,
MAIL_SORT_DISPLAYFROM = 0x0100,
MAIL_SORT_DISPLAYTO = 0x0200,
+ MAIL_SORT_POP3_ORDER = 0x0400,
MAIL_SORT_MASK = 0x0fff,
MAIL_SORT_FLAG_REVERSE = 0x1000, /* reverse this mask type */
More information about the dovecot-cvs
mailing list