summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul J Stevens <paul@nfg.nl>2010-06-07 09:32:50 +0200
committerPaul J Stevens <paul@nfg.nl>2010-06-07 09:33:00 +0200
commit757b8b7f7d5520472878c9b08c17abcd823f298a (patch)
treeb0e309c4bd809437fffd1a35a3c5eded4549aa53
parent385e20b40a38a96a53720f9043743bfa7d214f29 (diff)
wip mailbox sync
-rw-r--r--src/dbmail-mailbox.c39
-rw-r--r--test/check_dbmail_mailbox.c5
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;
}