summaryrefslogtreecommitdiffabout
path: root/kmicromail/libetpan/tests/frm-simple.c
Side-by-side diff
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 @@
+#include "option-parser.h"
+#include "frm-common.h"
+
+#include <libetpan/libetpan.h>
+
+#include <stdlib.h>
+#include <string.h>
+
+#define DEST_CHARSET "iso-8859-1"
+
+#define MAX_OUTPUT 81
+
+/* display information for one message */
+
+static void simple_print_mail_info(mailmessage * msg)
+{
+ char * from;
+ char * subject;
+ int is_addr;
+ char * dsp_from;
+ char * dsp_subject;
+ char output[MAX_OUTPUT];
+ struct mailimf_single_fields single_fields;
+
+ is_addr = 0;
+ from = NULL;
+ subject = NULL;
+
+ if (msg->msg_fields != NULL)
+ mailimf_single_fields_init(&single_fields, msg->msg_fields);
+ else
+ memset(&single_fields, 0, sizeof(single_fields));
+
+ /* from field */
+
+ get_from_value(&single_fields, &from, &is_addr);
+
+ if (from == NULL)
+ dsp_from = strdup("");
+ else
+ dsp_from = strdup(from);
+ if (dsp_from == NULL)
+ goto err;
+
+ strip_crlf(dsp_from);
+
+ /* subject */
+
+ if (single_fields.fld_subject != NULL)
+ subject = single_fields.fld_subject->sbj_value;
+
+ if (subject == NULL)
+ dsp_subject = strdup("");
+ else
+ dsp_subject = strdup(subject);
+
+ if (dsp_subject == NULL)
+ goto free_from;
+
+ strip_crlf(dsp_subject);
+
+ snprintf(output, MAX_OUTPUT, "%3i: %-21.21s %-53.53s\n",
+ msg->msg_index % 1000, dsp_from, dsp_subject);
+
+ printf("%s\n", output);
+
+ free(dsp_subject);
+ free(dsp_from);
+
+ return;
+
+ free_from:
+ free(dsp_from);
+ err:
+}
+
+/* get the message list and display it */
+
+static void print_message_list(mailsession * session)
+{
+ int r;
+ uint32_t i;
+ struct mailmessage_list * env_list;
+ unsigned int count;
+
+ /* get the list of messages numbers of the folder */
+
+ r = mailsession_get_messages_list(session, &env_list);
+ if (r != MAIL_NO_ERROR) {
+ printf("error message list\n");
+ goto err;
+ }
+
+ /* get fields content of these messages */
+
+ r = mailsession_get_envelopes_list(session, env_list);
+ if (r != MAIL_NO_ERROR) {
+ printf("error envelopes list\n");
+ goto free_msg_list;
+ }
+
+ /* display all the messages */
+
+ count = 0;
+ for(i = 0 ; i < carray_count(env_list->msg_tab) ; i ++) {
+ mailmessage * msg;
+
+ msg = carray_get(env_list->msg_tab, i);
+
+ if (msg->msg_fields == NULL) {
+ printf("could not fetch envelope of message %i\n", i);
+ }
+ else {
+ simple_print_mail_info(msg);
+ count ++;
+ }
+ }
+ printf(" %i messages\n", count);
+
+ /* free structure */
+
+ mailmessage_list_free(env_list);
+
+ return;
+
+ free_msg_list:
+ mailmessage_list_free(env_list);
+ err:
+}
+
+int main(int argc, char ** argv)
+{
+ int r;
+ int driver;
+ char * server;
+ int port;
+ int connection_type;
+ char * user;
+ char * password;
+ int auth_type;
+ char * path;
+ char * cache_directory;
+ char * flags_directory;
+ struct mailstorage * storage;
+ int cached;
+ struct mailfolder * folder;
+
+ /* get options */
+
+ r = parse_options(argc, argv,
+ &driver, &server, &port, &connection_type,
+ &user, &password, &auth_type,
+ &path, &cache_directory, &flags_directory);
+
+ cached = (cache_directory != NULL);
+
+ /* build the storage structure */
+
+ storage = mailstorage_new(NULL);
+ if (storage == NULL) {
+ printf("error initializing storage\n");
+ goto free_opt;
+ }
+
+ r = init_storage(storage, driver, server, port, connection_type,
+ user, password, auth_type, path, cache_directory, flags_directory);
+ if (r != MAIL_NO_ERROR) {
+ printf("error initializing storage\n");
+ goto free_opt;
+ }
+
+ /* get the folder structure */
+
+ folder = mailfolder_new(storage, path, NULL);
+ if (folder == NULL) {
+ printf("error initializing folder\n");
+ goto free_storage;
+ }
+
+ r = mailfolder_connect(folder);
+ if (r != MAIL_NO_ERROR) {
+ printf("error initializing folder\n");
+ goto free_folder;
+ }
+
+ /* get and display the list of messages */
+
+ print_message_list(folder->fld_session);
+
+ mailfolder_free(folder);
+ mailstorage_free(storage);
+
+ if (server != NULL)
+ free(server);
+ if (user != NULL)
+ free(user);
+ if (password != NULL)
+ free(password);
+ if (path != NULL)
+ free(path);
+ if (cache_directory != NULL)
+ free(cache_directory);
+ if (flags_directory != NULL)
+ free(flags_directory);
+
+ return 0;
+
+ free_folder:
+ mailfolder_free(folder);
+ free_storage:
+ mailstorage_free(storage);
+ free_opt:
+ if (server != NULL)
+ free(server);
+ if (user != NULL)
+ free(user);
+ if (password != NULL)
+ free(password);
+ if (path != NULL)
+ free(path);
+ if (cache_directory != NULL)
+ free(cache_directory);
+ if (flags_directory != NULL)
+ free(flags_directory);
+ return -1;
+}
+