# HG changeset patch # User Timo Sirainen # Date 1295822526 -7200 # Node ID 360af3cc616b0b32c69f85798df6b86966d409c5 # Parent a349c50cddaadcd091009f74f4ef68e4d9073065 imapc: Fixed mail_set_seq/uid() to work. diff -r a349c50cddaa -r 360af3cc616b src/lib-storage/index/imapc/imapc-mail.c --- a/src/lib-storage/index/imapc/imapc-mail.c Mon Jan 24 00:31:05 2011 +0200 +++ b/src/lib-storage/index/imapc/imapc-mail.c Mon Jan 24 00:42:06 2011 +0200 @@ -1,10 +1,26 @@ /* Copyright (c) 2011 Dovecot authors, see the included COPYING file */ #include "lib.h" +#include "str.h" #include "istream.h" #include "index-mail.h" +#include "imapc-client.h" #include "imapc-storage.h" +static void imapc_mail_set_seq(struct mail *_mail, uint32_t seq) +{ + index_mail_set_seq(_mail, seq); + imapc_mail_fetch(_mail); +} + +static bool imapc_mail_set_uid(struct mail *_mail, uint32_t uid) +{ + if (!index_mail_set_uid(_mail, uid)) + return FALSE; + imapc_mail_fetch(_mail); + return TRUE; +} + static int imapc_mail_get_received_date(struct mail *_mail, time_t *date_r) { struct index_mail *mail = (struct index_mail *)_mail; @@ -54,8 +70,8 @@ struct mail_vfuncs imapc_mail_vfuncs = { index_mail_close, index_mail_free, - index_mail_set_seq, - index_mail_set_uid, + imapc_mail_set_seq, + imapc_mail_set_uid, index_mail_set_uid_cache_updates, index_mail_get_flags, diff -r a349c50cddaa -r 360af3cc616b src/lib-storage/index/imapc/imapc-search.c --- a/src/lib-storage/index/imapc/imapc-search.c Mon Jan 24 00:31:05 2011 +0200 +++ b/src/lib-storage/index/imapc/imapc-search.c Mon Jan 24 00:42:06 2011 +0200 @@ -12,30 +12,20 @@ #include "imapc-client.h" #include "imapc-storage.h" -struct mail_search_context * -imapc_search_init(struct mailbox_transaction_context *t, - struct mail_search_args *args, - const enum mail_sort_type *sort_program) -{ - return index_storage_search_init(t, args, sort_program); -} - -bool imapc_search_next_nonblock(struct mail_search_context *_ctx, - struct mail *mail, bool *tryagain_r) +void imapc_mail_fetch(struct mail *mail) { struct mail_private *pmail = (struct mail_private *)mail; struct imapc_mailbox *mbox = (struct imapc_mailbox *)mail->box; string_t *str; unsigned int orig_len; - if (!index_storage_search_next_nonblock(_ctx, mail, tryagain_r)) - return FALSE; - str = t_str_new(64); str_printfa(str, "UID FETCH %u (", mail->uid); orig_len = str_len(str); - if ((pmail->wanted_fields & (MAIL_FETCH_MESSAGE_PARTS | + if ((pmail->wanted_fields & (MAIL_FETCH_STREAM_HEADER | + MAIL_FETCH_STREAM_BODY | + MAIL_FETCH_MESSAGE_PARTS | MAIL_FETCH_NUL_STATE | MAIL_FETCH_IMAP_BODY | MAIL_FETCH_IMAP_BODYSTRUCTURE | @@ -53,7 +43,7 @@ if (str_len(str) == orig_len) { /* we don't need to fetch anything */ - return TRUE; + return; } str_truncate(str, str_len(str) - 1); @@ -64,6 +54,23 @@ mbox->storage, "%1s", str_c(str)); imapc_client_run(mbox->storage->client); mbox->cur_fetch_mail = NULL; +} + +struct mail_search_context * +imapc_search_init(struct mailbox_transaction_context *t, + struct mail_search_args *args, + const enum mail_sort_type *sort_program) +{ + return index_storage_search_init(t, args, sort_program); +} + +bool imapc_search_next_nonblock(struct mail_search_context *_ctx, + struct mail *mail, bool *tryagain_r) +{ + if (!index_storage_search_next_nonblock(_ctx, mail, tryagain_r)) + return FALSE; + + imapc_mail_fetch(mail); return TRUE; } diff -r a349c50cddaa -r 360af3cc616b src/lib-storage/index/imapc/imapc-storage.h --- a/src/lib-storage/index/imapc/imapc-storage.h Mon Jan 24 00:31:05 2011 +0200 +++ b/src/lib-storage/index/imapc/imapc-storage.h Mon Jan 24 00:42:06 2011 +0200 @@ -73,6 +73,7 @@ struct mail_index_transaction_commit_result *result); void imapc_transaction_save_rollback(struct mail_save_context *ctx); +void imapc_mail_fetch(struct mail *mail); struct mail_search_context * imapc_search_init(struct mailbox_transaction_context *t, struct mail_search_args *args,