cmd-sort.c revision def516ea503a60f20d510c14d5070b7ff5bbddf4
02c335c23bf5fa225a467c19f2c063fb0dc7b8c3Timo Sirainen/* Copyright (C) 2002 Timo Sirainen */
c2cda8cd0043443566efc5da30f79865508a1947Timo Sirainentypedef struct {
e2ce8d4a6ac5d82a906178148453e7613fab9ba0Timo Sirainenstatic MailSortType *get_sort_program(Client *client, ImapArg *args)
e2ce8d4a6ac5d82a906178148453e7613fab9ba0Timo Sirainen buf = buffer_create_dynamic(data_stack_pool, 32 * sizeof(MailSortType),
cd56a23e21f1df3f79648cf07e2f4385e2fadebbTimo Sirainen while (args->type == IMAP_ARG_ATOM || args->type == IMAP_ARG_STRING) {
cd56a23e21f1df3f79648cf07e2f4385e2fadebbTimo Sirainen for (i = 0; sort_names[i].type != MAIL_SORT_END; i++) {
ecc81625167ed96c04c02aa190a1ea5baa65b474Timo Sirainen client_send_command_error(client, t_strconcat(
e0c3d5460d1cc0c440cb7723c8c2eef8d0afe9b9Timo Sirainen buffer_append(buf, &sort_names[i].type, sizeof(MailSortType));
5a1b498b646b5c5dbd1b3f3861df766f560578c5Timo Sirainen "Invalid sort list argument.");
eb98a038ca8b0ef33d1d11794803ce09547496faTimo Sirainen args_count = imap_parser_read_args(client->parser, 0, 0, &args);
ecc81625167ed96c04c02aa190a1ea5baa65b474Timo Sirainen "Missing or invalid arguments.");
862ec874f9373e3e499e237d3b9f71fdf1413feeTimo Sirainen /* sort program */
46ce4d9273e6df12ef1912bbdb1c8b84b104f394Timo Sirainen client_send_command_error(client, "Invalid sort argument.");
862ec874f9373e3e499e237d3b9f71fdf1413feeTimo Sirainen sorting = get_sort_program(client, args->data.list->args);
862ec874f9373e3e499e237d3b9f71fdf1413feeTimo Sirainen /* charset */
862ec874f9373e3e499e237d3b9f71fdf1413feeTimo Sirainen if (args->type != IMAP_ARG_ATOM && args->type != IMAP_ARG_STRING) {
862ec874f9373e3e499e237d3b9f71fdf1413feeTimo Sirainen "Invalid charset argument.");
ecc81625167ed96c04c02aa190a1ea5baa65b474Timo Sirainen pool = pool_create("MailSortArgs", 2048, FALSE);
7662010b03ffe5f2a6ecf4b4eb220d1c65efea76Timo Sirainen sargs = mail_search_args_build(pool, args, &error);
7662010b03ffe5f2a6ecf4b4eb220d1c65efea76Timo Sirainen /* error in search arguments */
7662010b03ffe5f2a6ecf4b4eb220d1c65efea76Timo Sirainen client_send_tagline(client, t_strconcat("NO ", error, NULL));
c0435c854a0e7246373b9752d163095cc4fbe985Timo Sirainen if (client->mailbox->search(client->mailbox, charset,
ecc81625167ed96c04c02aa190a1ea5baa65b474Timo Sirainen /* NOTE: syncing is allowed when returning UIDs */
0a49b316fc729e5d57268ffa63c7122ac73f994cTimo Sirainen client_send_tagline(client, "OK Search completed.");