deal with messages disappearing between being listed and fetched
This commit is contained in:
		
							parent
							
								
									17c4748dfa
								
							
						
					
					
						commit
						b570c17766
					
				
					 1 changed files with 16 additions and 1 deletions
				
			
		|  | @ -1876,6 +1876,8 @@ imap_submit_load( imap_store_t *ctx, const char *buf, int tuids, struct imap_cmd | ||||||
| 
 | 
 | ||||||
| /******************* imap_fetch_msg *******************/ | /******************* imap_fetch_msg *******************/ | ||||||
| 
 | 
 | ||||||
|  | static void imap_fetch_msg_p2( imap_store_t *ctx, struct imap_cmd *gcmd, int response ); | ||||||
|  | 
 | ||||||
| static void | static void | ||||||
| imap_fetch_msg( store_t *ctx, message_t *msg, msg_data_t *data, | imap_fetch_msg( store_t *ctx, message_t *msg, msg_data_t *data, | ||||||
|                 void (*cb)( int sts, void *aux ), void *aux ) |                 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) | 	INIT_IMAP_CMD_X(imap_cmd_fetch_msg, cmd, cb, aux) | ||||||
| 	cmd->gen.gen.param.uid = msg->uid; | 	cmd->gen.gen.param.uid = msg->uid; | ||||||
| 	cmd->msg_data = data; | 	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, | 	           "UID FETCH %d (%s%sBODY.PEEK[])", msg->uid, | ||||||
| 	           !(msg->status & M_FLAGS) ? "FLAGS " : "", | 	           !(msg->status & M_FLAGS) ? "FLAGS " : "", | ||||||
| 	           (data->date== -1) ? "INTERNALDATE " : "" ); | 	           (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 *******************/ | /******************* imap_set_flags *******************/ | ||||||
| 
 | 
 | ||||||
| static void imap_set_flags_p2( imap_store_t *, struct imap_cmd *, int ); | static void imap_set_flags_p2( imap_store_t *, struct imap_cmd *, int ); | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		
		Reference in a new issue