[evolution-ews] Bug #655774 - Copy sent messages to Sent Items
- From: Milan Crha <mcrha src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [evolution-ews] Bug #655774 - Copy sent messages to Sent Items
- Date: Thu, 6 Sep 2012 09:09:55 +0000 (UTC)
commit a7bc53ad90a59aca69569b15eecae42d56a8321a
Author: Milan Crha <mcrha redhat com>
Date: Thu Sep 6 11:09:28 2012 +0200
Bug #655774 - Copy sent messages to Sent Items
src/addressbook/e-book-backend-ews.c | 7 +++-
src/calendar/e-cal-backend-ews.c | 8 ++++-
src/camel/camel-ews-folder.c | 15 +++++---
src/camel/camel-ews-provider.c | 2 +-
src/camel/camel-ews-transport.c | 7 +++-
src/server/e-ews-connection.c | 67 ++++++++++++++++++----------------
src/server/e-ews-connection.h | 4 +-
src/server/tests/test-cuditem.c | 9 ++++-
src/utils/ews-camel-common.c | 7 ++--
src/utils/ews-camel-common.h | 16 ++++++---
10 files changed, 89 insertions(+), 53 deletions(-)
---
diff --git a/src/addressbook/e-book-backend-ews.c b/src/addressbook/e-book-backend-ews.c
index 6f0cd2c..8f22803 100644
--- a/src/addressbook/e-book-backend-ews.c
+++ b/src/addressbook/e-book-backend-ews.c
@@ -970,6 +970,7 @@ e_book_backend_ews_create_contacts (EBookBackend *backend,
EContact *contact = NULL;
EBookBackendEws *ebews;
EwsCreateContact *create_contact;
+ EwsFolderId *fid;
EBookBackendEwsPrivate *priv;
if (vcards->next != NULL) {
@@ -1018,17 +1019,21 @@ e_book_backend_ews_create_contacts (EBookBackend *backend,
create_contact->opid = opid;
create_contact->contact = g_object_ref (contact);
+ fid = e_ews_folder_id_new (priv->folder_id, NULL, FALSE);
+
/* pass new contact component data to the exchange server and expect response in the callback */
e_ews_connection_create_items (
priv->cnc,
EWS_PRIORITY_MEDIUM, NULL,
NULL,
- priv->folder_id,
+ fid,
convert_contact_to_xml,
contact,
cancellable,
ews_create_contact_cb,
create_contact);
+
+ e_ews_folder_id_free (fid);
}
typedef struct {
diff --git a/src/calendar/e-cal-backend-ews.c b/src/calendar/e-cal-backend-ews.c
index 30c2d87..f9815e6 100644
--- a/src/calendar/e-cal-backend-ews.c
+++ b/src/calendar/e-cal-backend-ews.c
@@ -1626,6 +1626,7 @@ e_cal_backend_ews_create_objects (ECalBackend *backend,
{
EwsCreateData *create_data;
EwsConvertData *convert_data;
+ EwsFolderId *fid;
ECalBackendEws *cbews;
ECalBackendEwsPrivate *priv;
icalcomponent_kind kind;
@@ -1716,17 +1717,22 @@ e_cal_backend_ews_create_objects (ECalBackend *backend,
/*In case of appointment we have to set SendMeetingInvites to SendToNone */
send_meeting_invitations = "SendToNone";
+ fid = e_ews_folder_id_new (priv->folder_id, NULL, FALSE);
+
e_ews_connection_create_items (
priv->cnc,
EWS_PRIORITY_MEDIUM,
"SaveOnly",
send_meeting_invitations,
- priv->folder_id,
+ fid,
convert_calcomp_to_xml,
convert_data,
cancellable,
ews_create_object_cb,
create_data);
+
+ e_ews_folder_id_free (fid);
+
return;
exit:
diff --git a/src/camel/camel-ews-folder.c b/src/camel/camel-ews-folder.c
index 233050d..59934b0 100644
--- a/src/camel/camel-ews-folder.c
+++ b/src/camel/camel-ews-folder.c
@@ -1499,6 +1499,7 @@ ews_append_message_sync (CamelFolder *folder,
gchar *itemid, *changekey;
const gchar *folder_name;
gchar *folder_id;
+ EwsFolderId *fid;
CamelAddress *from;
CamelEwsStore *ews_store;
EEwsConnection *cnc;
@@ -1506,6 +1507,10 @@ ews_append_message_sync (CamelFolder *folder,
ews_store = (CamelEwsStore *) camel_folder_get_parent_store (folder);
+ if (!camel_ews_store_connected (ews_store, cancellable, error)) {
+ return FALSE;
+ }
+
folder_name = camel_folder_get_full_name (folder);
folder_id = camel_ews_store_summary_get_folder_id_from_name (
ews_store->summary,
@@ -1515,30 +1520,30 @@ ews_append_message_sync (CamelFolder *folder,
from = CAMEL_ADDRESS (camel_mime_message_get_from (message));
- if (!camel_ews_store_connected (ews_store, cancellable, error)) {
- return FALSE;
- }
-
cnc = camel_ews_store_ref_connection (ews_store);
if (!cnc) {
+ g_free (folder_id);
g_set_error (
error, CAMEL_ERROR, CAMEL_ERROR_GENERIC,
_("Cant perform actions on the folder while in offline mode"));
return FALSE;
}
+ fid = e_ews_folder_id_new (folder_id, NULL, FALSE);
if (!camel_ews_utils_create_mime_message (
- cnc, "SaveOnly", folder_id, message,
+ cnc, "SaveOnly", fid, message,
camel_message_info_flags (info),
from, &itemid, &changekey,
cancellable, &local_error)) {
camel_ews_store_maybe_disconnect (ews_store, local_error);
g_propagate_error (error, local_error);
+ e_ews_folder_id_free (fid);
g_free (folder_id);
g_object_unref (cnc);
return FALSE;
}
+ e_ews_folder_id_free (fid);
g_free (folder_id);
/* FIXME: Do we have to add it to the summary info ourselves?
diff --git a/src/camel/camel-ews-provider.c b/src/camel/camel-ews-provider.c
index 3fcaa68..8e131af 100644
--- a/src/camel/camel-ews-provider.c
+++ b/src/camel/camel-ews-provider.c
@@ -80,7 +80,7 @@ static CamelProvider ews_provider = {
"mail",
CAMEL_PROVIDER_IS_REMOTE | CAMEL_PROVIDER_IS_SOURCE |
- CAMEL_PROVIDER_IS_STORAGE | CAMEL_PROVIDER_IS_EXTERNAL,
+ CAMEL_PROVIDER_IS_STORAGE | CAMEL_PROVIDER_IS_EXTERNAL | CAMEL_PROVIDER_DISABLE_SENT_FOLDER,
CAMEL_URL_ALLOW_USER | CAMEL_URL_ALLOW_AUTH | CAMEL_URL_HIDDEN_HOST,
diff --git a/src/camel/camel-ews-transport.c b/src/camel/camel-ews-transport.c
index 9acaa49..37321eb 100644
--- a/src/camel/camel-ews-transport.c
+++ b/src/camel/camel-ews-transport.c
@@ -90,6 +90,7 @@ ews_send_to_sync (CamelTransport *transport,
CamelSettings *settings;
CamelService *service;
EEwsConnection *cnc;
+ EwsFolderId *fid;
gchar *ews_email;
gchar *host_url;
gchar *user;
@@ -163,9 +164,13 @@ ews_send_to_sync (CamelTransport *transport,
goto exit;
}
+ fid = e_ews_folder_id_new ("sentitems", NULL, TRUE);
+
success = camel_ews_utils_create_mime_message (
- cnc, "SendOnly", NULL, message, 0,
+ cnc, "SendAndSaveCopy", fid, message, 0,
from, NULL, NULL, cancellable, error);
+
+ e_ews_folder_id_free (fid);
g_object_unref (cnc);
exit:
diff --git a/src/server/e-ews-connection.c b/src/server/e-ews-connection.c
index 6098725..487e971 100644
--- a/src/server/e-ews-connection.c
+++ b/src/server/e-ews-connection.c
@@ -3108,6 +3108,32 @@ e_ews_connection_sync_folder_items_sync (EEwsConnection *cnc,
}
static void
+ews_append_folder_id_to_msg (ESoapMessage *msg,
+ const gchar *email,
+ const EwsFolderId *fid)
+{
+ g_return_if_fail (msg != NULL);
+ g_return_if_fail (fid != NULL);
+
+ if (fid->is_distinguished_id)
+ e_soap_message_start_element (msg, "DistinguishedFolderId", NULL, NULL);
+ else
+ e_soap_message_start_element (msg, "FolderId", NULL, NULL);
+
+ e_soap_message_add_attribute (msg, "Id", fid->id, NULL, NULL);
+ if (fid->change_key)
+ e_soap_message_add_attribute (msg, "ChangeKey", fid->change_key, NULL, NULL);
+
+ if (fid->is_distinguished_id && email) {
+ e_soap_message_start_element (msg, "Mailbox", NULL, NULL);
+ e_ews_message_write_string_parameter (msg, "EmailAddress", NULL, email);
+ e_soap_message_end_element (msg);
+ }
+
+ e_soap_message_end_element (msg);
+}
+
+static void
ews_append_folder_ids_to_msg (ESoapMessage *msg,
const gchar *email,
GSList *folder_ids)
@@ -3115,24 +3141,9 @@ ews_append_folder_ids_to_msg (ESoapMessage *msg,
GSList *l;
for (l = folder_ids; l != NULL; l = g_slist_next (l)) {
- EwsFolderId *fid = (EwsFolderId *) l->data;
+ const EwsFolderId *fid = l->data;
- if (fid->is_distinguished_id)
- e_soap_message_start_element (msg, "DistinguishedFolderId", NULL, NULL);
- else
- e_soap_message_start_element (msg, "FolderId", NULL, NULL);
-
- e_soap_message_add_attribute (msg, "Id", fid->id, NULL, NULL);
- if (fid->change_key)
- e_soap_message_add_attribute (msg, "ChangeKey", fid->change_key, NULL, NULL);
-
- if (fid->is_distinguished_id && email) {
- e_soap_message_start_element (msg, "Mailbox", NULL, NULL);
- e_ews_message_write_string_parameter (msg, "EmailAddress", NULL, email);
- e_soap_message_end_element (msg);
- }
-
- e_soap_message_end_element (msg);
+ ews_append_folder_id_to_msg (msg, email, fid);
}
}
@@ -3987,7 +3998,7 @@ e_ews_connection_create_items (EEwsConnection *cnc,
gint pri,
const gchar *msg_disposition,
const gchar *send_invites,
- const gchar *folder_id,
+ const EwsFolderId *fid,
EEwsRequestCreationCallback create_cb,
gpointer create_user_data,
GCancellable *cancellable,
@@ -4013,11 +4024,9 @@ e_ews_connection_create_items (EEwsConnection *cnc,
msg, "SendMeetingInvitations",
send_invites, NULL, NULL);
- if (folder_id) {
+ if (fid) {
e_soap_message_start_element (msg, "SavedItemFolderId", "messages", NULL);
- e_ews_message_write_string_parameter_with_attribute (
- msg, "FolderId",
- NULL, NULL, "Id", folder_id);
+ ews_append_folder_id_to_msg (msg, cnc->priv->email, fid);
e_soap_message_end_element (msg);
}
@@ -4090,7 +4099,7 @@ e_ews_connection_create_items_sync (EEwsConnection *cnc,
gint pri,
const gchar *msg_disposition,
const gchar *send_invites,
- const gchar *folder_id,
+ const EwsFolderId *fid,
EEwsRequestCreationCallback create_cb,
gpointer create_user_data,
GSList **ids,
@@ -4107,7 +4116,7 @@ e_ews_connection_create_items_sync (EEwsConnection *cnc,
e_ews_connection_create_items (
cnc, pri, msg_disposition,
- send_invites, folder_id,
+ send_invites, fid,
create_cb, create_user_data,
cancellable,
e_async_closure_callback, closure);
@@ -6908,7 +6917,6 @@ e_ews_connection_get_folder_permissions (EEwsConnection *cnc,
ESoapMessage *msg;
GSimpleAsyncResult *simple;
EwsAsyncData *async_data;
- GSList *folder_ids;
g_return_if_fail (cnc != NULL);
g_return_if_fail (folder_id != NULL);
@@ -6924,11 +6932,9 @@ e_ews_connection_get_folder_permissions (EEwsConnection *cnc,
e_soap_message_end_element (msg); /* AdditionalProperties */
e_soap_message_end_element (msg); /* FolderShape */
- folder_ids = g_slist_append (NULL, folder_id);
e_soap_message_start_element (msg, "FolderIds", "messages", NULL);
- ews_append_folder_ids_to_msg (msg, cnc->priv->email, folder_ids);
+ ews_append_folder_id_to_msg (msg, cnc->priv->email, folder_id);
e_soap_message_end_element (msg);
- g_slist_free (folder_ids);
e_ews_message_write_footer (msg);
@@ -7416,7 +7422,6 @@ e_ews_connection_get_folder_info (EEwsConnection *cnc,
ESoapMessage *msg;
GSimpleAsyncResult *simple;
EwsAsyncData *async_data;
- GSList *folder_ids;
g_return_if_fail (cnc != NULL);
g_return_if_fail (folder_id != NULL);
@@ -7431,11 +7436,9 @@ e_ews_connection_get_folder_info (EEwsConnection *cnc,
e_soap_message_end_element (msg); /* AdditionalProperties */
e_soap_message_end_element (msg); /* FolderShape */
- folder_ids = g_slist_append (NULL, (gpointer) folder_id);
e_soap_message_start_element (msg, "FolderIds", "messages", NULL);
- ews_append_folder_ids_to_msg (msg, mail_id, folder_ids);
+ ews_append_folder_id_to_msg (msg, mail_id, folder_id);
e_soap_message_end_element (msg);
- g_slist_free (folder_ids);
e_ews_message_write_footer (msg);
diff --git a/src/server/e-ews-connection.h b/src/server/e-ews-connection.h
index 8741b5b..cf273ad 100644
--- a/src/server/e-ews-connection.h
+++ b/src/server/e-ews-connection.h
@@ -418,7 +418,7 @@ void e_ews_connection_create_items (EEwsConnection *cnc,
gint pri,
const gchar *msg_disposition,
const gchar *send_invites,
- const gchar *folder_id,
+ const EwsFolderId *fid,
EEwsRequestCreationCallback create_cb,
gpointer create_user_data,
GCancellable *cancellable,
@@ -434,7 +434,7 @@ gboolean e_ews_connection_create_items_sync
gint pri,
const gchar *msg_disposition,
const gchar *send_invites,
- const gchar *folder_id,
+ const EwsFolderId *fid,
EEwsRequestCreationCallback create_cb,
gpointer create_user_data,
GSList **ids,
diff --git a/src/server/tests/test-cuditem.c b/src/server/tests/test-cuditem.c
index 3c66d2f..6eec07f 100644
--- a/src/server/tests/test-cuditem.c
+++ b/src/server/tests/test-cuditem.c
@@ -107,6 +107,7 @@ op_test_create_item ()
const gchar *uri;
const gchar *folderid;
EEwsConnection *cnc;
+ EwsFolderId *fid;
GCancellable *cancellable;
CamelEwsSettings *settings;
@@ -127,13 +128,17 @@ op_test_create_item ()
g_object_unref (settings);
/* to check how to change to real data */
- folderid = "AQASAG1hbmR5Lnd1QGludGVsLmNvbQAuAAADnUl3sZrICU6Xd1qXV+rpVwEAJvRPgQpR30KhJ7wqBr4YXgAAAY6W+gAAAA==";
+ fid = e_ews_folder_id_new (
+ "AQASAG1hbmR5Lnd1QGludGVsLmNvbQAuAAADnUl3sZrICU6Xd1qXV+rpVwEAJvRPgQpR30KhJ7wqBr4YXgAAAY6W+gAAAA==",
+ NULL, FALSE);
e_ews_connection_create_items (
cnc, EWS_PRIORITY_MEDIUM,
- NULL, "SendToAllAndSaveCopy", folderid,
+ NULL, "SendToAllAndSaveCopy", fid,
op_test_create_item_get_soap_msg, NULL,
cancellable, create_item_ready_callback, NULL);
+
+ e_ews_folder_id_free (fid);
}
static gboolean
diff --git a/src/utils/ews-camel-common.c b/src/utils/ews-camel-common.c
index 64bd411..54edaba 100644
--- a/src/utils/ews-camel-common.c
+++ b/src/utils/ews-camel-common.c
@@ -113,7 +113,7 @@ create_mime_message_cb (ESoapMessage *msg,
gboolean
camel_ews_utils_create_mime_message (EEwsConnection *cnc,
const gchar *disposition,
- const gchar *save_folder,
+ const EwsFolderId *fid,
CamelMimeMessage *message,
gint32 message_camel_flags,
CamelAddress *from,
@@ -135,7 +135,8 @@ camel_ews_utils_create_mime_message (EEwsConnection *cnc,
create_data->message_camel_flags = message_camel_flags;
create_data->from = from;
- if (g_strcmp0 (disposition, "SendOnly") == 0) {
+ if (g_strcmp0 (disposition, "SendOnly") == 0 ||
+ g_strcmp0 (disposition, "SendAndSaveCopy") == 0) {
struct _camel_header_raw *header;
for (header = CAMEL_MIME_PART (message)->headers; header; header = header->next) {
@@ -149,7 +150,7 @@ camel_ews_utils_create_mime_message (EEwsConnection *cnc,
res = e_ews_connection_create_items_sync (
cnc, EWS_PRIORITY_MEDIUM,
- disposition, NULL, save_folder,
+ disposition, NULL, fid,
create_mime_message_cb, create_data,
&ids, cancellable, error);
diff --git a/src/utils/ews-camel-common.h b/src/utils/ews-camel-common.h
index f292aa6..30e594a 100644
--- a/src/utils/ews-camel-common.h
+++ b/src/utils/ews-camel-common.h
@@ -23,15 +23,21 @@
#include <camel/camel.h>
#include "server/e-ews-connection.h"
+#include "server/e-ews-folder.h"
G_BEGIN_DECLS
gboolean
-camel_ews_utils_create_mime_message (EEwsConnection *cnc, const gchar *disposition,
- const gchar *save_folder, CamelMimeMessage *message,
- gint32 message_camel_flags, CamelAddress *from,
- gchar **itemid, gchar **changekey,
- GCancellable *cancellable, GError **error);
+camel_ews_utils_create_mime_message (EEwsConnection *cnc,
+ const gchar *disposition,
+ const EwsFolderId *fid,
+ CamelMimeMessage *message,
+ gint32 message_camel_flags,
+ CamelAddress *from,
+ gchar **itemid,
+ gchar **changekey,
+ GCancellable *cancellable,
+ GError **error);
G_END_DECLS
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]