diff options
author | Paul J Stevens <paul@nfg.nl> | 2010-06-07 09:32:50 +0200 |
---|---|---|
committer | Paul J Stevens <paul@nfg.nl> | 2010-06-07 09:33:00 +0200 |
commit | 757b8b7f7d5520472878c9b08c17abcd823f298a (patch) | |
tree | b0e309c4bd809437fffd1a35a3c5eded4549aa53 | |
parent | 385e20b40a38a96a53720f9043743bfa7d214f29 (diff) |
wip mailbox sync
-rw-r--r-- | src/dbmail-mailbox.c | 39 | ||||
-rw-r--r-- | test/check_dbmail_mailbox.c | 5 |
2 files changed, 22 insertions, 22 deletions
diff --git a/src/dbmail-mailbox.c b/src/dbmail-mailbox.c index db9c74e4..b932c4b0 100644 --- a/src/dbmail-mailbox.c +++ b/src/dbmail-mailbox.c @@ -1312,7 +1312,7 @@ GTree * dbmail_mailbox_get_set(DbmailMailbox *self, const char *set, gboolean ui GString *t; GTree *uids; char *rest; - u64_t i, l, r, lo = 0, hi = 0; + u64_t i, l, r, lo = 0, hi = 0, maxmsn = 0; u64_t *k, *v, *w = NULL; GTree *a, *b, *c; gboolean error = FALSE; @@ -1322,22 +1322,14 @@ GTree * dbmail_mailbox_get_set(DbmailMailbox *self, const char *set, gboolean ui if (! self->mbstate) return b; - uids = MailboxState_getIds(self->mbstate); - assert (self && uids && set); + assert (self && self->mbstate && set); - if (g_tree_nnodes(uids) == 0) { -/* - TRACE(TRACE_DEBUG, "empty mailbox, return fake set"); - k = g_new0(u64_t,1); - v = g_new0(u64_t,1); - *k = 1; - *v = 1; - g_tree_insert(b,k,v); -*/ + if (MailboxState_getExists(self->mbstate) == 0) // empty mailbox return b; - } + maxmsn = MailboxState_getExists(self->mbstate); + uids = MailboxState_getIds(self->mbstate); ids = g_tree_keys(uids); assert(ids); ids = g_list_last(ids); @@ -1348,11 +1340,7 @@ GTree * dbmail_mailbox_get_set(DbmailMailbox *self, const char *set, gboolean ui if (! uid) { lo = 1; - if (self->mbstate) - hi = MailboxState_getExists(self->mbstate); - else - hi = (u64_t)g_tree_nnodes(uids); - + hi = maxmsn; if (hi != (u64_t)g_tree_nnodes(uids)) TRACE(TRACE_WARNING, "[%p] mailbox info out of sync: exists [%llu] ids [%u]", self->mbstate, hi, g_tree_nnodes(uids)); @@ -1427,10 +1415,17 @@ GTree * dbmail_mailbox_get_set(DbmailMailbox *self, const char *set, gboolean ui // we always want to return a tree with // uids as keys and msns as values - if (uid) - g_tree_insert(a,k,v); - else - g_tree_insert(a,v,k); + if (uid) { + if (*k >= lo && *k <= hi) + g_tree_insert(a,k,v); + else + TRACE(TRACE_DEBUG,"lo: %llu, uid: %llu, msn: %llu, hi: %llu", lo, *k, *v, hi); + } else { + if (*k >= 1 && *k <= maxmsn) + g_tree_insert(a,v,k); + else + TRACE(TRACE_DEBUG,"lo: %llu, uid: %llu, msn: %llu, hi: %llu", lo, *v, *k, hi); + } } if (g_tree_merge(b,a,IST_SUBSEARCH_OR)) { diff --git a/test/check_dbmail_mailbox.c b/test/check_dbmail_mailbox.c index a8d5003c..0e5c7954 100644 --- a/test/check_dbmail_mailbox.c +++ b/test/check_dbmail_mailbox.c @@ -432,6 +432,7 @@ START_TEST(test_dbmail_mailbox_get_set) GTree *set; DbmailMailbox *mb = dbmail_mailbox_new(get_mailbox_id("INBOX")); dbmail_mailbox_set_uid(mb,TRUE); + dbmail_mailbox_open(mb); // basic tests; set = dbmail_mailbox_get_set(mb, "1:*", 0); @@ -491,6 +492,8 @@ START_TEST(test_dbmail_mailbox_get_set) // empty box mb = dbmail_mailbox_new(get_mailbox_id("empty")); + dbmail_mailbox_open(mb); + set = dbmail_mailbox_get_set(mb, "1:*", 0); fail_unless(set != NULL,"dbmail_mailbox_get_set failed"); g_tree_destroy(set); @@ -514,6 +517,7 @@ Suite *dbmail_mailbox_suite(void) suite_add_tcase(s, tc_mailbox); tcase_add_checked_fixture(tc_mailbox, setup, teardown); tcase_add_test(tc_mailbox, test_dbmail_mailbox_get_set); + /* tcase_add_test(tc_mailbox, test_dbmail_mailbox_new); tcase_add_test(tc_mailbox, test_dbmail_mailbox_free); tcase_add_test(tc_mailbox, test_dbmail_mailbox_dump); @@ -523,6 +527,7 @@ Suite *dbmail_mailbox_suite(void) tcase_add_test(tc_mailbox, test_dbmail_mailbox_search_parsed_1); tcase_add_test(tc_mailbox, test_dbmail_mailbox_search_parsed_2); tcase_add_test(tc_mailbox, test_dbmail_mailbox_orderedsubject); + */ return s; } |