index_mail_get_header_stream,
cydir_mail_get_stream,
index_mail_get_special,
+ index_mail_get_real_mail,
index_mail_update_flags,
index_mail_update_keywords,
index_mail_update_modseq,
index_mail_get_header_stream,
dbox_mail_get_stream,
dbox_mail_get_special,
+ index_mail_get_real_mail,
mdbox_mail_update_flags,
index_mail_update_keywords,
index_mail_update_modseq,
index_mail_get_header_stream,
dbox_mail_get_stream,
dbox_mail_get_special,
+ index_mail_get_real_mail,
index_mail_update_flags,
index_mail_update_keywords,
index_mail_update_modseq,
}
}
+struct mail *index_mail_get_real_mail(struct mail *mail)
+{
+ return mail;
+}
+
struct mail *
index_mail_alloc(struct mailbox_transaction_context *t,
enum mail_fetch_field wanted_fields,
struct istream **stream_r);
int index_mail_get_special(struct mail *_mail, enum mail_fetch_field field,
const char **value_r);
+struct mail *index_mail_get_real_mail(struct mail *mail);
void index_mail_update_flags(struct mail *mail, enum modify_type modify_type,
enum mail_flags flags);
index_mail_get_header_stream,
maildir_mail_get_stream,
maildir_mail_get_special,
+ index_mail_get_real_mail,
index_mail_update_flags,
index_mail_update_keywords,
index_mail_update_modseq,
index_mail_get_header_stream,
mbox_mail_get_stream,
mbox_mail_get_special,
+ index_mail_get_real_mail,
index_mail_update_flags,
index_mail_update_keywords,
index_mail_update_modseq,
index_mail_get_header_stream,
raw_mail_get_stream,
raw_mail_get_special,
+ index_mail_get_real_mail,
index_mail_update_flags,
index_mail_update_keywords,
index_mail_update_modseq,
int (*get_special)(struct mail *mail, enum mail_fetch_field field,
const char **value_r);
+ struct mail *(*get_real_mail)(struct mail *mail);
void (*update_flags)(struct mail *mail, enum modify_type modify_type,
enum mail_flags flags);
/* Get any of the "special" fields. Unhandled specials are returned as "". */
int mail_get_special(struct mail *mail, enum mail_fetch_field field,
const char **value_r);
+/* Returns the mail for the physical message. Normally this is the mail itself,
+ but in virtual mailboxes it points to the backend mailbox. */
+struct mail *mail_get_real_mail(struct mail *mail);
/* Update message flags. */
void mail_update_flags(struct mail *mail, enum modify_type modify_type,
return p->v.get_special(mail, field, value_r);
}
+struct mail *mail_get_real_mail(struct mail *mail)
+{
+ struct mail_private *p = (struct mail_private *)mail;
+
+ return p->v.get_real_mail(mail);
+}
+
void mail_update_flags(struct mail *mail, enum modify_type modify_type,
enum mail_flags flags)
{
return 0;
}
+static struct mail *virtual_mail_get_real_mail(struct mail *mail)
+{
+ struct virtual_mail *vmail = (struct virtual_mail *)mail;
+
+ return mail_get_real_mail(vmail->backend_mail);
+}
+
static void virtual_mail_update_pop3_uidl(struct mail *mail, const char *uidl)
{
struct virtual_mail *vmail = (struct virtual_mail *)mail;
virtual_mail_get_header_stream,
virtual_mail_get_stream,
virtual_mail_get_special,
+ virtual_mail_get_real_mail,
index_mail_update_flags,
index_mail_update_keywords,
index_mail_update_modseq,