doveadm-mail-mailbox-status.c revision 5f5870385cff47efd2f58e7892f251cf13761528
5f5870385cff47efd2f58e7892f251cf13761528Timo Sirainen/* Copyright (c) 2010-2012 Dovecot authors, see the included COPYING file */
51327f2489a4e0e615eb9f7d921473cf8512bb79Timo Sirainen (MAILBOX_METADATA_VIRTUAL_SIZE | MAILBOX_METADATA_GUID)
51327f2489a4e0e615eb9f7d921473cf8512bb79Timo Sirainen (STATUS_MESSAGES | STATUS_RECENT | STATUS_UNSEEN)
b8b085f7bc6f1c0367802a9f00062bbbd981690dTimo Sirainenstatic void status_parse_fields(struct status_cmd_context *ctx,
b8b085f7bc6f1c0367802a9f00062bbbd981690dTimo Sirainen const char *const *fields)
51327f2489a4e0e615eb9f7d921473cf8512bb79Timo Sirainen ctx->metadata_items |= MAILBOX_METADATA_VIRTUAL_SIZE;
51327f2489a4e0e615eb9f7d921473cf8512bb79Timo Sirainen ((ctx->status_items & ~TOTAL_STATUS_ITEMS) != 0 ||
51327f2489a4e0e615eb9f7d921473cf8512bb79Timo Sirainen (ctx->metadata_items & ~TOTAL_METADATA_ITEMS) != 0))
b8b085f7bc6f1c0367802a9f00062bbbd981690dTimo Sirainen i_fatal("Status field %s can't be used with -t", field);
b8b085f7bc6f1c0367802a9f00062bbbd981690dTimo Sirainenstatic void status_output(struct status_cmd_context *ctx, struct mailbox *box,
51327f2489a4e0e615eb9f7d921473cf8512bb79Timo Sirainen if ((ctx->status_items & STATUS_MESSAGES) != 0)
51327f2489a4e0e615eb9f7d921473cf8512bb79Timo Sirainen if ((ctx->status_items & STATUS_UIDNEXT) != 0)
51327f2489a4e0e615eb9f7d921473cf8512bb79Timo Sirainen if ((ctx->status_items & STATUS_UIDVALIDITY) != 0)
51327f2489a4e0e615eb9f7d921473cf8512bb79Timo Sirainen if ((ctx->status_items & STATUS_HIGHESTMODSEQ) != 0)
51327f2489a4e0e615eb9f7d921473cf8512bb79Timo Sirainen if ((ctx->metadata_items & MAILBOX_METADATA_VIRTUAL_SIZE) != 0)
51327f2489a4e0e615eb9f7d921473cf8512bb79Timo Sirainen if ((ctx->metadata_items & MAILBOX_METADATA_GUID) != 0)
de62ce819d59a529530da4b57be1b8d6dad13d6bTimo Sirainen doveadm_print(guid_128_to_string(metadata->guid));
b8b085f7bc6f1c0367802a9f00062bbbd981690dTimo Sirainen struct mailbox_status *dest = &ctx->total_status;
51327f2489a4e0e615eb9f7d921473cf8512bb79Timo Sirainen ctx->total_metadata.virtual_size += metadata->virtual_size;
b8b085f7bc6f1c0367802a9f00062bbbd981690dTimo Sirainenstatus_mailbox(struct status_cmd_context *ctx, const struct mailbox_info *info)
636f017be100bce67d66fd3ae1544a47681efd33Timo Sirainen box = doveadm_mailbox_find(ctx->ctx.cur_mail_user, info->name);
51327f2489a4e0e615eb9f7d921473cf8512bb79Timo Sirainen if (mailbox_get_status(box, ctx->status_items, &status) < 0 ||
51327f2489a4e0e615eb9f7d921473cf8512bb79Timo Sirainen mailbox_get_metadata(box, ctx->metadata_items, &metadata) < 0) {
b8b085f7bc6f1c0367802a9f00062bbbd981690dTimo Sirainencmd_mailbox_status_run(struct doveadm_mail_cmd_context *_ctx,
b8b085f7bc6f1c0367802a9f00062bbbd981690dTimo Sirainen struct status_cmd_context *ctx = (struct status_cmd_context *)_ctx;
b8b085f7bc6f1c0367802a9f00062bbbd981690dTimo Sirainen memset(&ctx->total_status, 0, sizeof(ctx->total_status));
b8b085f7bc6f1c0367802a9f00062bbbd981690dTimo Sirainen iter = doveadm_mail_list_iter_init(user, ctx->search_args, iter_flags);
b8b085f7bc6f1c0367802a9f00062bbbd981690dTimo Sirainen while ((info = doveadm_mail_list_iter_next(iter)) != NULL) {
b8b085f7bc6f1c0367802a9f00062bbbd981690dTimo Sirainenstatic void cmd_mailbox_status_init(struct doveadm_mail_cmd_context *_ctx,
b8b085f7bc6f1c0367802a9f00062bbbd981690dTimo Sirainen const char *const args[])
b8b085f7bc6f1c0367802a9f00062bbbd981690dTimo Sirainen struct status_cmd_context *ctx = (struct status_cmd_context *)_ctx;
b8b085f7bc6f1c0367802a9f00062bbbd981690dTimo Sirainen status_parse_fields(ctx, t_strsplit_spaces(fields, " "));
b8b085f7bc6f1c0367802a9f00062bbbd981690dTimo Sirainen ctx->search_args = doveadm_mail_mailbox_search_args_build(args);
51327f2489a4e0e615eb9f7d921473cf8512bb79Timo Sirainen if ((ctx->status_items & STATUS_MESSAGES) != 0)
51327f2489a4e0e615eb9f7d921473cf8512bb79Timo Sirainen if ((ctx->status_items & STATUS_UIDNEXT) != 0)
51327f2489a4e0e615eb9f7d921473cf8512bb79Timo Sirainen if ((ctx->status_items & STATUS_UIDVALIDITY) != 0)
51327f2489a4e0e615eb9f7d921473cf8512bb79Timo Sirainen if ((ctx->status_items & STATUS_HIGHESTMODSEQ) != 0)
51327f2489a4e0e615eb9f7d921473cf8512bb79Timo Sirainen if ((ctx->metadata_items & MAILBOX_METADATA_VIRTUAL_SIZE) != 0)
51327f2489a4e0e615eb9f7d921473cf8512bb79Timo Sirainen if ((ctx->metadata_items & MAILBOX_METADATA_GUID) != 0)
b8b085f7bc6f1c0367802a9f00062bbbd981690dTimo Sirainencmd_mailbox_status_parse_arg(struct doveadm_mail_cmd_context *_ctx, int c)
b8b085f7bc6f1c0367802a9f00062bbbd981690dTimo Sirainen struct status_cmd_context *ctx = (struct status_cmd_context *)_ctx;
b8b085f7bc6f1c0367802a9f00062bbbd981690dTimo Sirainenstatic struct doveadm_mail_cmd_context *cmd_mailbox_status_alloc(void)
b8b085f7bc6f1c0367802a9f00062bbbd981690dTimo Sirainen ctx = doveadm_mail_cmd_alloc(struct status_cmd_context);
b8b085f7bc6f1c0367802a9f00062bbbd981690dTimo Sirainen ctx->ctx.v.parse_arg = cmd_mailbox_status_parse_arg;
b8b085f7bc6f1c0367802a9f00062bbbd981690dTimo Sirainen "[-t] <fields> <mailbox mask> [...]"