Mercurial > dovecot > original-hg > dovecot-1.2
annotate src/imap/cmd-sort.c @ 8590:b9faf4db2a9f HEAD
Updated copyright notices to include year 2009.
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Tue, 06 Jan 2009 09:25:38 -0500 |
parents | 0a3b5ddb0869 |
children | bd2bb6ff0a83 |
rev | line source |
---|---|
8590
b9faf4db2a9f
Updated copyright notices to include year 2009.
Timo Sirainen <tss@iki.fi>
parents:
8006
diff
changeset
|
1 /* Copyright (c) 2002-2009 Dovecot authors, see the included COPYING file */ |
761
d3bd41a56309
First implementation of SORT extension. String comparing still not up to
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
2 |
d3bd41a56309
First implementation of SORT extension. String comparing still not up to
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
3 #include "common.h" |
765
553f050c8313
Added buffer API. Point is to hide all buffer writing behind this API which
Timo Sirainen <tss@iki.fi>
parents:
764
diff
changeset
|
4 #include "buffer.h" |
761
d3bd41a56309
First implementation of SORT extension. String comparing still not up to
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
5 #include "commands.h" |
988
8028c4dcf38f
mail-storage.h interface changes, affects pretty much everything.
Timo Sirainen <tss@iki.fi>
parents:
924
diff
changeset
|
6 #include "imap-search.h" |
8028c4dcf38f
mail-storage.h interface changes, affects pretty much everything.
Timo Sirainen <tss@iki.fi>
parents:
924
diff
changeset
|
7 #include "imap-sort.h" |
761
d3bd41a56309
First implementation of SORT extension. String comparing still not up to
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
8 |
903
fd8888f6f037
Naming style changes, finally got tired of most of the typedefs. Also the
Timo Sirainen <tss@iki.fi>
parents:
877
diff
changeset
|
9 struct sort_name { |
fd8888f6f037
Naming style changes, finally got tired of most of the typedefs. Also the
Timo Sirainen <tss@iki.fi>
parents:
877
diff
changeset
|
10 enum mail_sort_type type; |
761
d3bd41a56309
First implementation of SORT extension. String comparing still not up to
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
11 const char *name; |
903
fd8888f6f037
Naming style changes, finally got tired of most of the typedefs. Also the
Timo Sirainen <tss@iki.fi>
parents:
877
diff
changeset
|
12 }; |
761
d3bd41a56309
First implementation of SORT extension. String comparing still not up to
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
13 |
903
fd8888f6f037
Naming style changes, finally got tired of most of the typedefs. Also the
Timo Sirainen <tss@iki.fi>
parents:
877
diff
changeset
|
14 static struct sort_name sort_names[] = { |
8006
0a3b5ddb0869
Added support for sorting by X-SCORE. Currently it's only set by fts-solr.
Timo Sirainen <tss@iki.fi>
parents:
8005
diff
changeset
|
15 { MAIL_SORT_ARRIVAL, "arrival" }, |
0a3b5ddb0869
Added support for sorting by X-SCORE. Currently it's only set by fts-solr.
Timo Sirainen <tss@iki.fi>
parents:
8005
diff
changeset
|
16 { MAIL_SORT_CC, "cc" }, |
0a3b5ddb0869
Added support for sorting by X-SCORE. Currently it's only set by fts-solr.
Timo Sirainen <tss@iki.fi>
parents:
8005
diff
changeset
|
17 { MAIL_SORT_DATE, "date" }, |
0a3b5ddb0869
Added support for sorting by X-SCORE. Currently it's only set by fts-solr.
Timo Sirainen <tss@iki.fi>
parents:
8005
diff
changeset
|
18 { MAIL_SORT_FROM, "from" }, |
0a3b5ddb0869
Added support for sorting by X-SCORE. Currently it's only set by fts-solr.
Timo Sirainen <tss@iki.fi>
parents:
8005
diff
changeset
|
19 { MAIL_SORT_SIZE, "size" }, |
0a3b5ddb0869
Added support for sorting by X-SCORE. Currently it's only set by fts-solr.
Timo Sirainen <tss@iki.fi>
parents:
8005
diff
changeset
|
20 { MAIL_SORT_SUBJECT, "subject" }, |
0a3b5ddb0869
Added support for sorting by X-SCORE. Currently it's only set by fts-solr.
Timo Sirainen <tss@iki.fi>
parents:
8005
diff
changeset
|
21 { MAIL_SORT_TO, "to" }, |
0a3b5ddb0869
Added support for sorting by X-SCORE. Currently it's only set by fts-solr.
Timo Sirainen <tss@iki.fi>
parents:
8005
diff
changeset
|
22 { MAIL_SORT_SEARCH_SCORE, "x-score" }, |
761
d3bd41a56309
First implementation of SORT extension. String comparing still not up to
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
23 |
8006
0a3b5ddb0869
Added support for sorting by X-SCORE. Currently it's only set by fts-solr.
Timo Sirainen <tss@iki.fi>
parents:
8005
diff
changeset
|
24 { MAIL_SORT_END, NULL } |
761
d3bd41a56309
First implementation of SORT extension. String comparing still not up to
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
25 }; |
d3bd41a56309
First implementation of SORT extension. String comparing still not up to
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
26 |
4303
5f03738219a6
Changed mail-storage API to do the mail sorting internally. Optimized it
Timo Sirainen <timo.sirainen@movial.fi>
parents:
3863
diff
changeset
|
27 static int |
5835
d59ed6a31b66
Added more consts to imap-parser API
Timo Sirainen <tss@iki.fi>
parents:
4939
diff
changeset
|
28 get_sort_program(struct client_command_context *cmd, |
d59ed6a31b66
Added more consts to imap-parser API
Timo Sirainen <tss@iki.fi>
parents:
4939
diff
changeset
|
29 const struct imap_arg *args, |
4303
5f03738219a6
Changed mail-storage API to do the mail sorting internally. Optimized it
Timo Sirainen <timo.sirainen@movial.fi>
parents:
3863
diff
changeset
|
30 enum mail_sort_type program[MAX_SORT_PROGRAM_SIZE]) |
761
d3bd41a56309
First implementation of SORT extension. String comparing still not up to
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
31 { |
4303
5f03738219a6
Changed mail-storage API to do the mail sorting internally. Optimized it
Timo Sirainen <timo.sirainen@movial.fi>
parents:
3863
diff
changeset
|
32 enum mail_sort_type mask = 0; |
5f03738219a6
Changed mail-storage API to do the mail sorting internally. Optimized it
Timo Sirainen <timo.sirainen@movial.fi>
parents:
3863
diff
changeset
|
33 unsigned int i, pos; |
8005
67eb95aa7293
SORT: Return BAD if sort program ends with REVERSE.
Timo Sirainen <tss@iki.fi>
parents:
7798
diff
changeset
|
34 bool reverse, last_reverse; |
761
d3bd41a56309
First implementation of SORT extension. String comparing still not up to
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
35 |
1012
b2d9219c60af
Give nice error message for "SORT ()"
Timo Sirainen <tss@iki.fi>
parents:
988
diff
changeset
|
36 if (args->type == IMAP_ARG_EOL) { |
b2d9219c60af
Give nice error message for "SORT ()"
Timo Sirainen <tss@iki.fi>
parents:
988
diff
changeset
|
37 /* empyty list */ |
3141
61abed5f7864
Moved command-specific variables from struct client to struct
Timo Sirainen <tss@iki.fi>
parents:
2708
diff
changeset
|
38 client_send_command_error(cmd, "Empty sort program."); |
4303
5f03738219a6
Changed mail-storage API to do the mail sorting internally. Optimized it
Timo Sirainen <timo.sirainen@movial.fi>
parents:
3863
diff
changeset
|
39 return -1; |
1012
b2d9219c60af
Give nice error message for "SORT ()"
Timo Sirainen <tss@iki.fi>
parents:
988
diff
changeset
|
40 } |
b2d9219c60af
Give nice error message for "SORT ()"
Timo Sirainen <tss@iki.fi>
parents:
988
diff
changeset
|
41 |
8005
67eb95aa7293
SORT: Return BAD if sort program ends with REVERSE.
Timo Sirainen <tss@iki.fi>
parents:
7798
diff
changeset
|
42 pos = 0; reverse = last_reverse = FALSE; |
4303
5f03738219a6
Changed mail-storage API to do the mail sorting internally. Optimized it
Timo Sirainen <timo.sirainen@movial.fi>
parents:
3863
diff
changeset
|
43 for (; args->type == IMAP_ARG_ATOM || args->type == IMAP_ARG_STRING; |
5f03738219a6
Changed mail-storage API to do the mail sorting internally. Optimized it
Timo Sirainen <timo.sirainen@movial.fi>
parents:
3863
diff
changeset
|
44 args++) { |
5f03738219a6
Changed mail-storage API to do the mail sorting internally. Optimized it
Timo Sirainen <timo.sirainen@movial.fi>
parents:
3863
diff
changeset
|
45 const char *arg = IMAP_ARG_STR(args); |
761
d3bd41a56309
First implementation of SORT extension. String comparing still not up to
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
46 |
8005
67eb95aa7293
SORT: Return BAD if sort program ends with REVERSE.
Timo Sirainen <tss@iki.fi>
parents:
7798
diff
changeset
|
47 last_reverse = strcasecmp(arg, "reverse") == 0; |
67eb95aa7293
SORT: Return BAD if sort program ends with REVERSE.
Timo Sirainen <tss@iki.fi>
parents:
7798
diff
changeset
|
48 if (last_reverse) { |
4303
5f03738219a6
Changed mail-storage API to do the mail sorting internally. Optimized it
Timo Sirainen <timo.sirainen@movial.fi>
parents:
3863
diff
changeset
|
49 reverse = !reverse; |
5f03738219a6
Changed mail-storage API to do the mail sorting internally. Optimized it
Timo Sirainen <timo.sirainen@movial.fi>
parents:
3863
diff
changeset
|
50 continue; |
5f03738219a6
Changed mail-storage API to do the mail sorting internally. Optimized it
Timo Sirainen <timo.sirainen@movial.fi>
parents:
3863
diff
changeset
|
51 } |
761
d3bd41a56309
First implementation of SORT extension. String comparing still not up to
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
52 |
d3bd41a56309
First implementation of SORT extension. String comparing still not up to
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
53 for (i = 0; sort_names[i].type != MAIL_SORT_END; i++) { |
d3bd41a56309
First implementation of SORT extension. String comparing still not up to
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
54 if (strcasecmp(arg, sort_names[i].name) == 0) |
d3bd41a56309
First implementation of SORT extension. String comparing still not up to
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
55 break; |
d3bd41a56309
First implementation of SORT extension. String comparing still not up to
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
56 } |
d3bd41a56309
First implementation of SORT extension. String comparing still not up to
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
57 |
d3bd41a56309
First implementation of SORT extension. String comparing still not up to
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
58 if (sort_names[i].type == MAIL_SORT_END) { |
3141
61abed5f7864
Moved command-specific variables from struct client to struct
Timo Sirainen <tss@iki.fi>
parents:
2708
diff
changeset
|
59 client_send_command_error(cmd, t_strconcat( |
761
d3bd41a56309
First implementation of SORT extension. String comparing still not up to
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
60 "Unknown sort argument: ", arg, NULL)); |
4303
5f03738219a6
Changed mail-storage API to do the mail sorting internally. Optimized it
Timo Sirainen <timo.sirainen@movial.fi>
parents:
3863
diff
changeset
|
61 return -1; |
761
d3bd41a56309
First implementation of SORT extension. String comparing still not up to
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
62 } |
d3bd41a56309
First implementation of SORT extension. String comparing still not up to
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
63 |
4303
5f03738219a6
Changed mail-storage API to do the mail sorting internally. Optimized it
Timo Sirainen <timo.sirainen@movial.fi>
parents:
3863
diff
changeset
|
64 if ((mask & sort_names[i].type) != 0) |
5f03738219a6
Changed mail-storage API to do the mail sorting internally. Optimized it
Timo Sirainen <timo.sirainen@movial.fi>
parents:
3863
diff
changeset
|
65 continue; |
5f03738219a6
Changed mail-storage API to do the mail sorting internally. Optimized it
Timo Sirainen <timo.sirainen@movial.fi>
parents:
3863
diff
changeset
|
66 mask |= sort_names[i].type; |
5f03738219a6
Changed mail-storage API to do the mail sorting internally. Optimized it
Timo Sirainen <timo.sirainen@movial.fi>
parents:
3863
diff
changeset
|
67 |
5f03738219a6
Changed mail-storage API to do the mail sorting internally. Optimized it
Timo Sirainen <timo.sirainen@movial.fi>
parents:
3863
diff
changeset
|
68 /* @UNSAFE: mask check should prevent us from ever |
5f03738219a6
Changed mail-storage API to do the mail sorting internally. Optimized it
Timo Sirainen <timo.sirainen@movial.fi>
parents:
3863
diff
changeset
|
69 overflowing */ |
5f03738219a6
Changed mail-storage API to do the mail sorting internally. Optimized it
Timo Sirainen <timo.sirainen@movial.fi>
parents:
3863
diff
changeset
|
70 i_assert(pos < MAX_SORT_PROGRAM_SIZE-1); |
5f03738219a6
Changed mail-storage API to do the mail sorting internally. Optimized it
Timo Sirainen <timo.sirainen@movial.fi>
parents:
3863
diff
changeset
|
71 program[pos++] = sort_names[i].type | |
5f03738219a6
Changed mail-storage API to do the mail sorting internally. Optimized it
Timo Sirainen <timo.sirainen@movial.fi>
parents:
3863
diff
changeset
|
72 (reverse ? MAIL_SORT_FLAG_REVERSE : 0); |
5f03738219a6
Changed mail-storage API to do the mail sorting internally. Optimized it
Timo Sirainen <timo.sirainen@movial.fi>
parents:
3863
diff
changeset
|
73 reverse = FALSE; |
761
d3bd41a56309
First implementation of SORT extension. String comparing still not up to
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
74 } |
8005
67eb95aa7293
SORT: Return BAD if sort program ends with REVERSE.
Timo Sirainen <tss@iki.fi>
parents:
7798
diff
changeset
|
75 if (last_reverse) { |
67eb95aa7293
SORT: Return BAD if sort program ends with REVERSE.
Timo Sirainen <tss@iki.fi>
parents:
7798
diff
changeset
|
76 client_send_command_error(cmd, "Sort list ends with REVERSE."); |
67eb95aa7293
SORT: Return BAD if sort program ends with REVERSE.
Timo Sirainen <tss@iki.fi>
parents:
7798
diff
changeset
|
77 return -1; |
67eb95aa7293
SORT: Return BAD if sort program ends with REVERSE.
Timo Sirainen <tss@iki.fi>
parents:
7798
diff
changeset
|
78 } |
4303
5f03738219a6
Changed mail-storage API to do the mail sorting internally. Optimized it
Timo Sirainen <timo.sirainen@movial.fi>
parents:
3863
diff
changeset
|
79 program[pos++] = MAIL_SORT_END; |
761
d3bd41a56309
First implementation of SORT extension. String comparing still not up to
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
80 |
d3bd41a56309
First implementation of SORT extension. String comparing still not up to
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
81 if (args->type != IMAP_ARG_EOL) { |
3141
61abed5f7864
Moved command-specific variables from struct client to struct
Timo Sirainen <tss@iki.fi>
parents:
2708
diff
changeset
|
82 client_send_command_error(cmd, |
761
d3bd41a56309
First implementation of SORT extension. String comparing still not up to
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
83 "Invalid sort list argument."); |
4303
5f03738219a6
Changed mail-storage API to do the mail sorting internally. Optimized it
Timo Sirainen <timo.sirainen@movial.fi>
parents:
3863
diff
changeset
|
84 return -1; |
761
d3bd41a56309
First implementation of SORT extension. String comparing still not up to
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
85 } |
d3bd41a56309
First implementation of SORT extension. String comparing still not up to
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
86 |
4303
5f03738219a6
Changed mail-storage API to do the mail sorting internally. Optimized it
Timo Sirainen <timo.sirainen@movial.fi>
parents:
3863
diff
changeset
|
87 return 0; |
761
d3bd41a56309
First implementation of SORT extension. String comparing still not up to
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
88 } |
d3bd41a56309
First implementation of SORT extension. String comparing still not up to
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
89 |
3863
55df57c028d4
Added "bool" type and changed all ints that were used as booleans to bool.
Timo Sirainen <tss@iki.fi>
parents:
3765
diff
changeset
|
90 bool cmd_sort(struct client_command_context *cmd) |
761
d3bd41a56309
First implementation of SORT extension. String comparing still not up to
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
91 { |
3141
61abed5f7864
Moved command-specific variables from struct client to struct
Timo Sirainen <tss@iki.fi>
parents:
2708
diff
changeset
|
92 struct client *client = cmd->client; |
7642
077bb84e9e77
Make mail_search_args an independent structure that can be used for multiple
Timo Sirainen <tss@iki.fi>
parents:
7639
diff
changeset
|
93 struct mail_search_args *sargs; |
4303
5f03738219a6
Changed mail-storage API to do the mail sorting internally. Optimized it
Timo Sirainen <timo.sirainen@movial.fi>
parents:
3863
diff
changeset
|
94 enum mail_sort_type sorting[MAX_SORT_PROGRAM_SIZE]; |
5835
d59ed6a31b66
Added more consts to imap-parser API
Timo Sirainen <tss@iki.fi>
parents:
4939
diff
changeset
|
95 const struct imap_arg *args; |
761
d3bd41a56309
First implementation of SORT extension. String comparing still not up to
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
96 int args_count; |
7639
03146f02403f
Implemented SEARCHRES extension.
Timo Sirainen <tss@iki.fi>
parents:
7086
diff
changeset
|
97 const char *charset; |
03146f02403f
Implemented SEARCHRES extension.
Timo Sirainen <tss@iki.fi>
parents:
7086
diff
changeset
|
98 int ret; |
761
d3bd41a56309
First implementation of SORT extension. String comparing still not up to
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
99 |
4939
ff2272c228cc
Dovecot is now able to execute multiple commands at the same time.
Timo Sirainen <tss@iki.fi>
parents:
4303
diff
changeset
|
100 args_count = imap_parser_read_args(cmd->parser, 0, 0, &args); |
761
d3bd41a56309
First implementation of SORT extension. String comparing still not up to
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
101 if (args_count == -2) |
d3bd41a56309
First implementation of SORT extension. String comparing still not up to
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
102 return FALSE; |
4939
ff2272c228cc
Dovecot is now able to execute multiple commands at the same time.
Timo Sirainen <tss@iki.fi>
parents:
4303
diff
changeset
|
103 client->input_lock = NULL; |
761
d3bd41a56309
First implementation of SORT extension. String comparing still not up to
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
104 |
d3bd41a56309
First implementation of SORT extension. String comparing still not up to
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
105 if (args_count < 3) { |
3141
61abed5f7864
Moved command-specific variables from struct client to struct
Timo Sirainen <tss@iki.fi>
parents:
2708
diff
changeset
|
106 client_send_command_error(cmd, args_count < 0 ? NULL : |
761
d3bd41a56309
First implementation of SORT extension. String comparing still not up to
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
107 "Missing or invalid arguments."); |
d3bd41a56309
First implementation of SORT extension. String comparing still not up to
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
108 return TRUE; |
d3bd41a56309
First implementation of SORT extension. String comparing still not up to
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
109 } |
d3bd41a56309
First implementation of SORT extension. String comparing still not up to
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
110 |
3141
61abed5f7864
Moved command-specific variables from struct client to struct
Timo Sirainen <tss@iki.fi>
parents:
2708
diff
changeset
|
111 if (!client_verify_open_mailbox(cmd)) |
761
d3bd41a56309
First implementation of SORT extension. String comparing still not up to
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
112 return TRUE; |
d3bd41a56309
First implementation of SORT extension. String comparing still not up to
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
113 |
d3bd41a56309
First implementation of SORT extension. String comparing still not up to
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
114 /* sort program */ |
d3bd41a56309
First implementation of SORT extension. String comparing still not up to
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
115 if (args->type != IMAP_ARG_LIST) { |
3141
61abed5f7864
Moved command-specific variables from struct client to struct
Timo Sirainen <tss@iki.fi>
parents:
2708
diff
changeset
|
116 client_send_command_error(cmd, "Invalid sort argument."); |
761
d3bd41a56309
First implementation of SORT extension. String comparing still not up to
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
117 return TRUE; |
d3bd41a56309
First implementation of SORT extension. String comparing still not up to
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
118 } |
d3bd41a56309
First implementation of SORT extension. String comparing still not up to
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
119 |
5836
9f869a7a3d73
Changed imap-parser API to use standard arrays for lists instead of its own
Timo Sirainen <tss@iki.fi>
parents:
5835
diff
changeset
|
120 if (get_sort_program(cmd, IMAP_ARG_LIST_ARGS(args), sorting) < 0) |
761
d3bd41a56309
First implementation of SORT extension. String comparing still not up to
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
121 return TRUE; |
d3bd41a56309
First implementation of SORT extension. String comparing still not up to
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
122 args++; |
d3bd41a56309
First implementation of SORT extension. String comparing still not up to
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
123 |
d3bd41a56309
First implementation of SORT extension. String comparing still not up to
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
124 /* charset */ |
d3bd41a56309
First implementation of SORT extension. String comparing still not up to
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
125 if (args->type != IMAP_ARG_ATOM && args->type != IMAP_ARG_STRING) { |
3141
61abed5f7864
Moved command-specific variables from struct client to struct
Timo Sirainen <tss@iki.fi>
parents:
2708
diff
changeset
|
126 client_send_command_error(cmd, |
761
d3bd41a56309
First implementation of SORT extension. String comparing still not up to
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
127 "Invalid charset argument."); |
924
4f697dde0fca
THREAD=REFERENCES implementation. Doesn't crash, but I'm not sure how
Timo Sirainen <tss@iki.fi>
parents:
903
diff
changeset
|
128 return TRUE; |
761
d3bd41a56309
First implementation of SORT extension. String comparing still not up to
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
129 } |
877
7935347f54f1
Don't access ImapArg's union members directly - too easy to mess up. Fixes a
Timo Sirainen <tss@iki.fi>
parents:
825
diff
changeset
|
130 charset = IMAP_ARG_STR(args); |
761
d3bd41a56309
First implementation of SORT extension. String comparing still not up to
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
131 args++; |
d3bd41a56309
First implementation of SORT extension. String comparing still not up to
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
132 |
7642
077bb84e9e77
Make mail_search_args an independent structure that can be used for multiple
Timo Sirainen <tss@iki.fi>
parents:
7639
diff
changeset
|
133 ret = imap_search_args_build(cmd, args, charset, &sargs); |
7639
03146f02403f
Implemented SEARCHRES extension.
Timo Sirainen <tss@iki.fi>
parents:
7086
diff
changeset
|
134 if (ret <= 0) |
03146f02403f
Implemented SEARCHRES extension.
Timo Sirainen <tss@iki.fi>
parents:
7086
diff
changeset
|
135 return ret < 0; |
761
d3bd41a56309
First implementation of SORT extension. String comparing still not up to
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
136 |
7642
077bb84e9e77
Make mail_search_args an independent structure that can be used for multiple
Timo Sirainen <tss@iki.fi>
parents:
7639
diff
changeset
|
137 ret = imap_sort(cmd, sargs, sorting); |
077bb84e9e77
Make mail_search_args an independent structure that can be used for multiple
Timo Sirainen <tss@iki.fi>
parents:
7639
diff
changeset
|
138 mail_search_args_unref(&sargs); |
077bb84e9e77
Make mail_search_args an independent structure that can be used for multiple
Timo Sirainen <tss@iki.fi>
parents:
7639
diff
changeset
|
139 if (ret < 0) { |
3141
61abed5f7864
Moved command-specific variables from struct client to struct
Timo Sirainen <tss@iki.fi>
parents:
2708
diff
changeset
|
140 client_send_storage_error(cmd, |
1915
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
1782
diff
changeset
|
141 mailbox_get_storage(client->mailbox)); |
7639
03146f02403f
Implemented SEARCHRES extension.
Timo Sirainen <tss@iki.fi>
parents:
7086
diff
changeset
|
142 return TRUE; |
761
d3bd41a56309
First implementation of SORT extension. String comparing still not up to
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
143 } |
d3bd41a56309
First implementation of SORT extension. String comparing still not up to
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
144 |
7639
03146f02403f
Implemented SEARCHRES extension.
Timo Sirainen <tss@iki.fi>
parents:
7086
diff
changeset
|
145 return cmd_sync(cmd, MAILBOX_SYNC_FLAG_FAST | |
03146f02403f
Implemented SEARCHRES extension.
Timo Sirainen <tss@iki.fi>
parents:
7086
diff
changeset
|
146 (cmd->uid ? 0 : MAILBOX_SYNC_FLAG_NO_EXPUNGES), |
03146f02403f
Implemented SEARCHRES extension.
Timo Sirainen <tss@iki.fi>
parents:
7086
diff
changeset
|
147 0, "OK Sort completed."); |
761
d3bd41a56309
First implementation of SORT extension. String comparing still not up to
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
148 } |