doveadm-mail-mailbox-status.c revision d6e8c83d08991f05f9cd4064bca5c76854d68657
643a81fff9003cba13deb49a565a3c8171da524dTimo Sirainen/* Copyright (c) 2010-2012 Dovecot authors, see the included COPYING file */
6c00502d4ece417ead501db8f0ee3e8287ba4459Timo Sirainen (MAILBOX_METADATA_VIRTUAL_SIZE | MAILBOX_METADATA_GUID)
6c00502d4ece417ead501db8f0ee3e8287ba4459Timo Sirainen (STATUS_MESSAGES | STATUS_RECENT | STATUS_UNSEEN)
643a81fff9003cba13deb49a565a3c8171da524dTimo Sirainenstatic void status_parse_fields(struct status_cmd_context *ctx,
fcaf124d4a727424a338cccfd4274c2393818cd3Timo Sirainen const char *const *fields)
0950aed81d1e9618264e6aa4d214d89e005ec8d6Timo Sirainen ctx->metadata_items |= MAILBOX_METADATA_VIRTUAL_SIZE;
0950aed81d1e9618264e6aa4d214d89e005ec8d6Timo Sirainen ((ctx->status_items & ~TOTAL_STATUS_ITEMS) != 0 ||
0950aed81d1e9618264e6aa4d214d89e005ec8d6Timo Sirainen (ctx->metadata_items & ~TOTAL_METADATA_ITEMS) != 0)) {
0950aed81d1e9618264e6aa4d214d89e005ec8d6Timo Sirainen "Status field %s can't be used with -t", field);
0950aed81d1e9618264e6aa4d214d89e005ec8d6Timo Sirainenstatic void status_output(struct status_cmd_context *ctx, struct mailbox *box,
6c00502d4ece417ead501db8f0ee3e8287ba4459Timo Sirainen if ((ctx->status_items & STATUS_MESSAGES) != 0)
6c00502d4ece417ead501db8f0ee3e8287ba4459Timo Sirainen if ((ctx->status_items & STATUS_UIDNEXT) != 0)
6c00502d4ece417ead501db8f0ee3e8287ba4459Timo Sirainen if ((ctx->status_items & STATUS_UIDVALIDITY) != 0)
643a81fff9003cba13deb49a565a3c8171da524dTimo Sirainen if ((ctx->status_items & STATUS_HIGHESTMODSEQ) != 0)
643a81fff9003cba13deb49a565a3c8171da524dTimo Sirainen if ((ctx->metadata_items & MAILBOX_METADATA_VIRTUAL_SIZE) != 0)
737561538a2dcdcda948a1da2830a612d8263a23Timo Sirainen if ((ctx->metadata_items & MAILBOX_METADATA_GUID) != 0)
643a81fff9003cba13deb49a565a3c8171da524dTimo Sirainen doveadm_print(guid_128_to_string(metadata->guid));
6c00502d4ece417ead501db8f0ee3e8287ba4459Timo Sirainen struct mailbox_status *dest = &ctx->total_status;
6c00502d4ece417ead501db8f0ee3e8287ba4459Timo Sirainen ctx->total_metadata.virtual_size += metadata->virtual_size;
643a81fff9003cba13deb49a565a3c8171da524dTimo Sirainenstatus_mailbox(struct status_cmd_context *ctx, const struct mailbox_info *info)
fcaf124d4a727424a338cccfd4274c2393818cd3Timo Sirainen box = doveadm_mailbox_find(ctx->ctx.cur_mail_user, info->name);
643a81fff9003cba13deb49a565a3c8171da524dTimo Sirainen if (mailbox_get_status(box, ctx->status_items, &status) < 0 ||
643a81fff9003cba13deb49a565a3c8171da524dTimo Sirainen mailbox_get_metadata(box, ctx->metadata_items, &metadata) < 0) {
6c00502d4ece417ead501db8f0ee3e8287ba4459Timo Sirainencmd_mailbox_status_run(struct doveadm_mail_cmd_context *_ctx,
6c00502d4ece417ead501db8f0ee3e8287ba4459Timo Sirainen struct status_cmd_context *ctx = (struct status_cmd_context *)_ctx;
6c00502d4ece417ead501db8f0ee3e8287ba4459Timo Sirainen memset(&ctx->total_status, 0, sizeof(ctx->total_status));
6c00502d4ece417ead501db8f0ee3e8287ba4459Timo Sirainen iter = doveadm_mailbox_list_iter_init(_ctx, user, ctx->search_args,
6c00502d4ece417ead501db8f0ee3e8287ba4459Timo Sirainen while ((info = doveadm_mailbox_list_iter_next(iter)) != NULL) {
6c00502d4ece417ead501db8f0ee3e8287ba4459Timo Sirainen if (doveadm_mailbox_list_iter_deinit(&iter) < 0)
6c00502d4ece417ead501db8f0ee3e8287ba4459Timo Sirainenstatic void cmd_mailbox_status_init(struct doveadm_mail_cmd_context *_ctx,
6c00502d4ece417ead501db8f0ee3e8287ba4459Timo Sirainen const char *const args[])
643a81fff9003cba13deb49a565a3c8171da524dTimo Sirainen struct status_cmd_context *ctx = (struct status_cmd_context *)_ctx;
6c00502d4ece417ead501db8f0ee3e8287ba4459Timo Sirainen status_parse_fields(ctx, t_strsplit_spaces(fields, " "));
6c00502d4ece417ead501db8f0ee3e8287ba4459Timo Sirainen ctx->search_args = doveadm_mail_mailbox_search_args_build(args+1);
6c00502d4ece417ead501db8f0ee3e8287ba4459Timo Sirainen if ((ctx->status_items & STATUS_MESSAGES) != 0)
fcaf124d4a727424a338cccfd4274c2393818cd3Timo Sirainen if ((ctx->status_items & STATUS_UIDNEXT) != 0)
return FALSE;
return TRUE;