summaryrefslogtreecommitdiffabout
path: root/kmicromail/libetpan/tests/frm-simple.c
Unidiff
Diffstat (limited to 'kmicromail/libetpan/tests/frm-simple.c') (more/less context) (ignore whitespace changes)
-rw-r--r--kmicromail/libetpan/tests/frm-simple.c227
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
15static 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
79static 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
131int 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