[evolution-data-server/gnome-3-8] IMAPX: Support IMAP MOVE extension.
- From: Matthew Barnes <mbarnes src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [evolution-data-server/gnome-3-8] IMAPX: Support IMAP MOVE extension.
- Date: Wed, 8 May 2013 17:42:20 +0000 (UTC)
commit 400c2dac2d113a4188c9823a6b805b85ea0c7840
Author: Matthew Barnes <mbarnes redhat com>
Date: Wed May 8 13:30:18 2013 -0400
IMAPX: Support IMAP MOVE extension.
http://tools.ietf.org/rfc/rfc6851
(cherry picked from commit e2355e318a87f4512c789026f998598249ab030f)
camel/camel-imapx-server.c | 14 +++++++++++++-
camel/camel-imapx-utils.c | 3 ++-
camel/camel-imapx-utils.h | 3 ++-
3 files changed, 17 insertions(+), 3 deletions(-)
---
diff --git a/camel/camel-imapx-server.c b/camel/camel-imapx-server.c
index c5a79dd..eb741a7 100644
--- a/camel/camel-imapx-server.c
+++ b/camel/camel-imapx-server.c
@@ -142,6 +142,7 @@ struct _CopyMessagesData {
CamelFolder *dest;
GPtrArray *uids;
gboolean delete_originals;
+ gboolean use_move_command;
gint index;
gint last_index;
struct _uidset_state uidset;
@@ -4717,7 +4718,10 @@ imapx_command_copy_messages_step_start (CamelIMAPXServer *is,
uids = data->uids;
- ic = camel_imapx_command_new (is, "COPY", folder, "UID COPY ");
+ if (data->use_move_command)
+ ic = camel_imapx_command_new (is, "MOVE", folder, "UID MOVE ");
+ else
+ ic = camel_imapx_command_new (is, "COPY", folder, "UID COPY ");
ic->complete = imapx_command_copy_messages_step_done;
camel_imapx_command_set_job (ic, job);
ic->pri = job->pri;
@@ -7565,6 +7569,14 @@ camel_imapx_server_copy_message (CamelIMAPXServer *is,
data->uids = g_ptr_array_new ();
data->delete_originals = delete_originals;
+ /* If we're moving messages, prefer "UID MOVE" if supported. */
+ if (data->delete_originals) {
+ if (CAMEL_IMAPX_HAVE_CAPABILITY (is->cinfo, MOVE)) {
+ data->delete_originals = FALSE;
+ data->use_move_command = TRUE;
+ }
+ }
+
for (ii = 0; ii < uids->len; ii++)
g_ptr_array_add (data->uids, g_strdup (uids->pdata[ii]));
diff --git a/camel/camel-imapx-utils.c b/camel/camel-imapx-utils.c
index fcf2f5a..44518e5 100644
--- a/camel/camel-imapx-utils.c
+++ b/camel/camel-imapx-utils.c
@@ -373,7 +373,8 @@ struct {
{ "QRESYNC", IMAPX_CAPABILITY_QRESYNC },
{ "LIST-EXTENDED", IMAPX_CAPABILITY_LIST_EXTENDED },
{ "LIST-STATUS", IMAPX_CAPABILITY_LIST_STATUS },
- { "QUOTA", IMAPX_CAPABILITY_QUOTA }
+ { "QUOTA", IMAPX_CAPABILITY_QUOTA },
+ { "MOVE", IMAPX_CAPABILITY_MOVE }
};
static GMutex capa_htable_lock; /* capabilities lookup table lock */
diff --git a/camel/camel-imapx-utils.h b/camel/camel-imapx-utils.h
index b83e0ad..91e8964 100644
--- a/camel/camel-imapx-utils.h
+++ b/camel/camel-imapx-utils.h
@@ -177,7 +177,8 @@ enum {
IMAPX_CAPABILITY_QRESYNC = (1 << 9),
IMAPX_CAPABILITY_LIST_STATUS = (1 << 10),
IMAPX_CAPABILITY_LIST_EXTENDED = (1 << 11),
- IMAPX_CAPABILITY_QUOTA = (1 << 12)
+ IMAPX_CAPABILITY_QUOTA = (1 << 12),
+ IMAPX_CAPABILITY_MOVE = (1 << 13)
};
struct _capability_info {
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]