From 9ef97fb0e52562d0107535f6c061247ce8f693ac Mon Sep 17 00:00:00 2001 From: Alberto Garcia Date: Mon, 12 Nov 2007 11:14:13 +0000 Subject: [PATCH] Use tny_folder_add_msg_async() to save a message to Drafts Fixes NB#65125 pmo-trunk-r3702 --- src/modest-mail-operation.c | 125 ++++++++++++++++++++++++++++++------------- src/modest-ui-actions.c | 9 ++-- 2 files changed, 91 insertions(+), 43 deletions(-) diff --git a/src/modest-mail-operation.c b/src/modest-mail-operation.c index 56e7c3b..dc4df3e 100644 --- a/src/modest-mail-operation.c +++ b/src/modest-mail-operation.c @@ -850,77 +850,126 @@ typedef struct TnyMsg *draft_msg; SaveToDraftstCallback callback; gpointer user_data; -} SaveToDraftsInfo; + TnyFolder *drafts; + TnyMsg *msg; + ModestMailOperation *mailop; +} SaveToDraftsAddMsgInfo; static void -modest_mail_operation_save_to_drafts_cb (ModestMailOperation *self, - TnyMsg *msg, - gpointer userdata) +modest_mail_operation_save_to_drafts_add_msg_cb(TnyFolder *self, + gboolean canceled, + GError *err, + gpointer userdata) { - TnyFolder *src_folder = NULL; - TnyFolder *drafts = NULL; - TnyHeader *header = NULL; ModestMailOperationPrivate *priv = NULL; - SaveToDraftsInfo *info = (SaveToDraftsInfo *) userdata; - - priv = MODEST_MAIL_OPERATION_GET_PRIVATE(self); + SaveToDraftsAddMsgInfo *info = (SaveToDraftsAddMsgInfo *) userdata; - if (!msg) { - priv->status = MODEST_MAIL_OPERATION_STATUS_FAILED; - g_set_error (&(priv->error), MODEST_MAIL_OPERATION_ERROR, - MODEST_MAIL_OPERATION_ERROR_INSTANCE_CREATION_FAILED, - "modest: failed to create a new msg\n"); - goto end; - } + priv = MODEST_MAIL_OPERATION_GET_PRIVATE(info->mailop); - drafts = modest_tny_account_get_special_folder (TNY_ACCOUNT (info->transport_account), - TNY_FOLDER_TYPE_DRAFTS); - if (!drafts) { - priv->status = MODEST_MAIL_OPERATION_STATUS_FAILED; - g_set_error (&(priv->error), MODEST_MAIL_OPERATION_ERROR, - MODEST_MAIL_OPERATION_ERROR_ITEM_NOT_FOUND, - "modest: failed to create a new msg\n"); - goto end; + if (priv->error) { + g_warning ("%s: priv->error != NULL", __FUNCTION__); + g_error_free(priv->error); } - if (!priv->error) - tny_folder_add_msg (drafts, msg, &(priv->error)); + priv->error = g_error_copy(err); if ((!priv->error) && (info->draft_msg != NULL)) { - header = tny_msg_get_header (info->draft_msg); - src_folder = tny_header_get_folder (header); + TnyHeader *header = tny_msg_get_header (info->draft_msg); + TnyFolder *src_folder = tny_header_get_folder (header); /* Remove the old draft */ tny_folder_remove_msg (src_folder, header, NULL); /* Synchronize to expunge and to update the msg counts */ - tny_folder_sync_async (drafts, TRUE, NULL, NULL, NULL); + tny_folder_sync_async (info->drafts, TRUE, NULL, NULL, NULL); tny_folder_sync_async (src_folder, TRUE, NULL, NULL, NULL); - g_object_unref (header); + g_object_unref (G_OBJECT(header)); + g_object_unref (G_OBJECT(src_folder)); } - + if (!priv->error) priv->status = MODEST_MAIL_OPERATION_STATUS_SUCCESS; else priv->status = MODEST_MAIL_OPERATION_STATUS_FAILED; -end: /* Call the user callback */ if (info->callback) - info->callback (self, msg, info->user_data); + info->callback (info->mailop, info->msg, info->user_data); + + if (info->transport_account) + g_object_unref (G_OBJECT(info->transport_account)); + if (info->draft_msg) + g_object_unref (G_OBJECT (info->draft_msg)); + if (info->drafts) + g_object_unref (G_OBJECT(info->drafts)); + if (info->msg) + g_object_unref (G_OBJECT (info->msg)); + g_slice_free (SaveToDraftsAddMsgInfo, info); + + modest_mail_operation_notify_end (info->mailop); + g_object_unref(info->mailop); +} + +typedef struct +{ + TnyTransportAccount *transport_account; + TnyMsg *draft_msg; + SaveToDraftstCallback callback; + gpointer user_data; +} SaveToDraftsInfo; + +static void +modest_mail_operation_save_to_drafts_cb (ModestMailOperation *self, + TnyMsg *msg, + gpointer userdata) +{ + TnyFolder *drafts = NULL; + ModestMailOperationPrivate *priv = NULL; + SaveToDraftsInfo *info = (SaveToDraftsInfo *) userdata; + + priv = MODEST_MAIL_OPERATION_GET_PRIVATE(self); + + if (!msg) { + g_set_error (&(priv->error), MODEST_MAIL_OPERATION_ERROR, + MODEST_MAIL_OPERATION_ERROR_INSTANCE_CREATION_FAILED, + "modest: failed to create a new msg\n"); + } else { + drafts = modest_tny_account_get_special_folder (TNY_ACCOUNT (info->transport_account), + TNY_FOLDER_TYPE_DRAFTS); + if (!drafts) { + g_set_error (&(priv->error), MODEST_MAIL_OPERATION_ERROR, + MODEST_MAIL_OPERATION_ERROR_ITEM_NOT_FOUND, + "modest: failed to create a new msg\n"); + } + } + + if (!priv->error) { + SaveToDraftsAddMsgInfo *cb_info = g_slice_new(SaveToDraftsAddMsgInfo); + cb_info->transport_account = g_object_ref(info->transport_account); + cb_info->draft_msg = g_object_ref(info->draft_msg); + cb_info->callback = info->callback; + cb_info->user_data = info->user_data; + cb_info->drafts = g_object_ref(drafts); + cb_info->msg = g_object_ref(msg); + cb_info->mailop = g_object_ref(self); + tny_folder_add_msg_async(drafts, msg, modest_mail_operation_save_to_drafts_add_msg_cb, + NULL, cb_info); + } else { + /* Call the user callback */ + priv->status = MODEST_MAIL_OPERATION_STATUS_FAILED; + if (info->callback) + info->callback (self, msg, info->user_data); + modest_mail_operation_notify_end (self); + } if (drafts) g_object_unref (G_OBJECT(drafts)); - if (src_folder) - g_object_unref (G_OBJECT(src_folder)); if (info->draft_msg) g_object_unref (G_OBJECT (info->draft_msg)); if (info->transport_account) g_object_unref (G_OBJECT(info->transport_account)); g_slice_free (SaveToDraftsInfo, info); - - modest_mail_operation_notify_end (self); } void diff --git a/src/modest-ui-actions.c b/src/modest-ui-actions.c index 248df08..3890dba 100644 --- a/src/modest-ui-actions.c +++ b/src/modest-ui-actions.c @@ -2214,6 +2214,7 @@ on_save_to_drafts_cb (ModestMailOperation *mail_op, gpointer user_data) { ModestMsgEditWindow *edit_window; + char *info_text; edit_window = MODEST_MSG_EDIT_WINDOW (user_data); @@ -2222,6 +2223,9 @@ on_save_to_drafts_cb (ModestMailOperation *mail_op, return; modest_msg_edit_window_set_draft (edit_window, saved_draft); + info_text = g_strdup_printf (_("mail_va_saved_to_drafts"), _("mcen_me_folder_drafts")); + modest_platform_information_banner (NULL, NULL, info_text); + g_free (info_text); } void @@ -2232,7 +2236,6 @@ modest_ui_actions_on_save_to_drafts (GtkWidget *widget, ModestMsgEditWindow *edi MsgData *data; gchar *account_name, *from; ModestAccountMgr *account_mgr; - gchar *info_text = NULL; g_return_if_fail (MODEST_IS_MSG_EDIT_WINDOW(edit_window)); @@ -2293,11 +2296,7 @@ modest_ui_actions_on_save_to_drafts (GtkWidget *widget, ModestMsgEditWindow *edi g_object_unref (G_OBJECT (mail_operation)); modest_msg_edit_window_free_msg_data (edit_window, data); - - info_text = g_strdup_printf (_("mail_va_saved_to_drafts"), _("mcen_me_folder_drafts")); - modest_platform_information_banner (NULL, NULL, info_text); modest_msg_edit_window_reset_modified (edit_window); - g_free (info_text); } /* For instance, when clicking the Send toolbar button when editing a message: */ -- 1.7.9.5