dovecot-2.0: doveadm: Changed mail command handler API.
dovecot at dovecot.org
dovecot at dovecot.org
Fri Apr 30 19:15:00 EEST 2010
details: http://hg.dovecot.org/dovecot-2.0/rev/f05909834219
changeset: 11247:f05909834219
user: Timo Sirainen <tss at iki.fi>
date: Fri Apr 30 19:14:57 2010 +0300
description:
doveadm: Changed mail command handler API.
This should help add some new future features.
diffstat:
src/doveadm/doveadm-mail-altmove.c | 31 +++++++--
src/doveadm/doveadm-mail-expunge.c | 37 ++++++++---
src/doveadm/doveadm-mail-fetch.c | 104 ++++++++++++++++++++--------------
src/doveadm/doveadm-mail-list.c | 52 +++++++++++------
src/doveadm/doveadm-mail-search.c | 31 +++++++--
src/doveadm/doveadm-mail.c | 95 +++++++++++++++++++++++--------
src/doveadm/doveadm-mail.h | 28 ++++++--
src/plugins/quota/doveadm-quota.c | 26 ++++++++-
8 files changed, 281 insertions(+), 123 deletions(-)
diffs (truncated from 822 to 300 lines):
diff -r f195e11fd919 -r f05909834219 src/doveadm/doveadm-mail-altmove.c
--- a/src/doveadm/doveadm-mail-altmove.c Fri Apr 30 18:01:08 2010 +0300
+++ b/src/doveadm/doveadm-mail-altmove.c Fri Apr 30 19:14:57 2010 +0300
@@ -9,6 +9,11 @@
#include "doveadm-mail-iter.h"
#include "doveadm-mail.h"
+struct altmove_cmd_context {
+ struct doveadm_mail_cmd_context ctx;
+ struct mail_search_args *search_args;
+};
+
static int
cmd_altmove_box(const struct mailbox_info *info,
struct mail_search_args *search_args)
@@ -41,14 +46,15 @@
}
}
-void cmd_altmove(struct mail_user *user, const char *const args[])
+static void
+cmd_altmove_run(struct doveadm_mail_cmd_context *_ctx, struct mail_user *user)
{
+ struct altmove_cmd_context *ctx = (struct altmove_cmd_context *)_ctx;
const enum mailbox_list_iter_flags iter_flags =
MAILBOX_LIST_ITER_RAW_LIST |
MAILBOX_LIST_ITER_VIRTUAL_NAMES |
MAILBOX_LIST_ITER_NO_AUTO_INBOX |
MAILBOX_LIST_ITER_RETURN_NO_FLAGS;
- struct mail_search_args *search_args;
struct doveadm_mail_list_iter *iter;
const struct mailbox_info *info;
struct mail_namespace *ns, *prev_ns = NULL;
@@ -56,12 +62,8 @@
struct mail_storage *const *storages;
unsigned int i, count;
- if (args[0] == NULL)
- doveadm_mail_help_name("altmove");
- search_args = doveadm_mail_build_search_args(args);
-
t_array_init(&purged_storages, 8);
- iter = doveadm_mail_list_iter_init(user, search_args, iter_flags);
+ iter = doveadm_mail_list_iter_init(user, ctx->search_args, iter_flags);
while ((info = doveadm_mail_list_iter_next(iter)) != NULL) T_BEGIN {
if (info->ns != prev_ns) {
if (prev_ns != NULL) {
@@ -71,7 +73,7 @@
}
prev_ns = info->ns;
}
- (void)cmd_altmove_box(info, search_args);
+ (void)cmd_altmove_box(info, ctx->search_args);
} T_END;
doveadm_mail_list_iter_deinit(&iter);
@@ -91,3 +93,16 @@
}
}
}
+
+struct doveadm_mail_cmd_context *cmd_altmove(const char *const args[])
+{
+ struct altmove_cmd_context *ctx;
+
+ if (args[0] == NULL)
+ doveadm_mail_help_name("altmove");
+
+ ctx = doveadm_mail_cmd_init(struct altmove_cmd_context);
+ ctx->ctx.run = cmd_altmove_run;
+ ctx->search_args = doveadm_mail_build_search_args(args);
+ return &ctx->ctx;
+}
diff -r f195e11fd919 -r f05909834219 src/doveadm/doveadm-mail-expunge.c
--- a/src/doveadm/doveadm-mail-expunge.c Fri Apr 30 18:01:08 2010 +0300
+++ b/src/doveadm/doveadm-mail-expunge.c Fri Apr 30 19:14:57 2010 +0300
@@ -9,6 +9,11 @@
#include "doveadm-mail-iter.h"
#include "doveadm-mail.h"
+struct expunge_cmd_context {
+ struct doveadm_mail_cmd_context ctx;
+ struct mail_search_args *search_args;
+};
+
static int
cmd_expunge_box(const struct mailbox_info *info,
struct mail_search_args *search_args)
@@ -161,35 +166,45 @@
return FALSE;
}
-void cmd_expunge(struct mail_user *user, const char *const args[])
+static void
+cmd_expunge_run(struct doveadm_mail_cmd_context *_ctx, struct mail_user *user)
{
+ struct expunge_cmd_context *ctx = (struct expunge_cmd_context *)_ctx;
const enum mailbox_list_iter_flags iter_flags =
MAILBOX_LIST_ITER_RAW_LIST |
MAILBOX_LIST_ITER_VIRTUAL_NAMES |
MAILBOX_LIST_ITER_NO_AUTO_INBOX |
MAILBOX_LIST_ITER_RETURN_NO_FLAGS;
- struct mail_search_args *search_args;
struct doveadm_mail_list_iter *iter;
const struct mailbox_info *info;
- if (args[0] == NULL)
- doveadm_mail_help_name("expunge");
- search_args = doveadm_mail_build_search_args(args);
- mail_search_args_simplify(search_args);
-
- if (!expunge_search_args_is_mailbox_ok(search_args->args)) {
+ if (!expunge_search_args_is_mailbox_ok(ctx->search_args->args)) {
i_fatal("expunge: To avoid accidents, search query "
"must contain MAILBOX in all search branches");
}
- if (!expunge_search_args_is_msgset_ok(search_args->args)) {
+ if (!expunge_search_args_is_msgset_ok(ctx->search_args->args)) {
i_fatal("expunge: To avoid accidents, each branch in "
"search query must contain something else "
"besides MAILBOX");
}
- iter = doveadm_mail_list_iter_init(user, search_args, iter_flags);
+ iter = doveadm_mail_list_iter_init(user, ctx->search_args, iter_flags);
while ((info = doveadm_mail_list_iter_next(iter)) != NULL) T_BEGIN {
- (void)cmd_expunge_box(info, search_args);
+ (void)cmd_expunge_box(info, ctx->search_args);
} T_END;
doveadm_mail_list_iter_deinit(&iter);
}
+
+struct doveadm_mail_cmd_context *cmd_expunge(const char *const args[])
+{
+ struct expunge_cmd_context *ctx;
+
+ if (args[0] == NULL)
+ doveadm_mail_help_name("expunge");
+
+ ctx = doveadm_mail_cmd_init(struct expunge_cmd_context);
+ ctx->ctx.run = cmd_expunge_run;
+ ctx->search_args = doveadm_mail_build_search_args(args);
+ mail_search_args_simplify(ctx->search_args);
+ return &ctx->ctx;
+}
diff -r f195e11fd919 -r f05909834219 src/doveadm/doveadm-mail-fetch.c
--- a/src/doveadm/doveadm-mail-fetch.c Fri Apr 30 18:01:08 2010 +0300
+++ b/src/doveadm/doveadm-mail-fetch.c Fri Apr 30 19:14:57 2010 +0300
@@ -17,7 +17,9 @@
#include <stdio.h>
-struct fetch_context {
+struct fetch_cmd_context {
+ struct doveadm_mail_cmd_context ctx;
+
struct mail_search_args *search_args;
struct ostream *output;
struct mail *mail;
@@ -31,7 +33,7 @@
bool print_field_prefix;
};
-static int fetch_mailbox(struct fetch_context *ctx)
+static int fetch_mailbox(struct fetch_cmd_context *ctx)
{
const char *value;
@@ -41,7 +43,7 @@
return 0;
}
-static int fetch_mailbox_guid(struct fetch_context *ctx)
+static int fetch_mailbox_guid(struct fetch_cmd_context *ctx)
{
uint8_t guid[MAIL_GUID_128_SIZE];
@@ -51,19 +53,19 @@
return 0;
}
-static int fetch_seq(struct fetch_context *ctx)
+static int fetch_seq(struct fetch_cmd_context *ctx)
{
str_printfa(ctx->hdr, "%u", ctx->mail->seq);
return 0;
}
-static int fetch_uid(struct fetch_context *ctx)
+static int fetch_uid(struct fetch_cmd_context *ctx)
{
str_printfa(ctx->hdr, "%u", ctx->mail->seq);
return 0;
}
-static int fetch_guid(struct fetch_context *ctx)
+static int fetch_guid(struct fetch_cmd_context *ctx)
{
const char *value;
@@ -73,20 +75,20 @@
return 0;
}
-static int fetch_flags(struct fetch_context *ctx)
+static int fetch_flags(struct fetch_cmd_context *ctx)
{
imap_write_flags(ctx->hdr, mail_get_flags(ctx->mail),
mail_get_keywords(ctx->mail));
return 0;
}
-static void flush_hdr(struct fetch_context *ctx)
+static void flush_hdr(struct fetch_cmd_context *ctx)
{
o_stream_send(ctx->output, str_data(ctx->hdr), str_len(ctx->hdr));
str_truncate(ctx->hdr, 0);
}
-static int fetch_hdr(struct fetch_context *ctx)
+static int fetch_hdr(struct fetch_cmd_context *ctx)
{
struct istream *input;
struct message_size hdr_size;
@@ -112,7 +114,7 @@
return ret;
}
-static int fetch_body(struct fetch_context *ctx)
+static int fetch_body(struct fetch_cmd_context *ctx)
{
struct istream *input;
struct message_size hdr_size;
@@ -137,7 +139,7 @@
return ret;
}
-static int fetch_text(struct fetch_context *ctx)
+static int fetch_text(struct fetch_cmd_context *ctx)
{
struct istream *input;
int ret = 0;
@@ -160,7 +162,7 @@
return ret;
}
-static int fetch_size_physical(struct fetch_context *ctx)
+static int fetch_size_physical(struct fetch_cmd_context *ctx)
{
uoff_t size;
@@ -170,7 +172,7 @@
return 0;
}
-static int fetch_size_virtual(struct fetch_context *ctx)
+static int fetch_size_virtual(struct fetch_cmd_context *ctx)
{
uoff_t size;
@@ -180,7 +182,7 @@
return 0;
}
-static int fetch_date_received(struct fetch_context *ctx)
+static int fetch_date_received(struct fetch_cmd_context *ctx)
{
time_t t;
@@ -190,7 +192,7 @@
return 0;
}
-static int fetch_date_sent(struct fetch_context *ctx)
+static int fetch_date_sent(struct fetch_cmd_context *ctx)
{
time_t t;
int tz;
@@ -206,7 +208,7 @@
return 0;
}
-static int fetch_date_saved(struct fetch_context *ctx)
+static int fetch_date_saved(struct fetch_cmd_context *ctx)
{
time_t t;
@@ -219,7 +221,7 @@
struct fetch_field {
const char *name;
enum mail_fetch_field wanted_fields;
- int (*print)(struct fetch_context *ctx);
+ int (*print)(struct fetch_cmd_context *ctx);
};
static const struct fetch_field fetch_fields[] = {
@@ -261,7 +263,7 @@
fprintf(stderr, "\n");
}
More information about the dovecot-cvs
mailing list