Diffstat (limited to 'kmicromail/libetpan/tests/frm-simple.c') (more/less context) (ignore whitespace changes)
-rw-r--r-- | kmicromail/libetpan/tests/frm-simple.c | 227 |
1 files changed, 227 insertions, 0 deletions
diff --git a/kmicromail/libetpan/tests/frm-simple.c b/kmicromail/libetpan/tests/frm-simple.c new file mode 100644 index 0000000..7c3640f --- a/dev/null +++ b/kmicromail/libetpan/tests/frm-simple.c | |||
@@ -0,0 +1,227 @@ | |||
1 | #include "option-parser.h" | ||
2 | #include "frm-common.h" | ||
3 | |||
4 | #include <libetpan/libetpan.h> | ||
5 | |||
6 | #include <stdlib.h> | ||
7 | #include <string.h> | ||
8 | |||
9 | #define DEST_CHARSET "iso-8859-1" | ||
10 | |||
11 | #define MAX_OUTPUT 81 | ||
12 | |||
13 | /* display information for one message */ | ||
14 | |||
15 | static void simple_print_mail_info(mailmessage * msg) | ||
16 | { | ||
17 | char * from; | ||
18 | char * subject; | ||
19 | int is_addr; | ||
20 | char * dsp_from; | ||
21 | char * dsp_subject; | ||
22 | char output[MAX_OUTPUT]; | ||
23 | struct mailimf_single_fields single_fields; | ||
24 | |||
25 | is_addr = 0; | ||
26 | from = NULL; | ||
27 | subject = NULL; | ||
28 | |||
29 | if (msg->msg_fields != NULL) | ||
30 | mailimf_single_fields_init(&single_fields, msg->msg_fields); | ||
31 | else | ||
32 | memset(&single_fields, 0, sizeof(single_fields)); | ||
33 | |||
34 | /* from field */ | ||
35 | |||
36 | get_from_value(&single_fields, &from, &is_addr); | ||
37 | |||
38 | if (from == NULL) | ||
39 | dsp_from = strdup(""); | ||
40 | else | ||
41 | dsp_from = strdup(from); | ||
42 | if (dsp_from == NULL) | ||
43 | goto err; | ||
44 | |||
45 | strip_crlf(dsp_from); | ||
46 | |||
47 | /* subject */ | ||
48 | |||
49 | if (single_fields.fld_subject != NULL) | ||
50 | subject = single_fields.fld_subject->sbj_value; | ||
51 | |||
52 | if (subject == NULL) | ||
53 | dsp_subject = strdup(""); | ||
54 | else | ||
55 | dsp_subject = strdup(subject); | ||
56 | |||
57 | if (dsp_subject == NULL) | ||
58 | goto free_from; | ||
59 | |||
60 | strip_crlf(dsp_subject); | ||
61 | |||
62 | snprintf(output, MAX_OUTPUT, "%3i: %-21.21s %-53.53s\n", | ||
63 | msg->msg_index % 1000, dsp_from, dsp_subject); | ||
64 | |||
65 | printf("%s\n", output); | ||
66 | |||
67 | free(dsp_subject); | ||
68 | free(dsp_from); | ||
69 | |||
70 | return; | ||
71 | |||
72 | free_from: | ||
73 | free(dsp_from); | ||
74 | err: | ||
75 | } | ||
76 | |||
77 | /* get the message list and display it */ | ||
78 | |||
79 | static void print_message_list(mailsession * session) | ||
80 | { | ||
81 | int r; | ||
82 | uint32_t i; | ||
83 | struct mailmessage_list * env_list; | ||
84 | unsigned int count; | ||
85 | |||
86 | /* get the list of messages numbers of the folder */ | ||
87 | |||
88 | r = mailsession_get_messages_list(session, &env_list); | ||
89 | if (r != MAIL_NO_ERROR) { | ||
90 | printf("error message list\n"); | ||
91 | goto err; | ||
92 | } | ||
93 | |||
94 | /* get fields content of these messages */ | ||
95 | |||
96 | r = mailsession_get_envelopes_list(session, env_list); | ||
97 | if (r != MAIL_NO_ERROR) { | ||
98 | printf("error envelopes list\n"); | ||
99 | goto free_msg_list; | ||
100 | } | ||
101 | |||
102 | /* display all the messages */ | ||
103 | |||
104 | count = 0; | ||
105 | for(i = 0 ; i < carray_count(env_list->msg_tab) ; i ++) { | ||
106 | mailmessage * msg; | ||
107 | |||
108 | msg = carray_get(env_list->msg_tab, i); | ||
109 | |||
110 | if (msg->msg_fields == NULL) { | ||
111 | printf("could not fetch envelope of message %i\n", i); | ||
112 | } | ||
113 | else { | ||
114 | simple_print_mail_info(msg); | ||
115 | count ++; | ||
116 | } | ||
117 | } | ||
118 | printf(" %i messages\n", count); | ||
119 | |||
120 | /* free structure */ | ||
121 | |||
122 | mailmessage_list_free(env_list); | ||
123 | |||
124 | return; | ||
125 | |||
126 | free_msg_list: | ||
127 | mailmessage_list_free(env_list); | ||
128 | err: | ||
129 | } | ||
130 | |||
131 | int main(int argc, char ** argv) | ||
132 | { | ||
133 | int r; | ||
134 | int driver; | ||
135 | char * server; | ||
136 | int port; | ||
137 | int connection_type; | ||
138 | char * user; | ||
139 | char * password; | ||
140 | int auth_type; | ||
141 | char * path; | ||
142 | char * cache_directory; | ||
143 | char * flags_directory; | ||
144 | struct mailstorage * storage; | ||
145 | int cached; | ||
146 | struct mailfolder * folder; | ||
147 | |||
148 | /* get options */ | ||
149 | |||
150 | r = parse_options(argc, argv, | ||
151 | &driver, &server, &port, &connection_type, | ||
152 | &user, &password, &auth_type, | ||
153 | &path, &cache_directory, &flags_directory); | ||
154 | |||
155 | cached = (cache_directory != NULL); | ||
156 | |||
157 | /* build the storage structure */ | ||
158 | |||
159 | storage = mailstorage_new(NULL); | ||
160 | if (storage == NULL) { | ||
161 | printf("error initializing storage\n"); | ||
162 | goto free_opt; | ||
163 | } | ||
164 | |||
165 | r = init_storage(storage, driver, server, port, connection_type, | ||
166 | user, password, auth_type, path, cache_directory, flags_directory); | ||
167 | if (r != MAIL_NO_ERROR) { | ||
168 | printf("error initializing storage\n"); | ||
169 | goto free_opt; | ||
170 | } | ||
171 | |||
172 | /* get the folder structure */ | ||
173 | |||
174 | folder = mailfolder_new(storage, path, NULL); | ||
175 | if (folder == NULL) { | ||
176 | printf("error initializing folder\n"); | ||
177 | goto free_storage; | ||
178 | } | ||
179 | |||
180 | r = mailfolder_connect(folder); | ||
181 | if (r != MAIL_NO_ERROR) { | ||
182 | printf("error initializing folder\n"); | ||
183 | goto free_folder; | ||
184 | } | ||
185 | |||
186 | /* get and display the list of messages */ | ||
187 | |||
188 | print_message_list(folder->fld_session); | ||
189 | |||
190 | mailfolder_free(folder); | ||
191 | mailstorage_free(storage); | ||
192 | |||
193 | if (server != NULL) | ||
194 | free(server); | ||
195 | if (user != NULL) | ||
196 | free(user); | ||
197 | if (password != NULL) | ||
198 | free(password); | ||
199 | if (path != NULL) | ||
200 | free(path); | ||
201 | if (cache_directory != NULL) | ||
202 | free(cache_directory); | ||
203 | if (flags_directory != NULL) | ||
204 | free(flags_directory); | ||
205 | |||
206 | return 0; | ||
207 | |||
208 | free_folder: | ||
209 | mailfolder_free(folder); | ||
210 | free_storage: | ||
211 | mailstorage_free(storage); | ||
212 | free_opt: | ||
213 | if (server != NULL) | ||
214 | free(server); | ||
215 | if (user != NULL) | ||
216 | free(user); | ||
217 | if (password != NULL) | ||
218 | free(password); | ||
219 | if (path != NULL) | ||
220 | free(path); | ||
221 | if (cache_directory != NULL) | ||
222 | free(cache_directory); | ||
223 | if (flags_directory != NULL) | ||
224 | free(flags_directory); | ||
225 | return -1; | ||
226 | } | ||
227 | |||