case MAIL_FETCH_SEARCH_SCORE:
case MAIL_FETCH_GUID:
case MAIL_FETCH_HEADER_MD5:
+ case MAIL_FETCH_POP3_ORDER:
*value_r = "";
return 0;
case MAIL_FETCH_MAILBOX_NAME:
{
struct index_mail *mail = (struct index_mail *)_mail;
struct maildir_mailbox *mbox = (struct maildir_mailbox *)_mail->box;
- const char *path, *fname = NULL, *end, *guid, *uidl;
+ const char *path, *fname = NULL, *end, *guid, *uidl, *order;
switch (field) {
case MAIL_FETCH_GUID:
*value_r = p_strdup(mail->data_pool, uidl);
}
return 0;
+ case MAIL_FETCH_POP3_ORDER:
+ order = maildir_uidlist_lookup_ext(mbox->uidlist, _mail->uid,
+ MAILDIR_UIDLIST_REC_EXT_POP3_ORDER);
+ if (order == NULL) {
+ *value_r = "";
+ } else {
+ *value_r = p_strdup(mail->data_pool, order);
+ }
+ return 0;
default:
return index_mail_get_special(_mail, field, value_r);
}
MAILDIR_UIDLIST_REC_EXT_VSIZE = 'W',
/* POP3 UIDL overriding the default format */
MAILDIR_UIDLIST_REC_EXT_POP3_UIDL = 'P',
+ /* POP3 message ordering number. Lower numbered messages are listed
+ first. Messages without ordering number are listed after them.
+ The idea is to be able to preserve POP3 UIDL list and IMAP UIDs
+ perfectly when migrating from other servers. */
+ MAILDIR_UIDLIST_REC_EXT_POP3_ORDER = 'O',
/* Message GUID (default is the base filename) */
MAILDIR_UIDLIST_REC_EXT_GUID = 'G'
};
MAIL_FETCH_UIDL_BACKEND = 0x00040000,
MAIL_FETCH_MAILBOX_NAME = 0x00080000,
MAIL_FETCH_SEARCH_SCORE = 0x00100000,
- MAIL_FETCH_GUID = 0x00200000
+ MAIL_FETCH_GUID = 0x00200000,
+ MAIL_FETCH_POP3_ORDER = 0x00400000
};
enum mailbox_transaction_flags {