Hi,
I want to add a feature to the fetch command in IMAP, by enabling it to return 
the save
date, when I request the SAVEDATE parameter.
I want to use this for my webmail application, so I can show the users the 
deleted date
when they are viewing the Trash folder.

I was able to put it directly into the code (patch attached), but I was 
wondering if
there is a way to put it as a plugin instead.

Can somebody guide me on how to do that.

Thanks a lot.

-------------------------
Play the best Flash Games on the web with Maktoob Shams Games.
http://games.maktoob.com/
*** dovecot-1.1.15/src/imap/imap-fetch.c	2009-01-06 16:33:51.000000000 +0200
--- dovecot-1.1.15-myver/src/imap/imap-fetch.c	2009-05-21 02:47:56.000000000 +0300
***************
*** 20,26 ****
  #define ENVELOPE_NIL_REPLY \
  	"(NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL)"
  
! extern const struct imap_fetch_handler imap_fetch_default_handlers[7];
  static buffer_t *fetch_handlers = NULL;
  
  static int imap_fetch_handler_cmp(const void *p1, const void *p2)
--- 20,26 ----
  #define ENVELOPE_NIL_REPLY \
  	"(NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL)"
  
! extern const struct imap_fetch_handler imap_fetch_default_handlers[8];
  static buffer_t *fetch_handlers = NULL;
  
  static int imap_fetch_handler_cmp(const void *p1, const void *p2)
***************
*** 568,573 ****
--- 568,597 ----
  	return TRUE;
  }
  
+ static int fetch_savedate(struct imap_fetch_context *ctx, struct mail *mail,
+ 			      void *context ATTR_UNUSED)
+ {
+ 	time_t date;
+ 
+ 	if (mail_get_save_date(mail, &date) < 0)
+ 		return -1;
+ 
+ 	str_printfa(ctx->cur_str, "SAVEDATE \"%s\" ",
+ 		    imap_to_datetime(date));
+ 	return 1;
+ }
+ 
+ static bool
+ fetch_savedate_init(struct imap_fetch_context *ctx, const char *name,
+ 			const struct imap_arg **args ATTR_UNUSED)
+ {
+ 	ctx->fetch_data |= MAIL_FETCH_SAVE_DATE;
+ 	imap_fetch_add_handler(ctx, TRUE, FALSE, name,
+ 			       "\"01-Jan-1970 00:00:00 +0000\"",
+ 			       fetch_savedate, NULL);
+ 	return TRUE;
+ }
+ 
  static int fetch_uid(struct imap_fetch_context *ctx, struct mail *mail,
  		     void *context ATTR_UNUSED)
  {
***************
*** 583,594 ****
  	return TRUE;
  }
  
! const struct imap_fetch_handler imap_fetch_default_handlers[7] = {
  	{ "BODY", fetch_body_init },
  	{ "BODYSTRUCTURE", fetch_bodystructure_init },
  	{ "ENVELOPE", fetch_envelope_init },
  	{ "FLAGS", fetch_flags_init },
  	{ "INTERNALDATE", fetch_internaldate_init },
  	{ "RFC822", fetch_rfc822_init },
  	{ "UID", fetch_uid_init }
  };
--- 607,619 ----
  	return TRUE;
  }
  
! const struct imap_fetch_handler imap_fetch_default_handlers[8] = {
  	{ "BODY", fetch_body_init },
  	{ "BODYSTRUCTURE", fetch_bodystructure_init },
  	{ "ENVELOPE", fetch_envelope_init },
  	{ "FLAGS", fetch_flags_init },
  	{ "INTERNALDATE", fetch_internaldate_init },
+     { "SAVEDATE", fetch_savedate_init },
  	{ "RFC822", fetch_rfc822_init },
  	{ "UID", fetch_uid_init }
  };

Reply via email to