]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib-storage: Added mail_get_real_mail() that returns physical mail in a virtual mailbox.
authorTimo Sirainen <tss@iki.fi>
Wed, 12 May 2010 17:47:26 +0000 (19:47 +0200)
committerTimo Sirainen <tss@iki.fi>
Wed, 12 May 2010 17:47:26 +0000 (19:47 +0200)
--HG--
branch : HEAD

12 files changed:
src/lib-storage/index/cydir/cydir-mail.c
src/lib-storage/index/dbox-multi/mdbox-mail.c
src/lib-storage/index/dbox-single/sdbox-mail.c
src/lib-storage/index/index-mail.c
src/lib-storage/index/index-mail.h
src/lib-storage/index/maildir/maildir-mail.c
src/lib-storage/index/mbox/mbox-mail.c
src/lib-storage/index/raw/raw-mail.c
src/lib-storage/mail-storage-private.h
src/lib-storage/mail-storage.h
src/lib-storage/mail.c
src/plugins/virtual/virtual-mail.c

index f8ef8bb1ac9df6207b62ca1be46194c89931fa33..7aac08115f924dcac33924d5a33fb9b1a61860f8 100644 (file)
@@ -142,6 +142,7 @@ struct mail_vfuncs cydir_mail_vfuncs = {
        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 ab37d823320afc37cf832b1f260c439cb7e1b9f6..c1e85e2592c3317fcfa223ddf039cc196d1239ee 100644 (file)
@@ -208,6 +208,7 @@ struct mail_vfuncs mdbox_mail_vfuncs = {
        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 d3bfebaa0761c2b7a1580e8eafb0e7c906c15a9c..bb2718c87f76d11156c4bad6916aaf4993155268 100644 (file)
@@ -98,6 +98,7 @@ struct mail_vfuncs sdbox_mail_vfuncs = {
        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,
index 738fc45c238d8d7edfda241c7fb080b95d2ad450..9d5656082c82b58024f5462a6e18f9a0d1842cb6 100644 (file)
@@ -1063,6 +1063,11 @@ int index_mail_get_special(struct mail *_mail,
        }
 }
 
+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,
index cbbc59f2a2b3e4c86763d3d6d7175ce2c6ea1112..877b8c09f431f9fa0029a0d7c0480c2b943dc096 100644 (file)
@@ -194,6 +194,7 @@ int index_mail_init_stream(struct index_mail *mail,
                           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 496984df0cf16822d598683b3284928d4ccacca7..5aab1d767b380b06d59700430fbfe94b83e2b5aa 100644 (file)
@@ -585,6 +585,7 @@ struct mail_vfuncs maildir_mail_vfuncs = {
        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 674b089170a18d414d63e33e68d385d25cad3d37..c1d2a61a730e779f5a95cf8ee4396f0e435795dc 100644 (file)
@@ -403,6 +403,7 @@ struct mail_vfuncs mbox_mail_vfuncs = {
        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 6cf980a8db1bead8236881552cf7c14adb41e80c..3d4346f96d629588afca237befd590248485794e 100644 (file)
@@ -132,6 +132,7 @@ struct mail_vfuncs raw_mail_vfuncs = {
        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,
index 4012851e65ec748557b1e6e32328cbf0f419b33c..be9f17f717f87488daa7e5e27cf3916c2d0a46d3 100644 (file)
@@ -306,6 +306,7 @@ struct mail_vfuncs {
 
        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);
index 504eeee69ec40f97cedde8bf2937ad8353fe75a8..56a7388d5e2dc83adb832e5d350be06520a343c9 100644 (file)
@@ -660,6 +660,9 @@ int mail_get_stream(struct mail *mail, struct message_size *hdr_size,
 /* 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,
index dbe9b64f3185addc1a7248e17f2c9ed532aac704..993f6673ea84e7c04d68d9492a01b2d4dee664ad 100644 (file)
@@ -180,6 +180,13 @@ int mail_get_special(struct mail *mail, enum mail_fetch_field field,
        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)
 {
index e834cfef5d0759e2f378dee0ddf5c12b4bbf82cd..163c53f3463b355b9dc669ddb5fcfeb0efd9b440 100644 (file)
@@ -346,6 +346,13 @@ virtual_mail_get_special(struct mail *mail, enum mail_fetch_field field,
        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;
@@ -401,6 +408,7 @@ struct mail_vfuncs virtual_mail_vfuncs = {
        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,