cmd-thread.c revision 2f25f180578a4c280c9f5fda1cb9f22410084a1e
45312f52ff3a3d4c137447be4c7556500c2f8bf2Timo Sirainen/* Copyright (c) 2002-2009 Dovecot authors, see the included COPYING file */
d48a2f3288eba53dd10d9d8029ec583d78a977e0Timo Sirainenstatic int imap_thread_write(struct mail_thread_iterate_context *iter,
137c1851d63c6575ebab35d261380423c4cf2b47Timo Sirainen struct mail_thread_iterate_context *child_iter;
137c1851d63c6575ebab35d261380423c4cf2b47Timo Sirainen unsigned int count;
137c1851d63c6575ebab35d261380423c4cf2b47Timo Sirainen /* only one child - special case to avoid extra paranthesis */
137c1851d63c6575ebab35d261380423c4cf2b47Timo Sirainen node = mail_thread_iterate_next(iter, &child_iter);
85144b5f0bc763de14c7d87291a90ef74ac241a2Timo Sirainen ret = imap_thread_write(child_iter, str, FALSE);
d48a2f3288eba53dd10d9d8029ec583d78a977e0Timo Sirainen if (mail_thread_iterate_deinit(&child_iter) < 0)
d48a2f3288eba53dd10d9d8029ec583d78a977e0Timo Sirainen while ((node = mail_thread_iterate_next(iter, &child_iter)) != NULL) {
d48a2f3288eba53dd10d9d8029ec583d78a977e0Timo Sirainen /* no children */
db87d16551d1081ada01f787ea21aa3ed1402c31Timo Sirainen /* node with children */
85144b5f0bc763de14c7d87291a90ef74ac241a2Timo Sirainen ret = imap_thread_write(child_iter, str, FALSE);
85144b5f0bc763de14c7d87291a90ef74ac241a2Timo Sirainen if (mail_thread_iterate_deinit(&child_iter) < 0 ||
137c1851d63c6575ebab35d261380423c4cf2b47Timo Sirainenimap_thread_write_reply(struct mail_thread_context *ctx, string_t *str,
2a6af811ea3de3cf9e2f15e446674dd21b0705f3Timo Sirainen enum mail_thread_type thread_type, bool write_seqs)
137c1851d63c6575ebab35d261380423c4cf2b47Timo Sirainen iter = mail_thread_iterate_init(ctx, thread_type, write_seqs);
137c1851d63c6575ebab35d261380423c4cf2b47Timo Sirainenstatic int imap_thread(struct client_command_context *cmd,
137c1851d63c6575ebab35d261380423c4cf2b47Timo Sirainen i_assert(thread_type == MAIL_THREAD_REFERENCES ||
0d0451206a91e9f96e522075dce28a89adc2325dTimo Sirainen ret = imap_thread_write_reply(ctx, str, thread_type,
a23197a5232f34121b1d32b73f2279c5d2f4491cTimo Sirainenbool cmd_thread(struct client_command_context *cmd)
2a6af811ea3de3cf9e2f15e446674dd21b0705f3Timo Sirainen if (args->type != IMAP_ARG_ATOM && args->type != IMAP_ARG_STRING) {
51795bfe9d05d92fe942cb451aec2b9d16d32a11Timo Sirainen "Invalid thread algorithm argument.");
137c1851d63c6575ebab35d261380423c4cf2b47Timo Sirainen if (!mail_thread_type_parse(str, &thread_type)) {
137c1851d63c6575ebab35d261380423c4cf2b47Timo Sirainen client_send_command_error(cmd, "Unknown thread algorithm.");
2a6af811ea3de3cf9e2f15e446674dd21b0705f3Timo Sirainen /* charset */
9b5a8e766112d24c12499aca85da5ddf24baad25Timo Sirainen if (args->type != IMAP_ARG_ATOM && args->type != IMAP_ARG_STRING) {
9b5a8e766112d24c12499aca85da5ddf24baad25Timo Sirainen client_send_command_error(cmd, "Invalid charset argument.");
9b5a8e766112d24c12499aca85da5ddf24baad25Timo Sirainen ret = imap_search_args_build(cmd, args, charset, &sargs);
6ef7e31619edfaa17ed044b45861d106a86191efTimo Sirainen (cmd->uid ? 0 : MAILBOX_SYNC_FLAG_NO_EXPUNGES),
d48a2f3288eba53dd10d9d8029ec583d78a977e0Timo Sirainen 0, "OK Thread completed.");