* all:
authorDirk-Jan C. Binnema <dirk-jan.binnema@nokia.com>
Wed, 14 Feb 2007 14:12:57 +0000 (14:12 +0000)
committerDirk-Jan C. Binnema <dirk-jan.binnema@nokia.com>
Wed, 14 Feb 2007 14:12:57 +0000 (14:12 +0000)
  - put new messages in the Drafts folder

pmo-trunk-r830

src/modest-main.c
src/modest-tny-folder.h
src/modest-tny-msg.c
src/modest-ui-actions.c

index 659479d..20b8335 100644 (file)
@@ -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;
        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 (!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));
                win = modest_msg_edit_window_new (msg, account);
                
                g_object_unref (G_OBJECT(msg));
index fb04340..73b4199 100644 (file)
@@ -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);
 
 
 TnyFolderType modest_tny_folder_get_local_folder_type  (const TnyFolder *folder);
 
 
-
 /**
  * modest_tny_folder_get_rules:
  * @folder: a valid tnymail 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);
 
  */
 ModestTnyFolderRules  modest_tny_folder_get_rules   (const TnyFolder *folder);
 
-
-
-
-
-
 G_END_DECLS
 
 #endif /* __MODEST_TNY_FOLDER_H__*/
 G_END_DECLS
 
 #endif /* __MODEST_TNY_FOLDER_H__*/
index 7a71ad4..4c5b67d 100644 (file)
@@ -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);
        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));
                       
        /* 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)
 {
 static gboolean
 is_ascii(const gchar *s)
 {
+       if (!s)
+               return TRUE;
        while (s[0]) {
                if (s[0] & 128 || s[0] < 32)
                        return FALSE;
        while (s[0]) {
                if (s[0] & 128 || s[0] < 32)
                        return FALSE;
index 27b7309..339162d 100644 (file)
@@ -35,6 +35,8 @@
 #include <string.h>
 #include <modest-runtime.h>
 #include <modest-tny-msg.h>
 #include <string.h>
 #include <modest-runtime.h>
 #include <modest-tny-msg.h>
+#include <modest-tny-account.h>
+
 #include "modest-ui-actions.h"
 
 #include "modest-tny-platform-factory.h"
 #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;
 typedef struct _ReplyForwardHelper {
 guint reply_forward_type;
        ReplyForwardAction action;
-       gchar *account;
+       gchar *account_name;
 } ReplyForwardHelper;
 
 
 } 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);
                                /* 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));
                        }
 
                        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;
 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));        
        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));
        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;
        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(),
        
        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 = 
        /* 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;
                                                                 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 ();
                break;
        default:
                g_return_if_reached ();
+               return;
        }
 
        if (!new_msg) {
        }
 
        if (!new_msg) {
-               g_warning ("Unable to create a message");
+               g_printerr ("modest: failed to create message\n");
                goto cleanup;
        }
                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 */
        /* 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));
        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);
 }
 
        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;
        TnyFolder *folder;
        GetMsgAsyncHelper *helper;
        ReplyForwardHelper *rf_helper;
-
+       
        g_return_if_fail (MODEST_IS_WINDOW(win));
 
        header_list = get_selected_headers (win);       
        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);
        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
        /* 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 = 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;
 
        helper = g_slice_new0 (GetMsgAsyncHelper);
        //helper->main_window = NULL;