summaryrefslogtreecommitdiff
path: root/mu
diff options
context:
space:
mode:
authorSergey Poznyakoff <gray@gnu.org.ua>2011-12-26 22:13:52 +0200
committerSergey Poznyakoff <gray@gnu.org.ua>2011-12-26 22:13:52 +0200
commit0ff01881ca8dd159c2802751901644daef2bcc19 (patch)
tree4399705e5a34c9475341bbea54b58ca8ac2ec3b1 /mu
parent1c7d50a62de57fbb0552bcde955db928908b2a98 (diff)
downloadmailutils-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.c76
1 files changed, 58 insertions, 18 deletions
diff --git a/mu/imap.c b/mu/imap.c
index 0069ff541..8e3e2bfac 100644
--- a/mu/imap.c
+++ b/mu/imap.c
@@ -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;
}

Return to:

Send suggestions and report system problems to the System administrator.