From: Dirk-Jan C. Binnema Date: Wed, 14 Feb 2007 14:12:57 +0000 (+0000) Subject: * all: X-Git-Tag: git_migration_finished~4051 X-Git-Url: http://git.maemo.org/git/?p=modest;a=commitdiff_plain;h=409da221f48571a4c86a3d692e60f90b2c8473ad * all: - put new messages in the Drafts folder pmo-trunk-r830 --- diff --git a/src/modest-main.c b/src/modest-main.c index 659479d..20b8335 100644 --- a/src/modest-main.c +++ b/src/modest-main.c @@ -167,14 +167,28 @@ start_ui (const gchar *account, const gchar* mailto, const gchar *cc, const gcha if (mailto||cc||bcc||subject||body) { gchar *from; TnyMsg *msg; - + TnyFolder *folder; if (!account) { g_printerr ("modest: no valid account provided, nor is default one available\n"); return MODEST_ERR_PARAM; } from = modest_account_mgr_get_from_string (modest_runtime_get_account_mgr(), account); msg = modest_tny_msg_new (mailto,from,cc,bcc,subject,body,NULL); - + if (!msg) { + g_printerr ("modest: failed to create message\n"); + g_free (from); + return MODEST_ERR_SEND; + } + folder = modest_tny_account_get_special_folder (account, + TNY_FOLDER_TYPE_DRAFTS); + if (!folder) { + g_printerr ("modest: failed to find Drafts folder\n"); + g_free (from); + g_object_unref (G_OBJECT(msg)); + return MODEST_ERR_SEND; + } + tny_folder_add_msg (folder, msg, NULL); /* FIXME: check err */ + win = modest_msg_edit_window_new (msg, account); g_object_unref (G_OBJECT(msg)); diff --git a/src/modest-tny-folder.h b/src/modest-tny-folder.h index fb04340..73b4199 100644 --- a/src/modest-tny-folder.h +++ b/src/modest-tny-folder.h @@ -94,7 +94,6 @@ gboolean modest_tny_folder_is_local_folder (const TnyFolder *folder); TnyFolderType modest_tny_folder_get_local_folder_type (const TnyFolder *folder); - /** * modest_tny_folder_get_rules: * @folder: a valid tnymail folder @@ -107,11 +106,6 @@ TnyFolderType modest_tny_folder_get_local_folder_type (const TnyFolder *folder) */ ModestTnyFolderRules modest_tny_folder_get_rules (const TnyFolder *folder); - - - - - G_END_DECLS #endif /* __MODEST_TNY_FOLDER_H__*/ diff --git a/src/modest-tny-msg.c b/src/modest-tny-msg.c index 7a71ad4..4c5b67d 100644 --- a/src/modest-tny-msg.c +++ b/src/modest-tny-msg.c @@ -75,8 +75,7 @@ modest_tny_msg_new (const gchar* mailto, const gchar* from, const gchar *cc, tny_header_set_subject (TNY_HEADER (header), subject); content_type = get_content_type(body); - - + /* Add the body of the new mail */ add_body_part (new_msg, body, content_type, (attachments ? TRUE: FALSE)); @@ -269,6 +268,8 @@ modest_tny_msg_find_body_part (TnyMsg *msg, gboolean want_html) static gboolean is_ascii(const gchar *s) { + if (!s) + return TRUE; while (s[0]) { if (s[0] & 128 || s[0] < 32) return FALSE; diff --git a/src/modest-ui-actions.c b/src/modest-ui-actions.c index 27b7309..339162d 100644 --- a/src/modest-ui-actions.c +++ b/src/modest-ui-actions.c @@ -35,6 +35,8 @@ #include #include #include +#include + #include "modest-ui-actions.h" #include "modest-tny-platform-factory.h" @@ -68,7 +70,7 @@ typedef enum _ReplyForwardAction { typedef struct _ReplyForwardHelper { guint reply_forward_type; ReplyForwardAction action; - gchar *account; + gchar *account_name; } ReplyForwardHelper; @@ -175,7 +177,8 @@ modest_ui_actions_on_delete (GtkWidget *widget, ModestWindow *win) /* TODO: error handling management */ const GError *error; error = modest_mail_operation_get_error (mail_op); - g_warning (error->message); + if (error) + g_warning (error->message); } g_object_unref (G_OBJECT (mail_op)); @@ -211,27 +214,62 @@ void modest_ui_actions_on_new_msg (GtkWidget *widget, ModestWindow *win) { ModestWindow *msg_win; - TnyMsg *msg; - gchar *account; - gchar *from_str; + TnyMsg *msg = NULL; + TnyFolder *folder = NULL; + gchar *account_name = NULL; + gchar *from_str = NULL; + GError *err = NULL; + TnyAccount *account; + + account_name = g_strdup(modest_window_get_active_account (win)); + if (!account_name) + account_name = modest_account_mgr_get_default_account (modest_runtime_get_account_mgr()); + + account = modest_tny_account_store_get_tny_account_by_account (modest_runtime_get_account_store(), + account_name, + TNY_ACCOUNT_TYPE_STORE); + if (!account) { + g_printerr ("modest: failed to get tnyaccount for '%s'\n", account_name); + goto cleanup; + } - account = g_strdup(modest_window_get_active_account (win)); - if (!account) - account = modest_account_mgr_get_default_account (modest_runtime_get_account_mgr()); + from_str = modest_account_mgr_get_from_string (modest_runtime_get_account_mgr(), account_name); + + msg = modest_tny_msg_new ("", from_str, "", "", "", "", NULL); + if (!msg) { + g_printerr ("modest: failed to create new msg\n"); + goto cleanup; + } - from_str = modest_account_mgr_get_from_string (modest_runtime_get_account_mgr(), - account); + folder = modest_tny_account_get_special_folder (account, TNY_FOLDER_TYPE_DRAFTS); + if (!folder) { + g_printerr ("modest: failed to find Drafts folder\n"); + goto cleanup; + } - msg = modest_tny_msg_new ("", from_str, "", "", "", "", NULL); - msg_win = modest_msg_edit_window_new (msg, account); + tny_folder_add_msg (folder, msg, &err); + if (err) { + g_printerr ("modest: error adding msg to Drafts folder: %s", + err->message); + g_error_free (err); + goto cleanup; + } + + msg_win = modest_msg_edit_window_new (msg, account_name); if (win) gtk_window_set_transient_for (GTK_WINDOW (msg_win), GTK_WINDOW (win)); - g_free (account); - g_free (from_str); - g_object_unref (G_OBJECT(msg)); - gtk_widget_show_all (GTK_WIDGET (msg_win)); + +cleanup: + g_free (account_name); + g_free (from_str); + if (account) + g_object_unref (G_OBJECT(account)); + if (msg) + g_object_unref (G_OBJECT(msg)); + if (folder) + g_object_unref (G_OBJECT(folder)); } @@ -254,19 +292,21 @@ reply_forward_func (gpointer data, gpointer user_data) ModestWindow *msg_win; ModestEditType edit_type; gchar *from; + GError *err = NULL; + TnyFolder *folder = NULL; + TnyAccount *account = NULL; msg = TNY_MSG (data); helper = (GetMsgAsyncHelper *) user_data; rf_helper = (ReplyForwardHelper *) helper->user_data; from = modest_account_mgr_get_from_string (modest_runtime_get_account_mgr(), - rf_helper->account); + rf_helper->account_name); /* Create reply mail */ switch (rf_helper->action) { case ACTION_REPLY: new_msg = - modest_mail_operation_create_reply_mail (msg, - from, + modest_mail_operation_create_reply_mail (msg, from, rf_helper->reply_forward_type, MODEST_MAIL_OPERATION_REPLY_MODE_SENDER); break; @@ -283,22 +323,49 @@ reply_forward_func (gpointer data, gpointer user_data) break; default: g_return_if_reached (); + return; } if (!new_msg) { - g_warning ("Unable to create a message"); + g_printerr ("modest: failed to create message\n"); goto cleanup; } - + + account = modest_tny_account_store_get_tny_account_by_account (modest_runtime_get_account_store(), + rf_helper->account_name, + TNY_ACCOUNT_TYPE_STORE); + if (!account) { + g_printerr ("modest: failed to get tnyaccount for '%s'\n", rf_helper->account_name); + goto cleanup; + } + + folder = modest_tny_account_get_special_folder (account, TNY_FOLDER_TYPE_DRAFTS); + if (!folder) { + g_printerr ("modest: failed to find Drafts folder\n"); + goto cleanup; + } + + tny_folder_add_msg (folder, msg, &err); + if (err) { + g_printerr ("modest: error adding msg to Drafts folder: %s", + err->message); + g_error_free (err); + goto cleanup; + } + /* Show edit window */ - msg_win = modest_msg_edit_window_new (new_msg, rf_helper->account); + msg_win = modest_msg_edit_window_new (new_msg, rf_helper->account_name); gtk_widget_show_all (GTK_WIDGET (msg_win)); - - /* Clean */ - g_object_unref (G_OBJECT (new_msg)); - cleanup: - g_free (rf_helper->account); +cleanup: + if (new_msg) + g_object_unref (G_OBJECT (new_msg)); + if (folder) + g_object_unref (G_OBJECT (folder)); + if (account) + g_object_unref (G_OBJECT (account)); + + g_free (rf_helper->account_name); g_slice_free (ReplyForwardHelper, rf_helper); } @@ -314,7 +381,7 @@ reply_forward (GtkWidget *widget, ReplyForwardAction action, ModestWindow *win) TnyFolder *folder; GetMsgAsyncHelper *helper; ReplyForwardHelper *rf_helper; - + g_return_if_fail (MODEST_IS_WINDOW(win)); header_list = get_selected_headers (win); @@ -324,7 +391,6 @@ reply_forward (GtkWidget *widget, ReplyForwardAction action, ModestWindow *win) reply_forward_type = modest_conf_get_int (modest_runtime_get_conf (), (action == ACTION_FORWARD) ? MODEST_CONF_FORWARD_TYPE : MODEST_CONF_REPLY_TYPE, NULL); - /* We assume that we can only select messages of the same folder and that we reply all of them from the same account. In fact the interface currently only @@ -334,7 +400,10 @@ reply_forward (GtkWidget *widget, ReplyForwardAction action, ModestWindow *win) rf_helper = g_slice_new0 (ReplyForwardHelper); rf_helper->reply_forward_type = reply_forward_type; rf_helper->action = action; - rf_helper->account = modest_account_mgr_get_default_account (modest_runtime_get_account_mgr());; + + rf_helper->account_name = g_strdup (modest_window_get_active_account (win)); + if (!rf_helper->account_name) + rf_helper->account_name = modest_account_mgr_get_default_account (modest_runtime_get_account_mgr()); helper = g_slice_new0 (GetMsgAsyncHelper); //helper->main_window = NULL;