diff options
author | Sergey Poznyakoff <gray@gnu.org.ua> | 2011-12-26 22:13:52 +0200 |
---|---|---|
committer | Sergey Poznyakoff <gray@gnu.org.ua> | 2011-12-26 22:13:52 +0200 |
commit | 0ff01881ca8dd159c2802751901644daef2bcc19 (patch) | |
tree | 4399705e5a34c9475341bbea54b58ca8ac2ec3b1 /mu | |
parent | 1c7d50a62de57fbb0552bcde955db928908b2a98 (diff) | |
download | mailutils-0ff01881ca8dd159c2802751901644daef2bcc19.tar.gz mailutils-0ff01881ca8dd159c2802751901644daef2bcc19.tar.bz2 |
Use mu_msgset_t in imap client for FETCH, STORE and COPY.
* include/mailutils/imap.h (mu_imap_fetch,mu_imap_store)
(mu_imap_store_flags,mu_imap_copy): Take mu_msgset_t as the
message set parameter.
* include/mailutils/imapio.h (mu_imapio_send_msgset): New proto.
(mu_imapio_send_command_v,mu_imapio_send_command)
(mu_imapio_send_command_e): Take additional mu_msgset_t parameter.
All uses changed.
* include/mailutils/msgset.h (mu_msgset_parse_imap): Input string
is const.
* include/mailutils/sys/imap.h (imap_command) <msgset>: New member.
* libmailutils/imapio/sendmsgset.c: New file.
* libmailutils/imapio/Makefile.am (libimapio_la_SOURCES): Add sendmsgset.c.
* libmailutils/imapio/sendcmd.c (mu_imapio_send_command): Take additional
mu_msgset_t parameter.
* libmailutils/imapio/sendcmde.c (mu_imapio_send_command_e): Likewise.
* libmailutils/imapio/sendcmdv.c (mu_imapio_send_command_v): Likewise.
* libmailutils/msgset/parse.c (mu_msgset_parse_imap): Input string
is const.
* libproto/imap/copy.c (mu_imap_copy): Take mu_msgset_t as the
message set parameter.
* libproto/imap/fetch.c (mu_imap_fetch): Likewise.
* libproto/imap/store.c (mu_imap_store): Likewise.
* libproto/imap/storeflg.c (mu_imap_store_flags): Likewise.
* libproto/imap/gencom.c (mu_imap_gencom): Send cmd->msgset.
Diffstat (limited to 'mu')
-rw-r--r-- | mu/imap.c | 76 |
1 files changed, 58 insertions, 18 deletions
@@ -27,6 +27,7 @@ #include <mailutils/imap.h> #include <mailutils/imapio.h> #include <mailutils/imaputil.h> +#include <mailutils/msgset.h> #include "mu.h" #include "argp.h" #include "xalloc.h" @@ -110,6 +111,29 @@ com_verbose (int argc, char **argv) } +static mu_msgset_t +parse_msgset (const char *arg) +{ + int status; + mu_msgset_t msgset; + char *p; + + status = mu_msgset_create (&msgset, NULL, 0); + if (status) + { + mu_diag_funcall (MU_DIAG_ERROR, "mu_msgset_create", NULL, status); + return NULL; + } + status = mu_msgset_parse_imap (msgset, arg, &p); + if (status) + { + mu_error (_("failed to parse message set near \"%s\": %s"), + p, mu_strerror (status)); + mu_msgset_destroy (&msgset); + } + return msgset; +} + static void report_failure (const char *what, int status) { @@ -898,28 +922,39 @@ com_check (int argc MU_ARG_UNUSED, char **argv MU_ARG_UNUSED) static int com_fetch (int argc, char **argv) { - int status; mu_stream_t out = mutool_open_pager (); - - mu_imap_register_callback_function (imap, MU_IMAP_CB_FETCH, - imap_fetch_callback, - out); - status = mu_imap_fetch (imap, uid_mode, argv[1], argv[2]); - mu_stream_destroy (&out); - mu_imap_register_callback_function (imap, MU_IMAP_CB_FETCH, - imap_fetch_callback, - mu_strout); - if (status) - report_failure ("fetch", status); + mu_msgset_t msgset = parse_msgset (argv[1]); + + if (msgset) + { + int status; + + mu_imap_register_callback_function (imap, MU_IMAP_CB_FETCH, + imap_fetch_callback, + out); + status = mu_imap_fetch (imap, uid_mode, msgset, argv[2]); + mu_stream_destroy (&out); + mu_imap_register_callback_function (imap, MU_IMAP_CB_FETCH, + imap_fetch_callback, + mu_strout); + mu_msgset_free (msgset); + if (status) + report_failure ("fetch", status); + } return 0; } static int com_store (int argc, char **argv) { - int status = mu_imap_store (imap, uid_mode, argv[1], argv[2]); - if (status) - report_failure ("store", status); + mu_msgset_t msgset = parse_msgset (argv[1]); + + if (msgset) + { + int status = mu_imap_store (imap, uid_mode, msgset, argv[2]); + if (status) + report_failure ("store", status); + } return 0; } @@ -1076,9 +1111,14 @@ com_append (int argc, char **argv) static int com_copy (int argc, char **argv) { - int status = mu_imap_copy (imap, uid_mode, argv[1], argv[2]); - if (status) - report_failure ("copy", status); + mu_msgset_t msgset = parse_msgset (argv[1]); + if (msgset) + { + int status = mu_imap_copy (imap, uid_mode, msgset, argv[2]); + mu_msgset_free (msgset); + if (status) + report_failure ("copy", status); + } return 0; } |