cmd-status.c revision 4525c4a8f8d1a6365e4469c0c8f46575400a9a67
bcb4e51a409d94ae670de96afb8483a4f7855294Stephan Bosch/* Copyright (C) 2002 Timo Sirainen */
7a896d960824c93e2f04ac21e8eae0f892bf8d20Timo Sirainen/* Returns status items, or -1 if error */
7a896d960824c93e2f04ac21e8eae0f892bf8d20Timo Sirainenstatic MailboxStatusItems get_status_items(Client *client, ImapArg *args)
7a896d960824c93e2f04ac21e8eae0f892bf8d20Timo Sirainen /* list may contain only atoms */
7a896d960824c93e2f04ac21e8eae0f892bf8d20Timo Sirainen "Status list contains non-atoms.");
7a896d960824c93e2f04ac21e8eae0f892bf8d20Timo Sirainenstatic int mailbox_name_equals(const char *box1, const char *box2)
7a896d960824c93e2f04ac21e8eae0f892bf8d20Timo Sirainen return strcasecmp(box1, "INBOX") == 0 && strcasecmp(box2, "INBOX") == 0;
12f0c4396d2d9c02b7d5e070aaf64fed5853e9bfAki Tuomistatic int get_mailbox_status(Client *client, const char *mailbox,
7a896d960824c93e2f04ac21e8eae0f892bf8d20Timo Sirainen mailbox_name_equals(client->mailbox->name, mailbox)) {
7a896d960824c93e2f04ac21e8eae0f892bf8d20Timo Sirainen /* this mailbox is selected */
7a896d960824c93e2f04ac21e8eae0f892bf8d20Timo Sirainen /* open the mailbox */
7a896d960824c93e2f04ac21e8eae0f892bf8d20Timo Sirainen box = client->storage->open_mailbox(client->storage,
7a896d960824c93e2f04ac21e8eae0f892bf8d20Timo Sirainen failed = !box->get_status(box, items, status);
7a896d960824c93e2f04ac21e8eae0f892bf8d20Timo Sirainen /* <mailbox> <status items> */
7a896d960824c93e2f04ac21e8eae0f892bf8d20Timo Sirainen if (mailbox == NULL || args[1].type != IMAP_ARG_LIST) {
7a896d960824c93e2f04ac21e8eae0f892bf8d20Timo Sirainen client_send_command_error(client, "Status items must be list.");
7a896d960824c93e2f04ac21e8eae0f892bf8d20Timo Sirainen /* get the items client wants */
7a896d960824c93e2f04ac21e8eae0f892bf8d20Timo Sirainen items = get_status_items(client, IMAP_ARG_LIST(&args[1])->args);
7a896d960824c93e2f04ac21e8eae0f892bf8d20Timo Sirainen /* get status */
7a896d960824c93e2f04ac21e8eae0f892bf8d20Timo Sirainen if (!get_mailbox_status(client, mailbox, items, &status)) {
7a896d960824c93e2f04ac21e8eae0f892bf8d20Timo Sirainen str_printfa(str, "MESSAGES %u ", status.messages);
7a896d960824c93e2f04ac21e8eae0f892bf8d20Timo Sirainen str_printfa(str, "RECENT %u ", status.recent);
7a896d960824c93e2f04ac21e8eae0f892bf8d20Timo Sirainen str_printfa(str, "UIDNEXT %u ", status.uidnext);
7a896d960824c93e2f04ac21e8eae0f892bf8d20Timo Sirainen str_printfa(str, "UIDVALIDITY %u ", status.uidvalidity);
7a896d960824c93e2f04ac21e8eae0f892bf8d20Timo Sirainen str_printfa(str, "UNSEEN %u ", status.unseen);
7a896d960824c93e2f04ac21e8eae0f892bf8d20Timo Sirainen client_send_tagline(client, "OK Status completed.");