diff options
author | Johannes Berg <johannes@sipsolutions.net> | 2007-10-01 22:32:10 +0200 |
---|---|---|
committer | Johannes Berg <johannes@sipsolutions.net> | 2007-10-01 22:32:10 +0200 |
commit | e0a10f38cd617c4483d4c67b564165a65bb46de2 (patch) | |
tree | 51053cb014de3514f85edcb6bd2a240850a3c6ec /antispam-storage-1.0.c | |
parent | b359532647ccd3ac3221dcb37dca7bdb4cbb2e58 (diff) | |
download | dovecot-antispam-e0a10f38cd617c4483d4c67b564165a65bb46de2.tar.gz dovecot-antispam-e0a10f38cd617c4483d4c67b564165a65bb46de2.tar.xz dovecot-antispam-e0a10f38cd617c4483d4c67b564165a65bb46de2.zip |
introduce 'unsure' folder feature, fix bug from previous commit
Diffstat (limited to 'antispam-storage-1.0.c')
-rw-r--r-- | antispam-storage-1.0.c | 31 |
1 files changed, 25 insertions, 6 deletions
diff --git a/antispam-storage-1.0.c b/antispam-storage-1.0.c index e8aa6bb..f93a5b3 100644 --- a/antispam-storage-1.0.c +++ b/antispam-storage-1.0.c @@ -27,10 +27,22 @@ struct antispam_mail_storage { enum mailbox_move_type { MMT_UNINTERESTING, - MMT_FROM_SPAM, + MMT_TO_CLEAN, MMT_TO_SPAM, }; +enum classification move_to_class(enum mailbox_move_type tp) +{ + switch (tp) { + case MMT_TO_CLEAN: + return CLASS_NOTSPAM; + case MMT_TO_SPAM: + return CLASS_SPAM; + default: + i_assert(0); + } +} + struct antispam_mailbox { struct mailbox_vfuncs super; @@ -63,14 +75,21 @@ antispam_copy(struct mailbox_transaction_context *t, struct mail *mail, asbox->save_hack = FALSE; asbox->movetype = MMT_UNINTERESTING; + if (mailbox_is_unsure(t->box)) { + mail_storage_set_error(t->box->storage, + "Cannot copy to unsure folder"); + return -1; + } + if (!mailbox_is_trash(mail->box) && !mailbox_is_trash(t->box)) { bool src_spam = mailbox_is_spam(mail->box); bool dst_spam = mailbox_is_spam(t->box); + bool src_unsu = mailbox_is_unsure(mail->box); - if (src_spam && !dst_spam) - asbox->movetype = MMT_FROM_SPAM; - else if (!src_spam && dst_spam) + if ((src_spam || src_unsu) && !dst_spam) + asbox->movetype = MMT_TO_CLEAN; + else if ((!src_spam || src_unsu) && dst_spam) asbox->movetype = MMT_TO_SPAM; } @@ -84,7 +103,7 @@ antispam_copy(struct mailbox_transaction_context *t, struct mail *mail, ret = 0; else ret = backend_handle_mail(t, ast, copy_dest_mail, - asbox->movetype == MMT_FROM_SPAM); + move_to_class(asbox->movetype)); if (copy_dest_mail != dest_mail) mail_free(©_dest_mail); @@ -113,7 +132,7 @@ static int antispam_save_finish(struct mail_save_context *ctx, asbox->save_hack = TRUE; if (asbox->movetype != MMT_UNINTERESTING) ret = backend_handle_mail(ctx->transaction, ast, save_dest_mail, - asbox->movetype == MMT_FROM_SPAM); + move_to_class(asbox->movetype)); else ret = 0; |