Browse Source

deal with messages disappearing between being listed and fetched

wip/maildir-uid-dupes-test
Oswald Buddenhagen 11 years ago
parent
commit
b570c17766
  1. 17
      src/drv_imap.c

17
src/drv_imap.c

@ -1876,6 +1876,8 @@ imap_submit_load( imap_store_t *ctx, const char *buf, int tuids, struct imap_cmd
/******************* imap_fetch_msg *******************/
static void imap_fetch_msg_p2( imap_store_t *ctx, struct imap_cmd *gcmd, int response );
static void
imap_fetch_msg( store_t *ctx, message_t *msg, msg_data_t *data,
void (*cb)( int sts, void *aux ), void *aux )
@ -1885,12 +1887,25 @@ imap_fetch_msg( store_t *ctx, message_t *msg, msg_data_t *data,
INIT_IMAP_CMD_X(imap_cmd_fetch_msg, cmd, cb, aux)
cmd->gen.gen.param.uid = msg->uid;
cmd->msg_data = data;
imap_exec( (imap_store_t *)ctx, &cmd->gen.gen, imap_done_simple_msg,
data->data = 0;
imap_exec( (imap_store_t *)ctx, &cmd->gen.gen, imap_fetch_msg_p2,
"UID FETCH %d (%s%sBODY.PEEK[])", msg->uid,
!(msg->status & M_FLAGS) ? "FLAGS " : "",
(data->date== -1) ? "INTERNALDATE " : "" );
}
static void
imap_fetch_msg_p2( imap_store_t *ctx, struct imap_cmd *gcmd, int response )
{
struct imap_cmd_fetch_msg *cmd = (struct imap_cmd_fetch_msg *)gcmd;
if (response == RESP_OK && !cmd->msg_data->data) {
/* The FETCH succeeded, but there is no message with this UID. */
response = RESP_NO;
}
imap_done_simple_msg( ctx, gcmd, response );
}
/******************* imap_set_flags *******************/
static void imap_set_flags_p2( imap_store_t *, struct imap_cmd *, int );

Loading…
Cancel
Save