* Added per-message size limit to send&receive
[modest] / src / modest-main.c
index 9d658a1..030ac4f 100644 (file)
@@ -40,6 +40,9 @@
 #include <tny-simple-list.h>
 
 #include <modest-runtime.h>
+#include <modest-platform.h>
+#include <modest-init.h>
+
 #include <modest-defs.h>
 #include <modest-tny-account-store.h>
 #include <modest-tny-platform-factory.h>
 #include <widgets/modest-msg-edit-window.h>
 
 typedef enum {
-       MODEST_ERR_NONE    = 0,  /* no error */
-       MODEST_ERR_OPTIONS,      /* error in the options */
-       MODEST_ERR_CONF,         /* error getting confuration db */
-       MODEST_ERR_UI,           /* error in the UI */
-       MODEST_ERR_HILDON,       /* error with Hildon (maemo-only) */
-       MODEST_ERR_RUN,          /* errr running */
-       MODEST_ERR_SEND,         /* error sending mail */
-       MODEST_ERR_PARAM,        /* error in one or more of the parameters */
-       MODEST_ERR_INIT          /* error in initialization */
+       MODEST_ERR_NONE    = 0,   /* no error */
+       MODEST_ERR_OPTIONS = 1,   /* error in the options */
+       MODEST_ERR_CONF    = 2,   /* error getting confuration db */
+       MODEST_ERR_UI      = 3,   /* error in the UI */
+       MODEST_ERR_HILDON  = 4,   /* error with Hildon (maemo-only) */
+       MODEST_ERR_RUN     = 5,   /* error running */
+       MODEST_ERR_SEND    = 6,   /* error sending mail */
+       MODEST_ERR_PARAM   = 7,   /* error in one or more of the parameters */
+       MODEST_ERR_INIT    = 8    /* error in initialization */
 } ModestErrorCode;
 
 static gchar*           check_account (const gchar *account);
@@ -103,11 +106,6 @@ main (int argc, char *argv[])
                { NULL, 0, 0, 0, NULL, NULL, NULL }
        };
 
-       if (!modest_runtime_init ()) {
-               g_printerr ("modest: cannot init runtime\n");
-               return MODEST_ERR_INIT;
-       }
-       
        context = g_option_context_new (NULL);
        g_option_context_add_main_entries (context, options, NULL);
        
@@ -120,19 +118,35 @@ main (int argc, char *argv[])
                goto cleanup;
        }
        g_option_context_free (context);
-
+       
+       if (!modest_init_init_core ()) {
+               g_printerr ("modest: cannot init modest core\n");
+               return MODEST_ERR_INIT;
+               
+       }
+       
        account_or_default = check_account (account);
        g_free (account);
        
        if (!batch) {
-               if (!modest_runtime_init_ui (argc, argv)) {
-                       g_printerr ("modest: cannot start ui\n");
+               if (!modest_init_init_ui (argc, argv)) {
+                       g_printerr ("modest: cannot init modest ui\n");
                        retval = MODEST_ERR_UI;
                        goto cleanup;
-               } else
+               } else {
+                       if (modest_conf_get_bool (modest_runtime_get_conf(),
+                                                 MODEST_CONF_CONNECT_AT_STARTUP, NULL))
+                               modest_platform_connect_and_wait(NULL);
+                       
                        retval = start_ui (account_or_default,
                                           mailto, cc, bcc, subject, body);
+               }
        } else {
+               if (!account_or_default) {
+                       g_printerr ("modest: no account has been defined yet\n");
+                       retval = MODEST_ERR_CONF;
+                       goto cleanup;
+               }       
                retval = send_mail (account_or_default,
                                    mailto, cc, bcc, subject, body);
        }
@@ -144,35 +158,65 @@ cleanup:
        g_free (cc);
        g_free (body);
        g_free (account);
-
-       if (!modest_runtime_uninit ()) 
-               g_printerr ("modest: modest_runtime_uninit failed\n");
+       
+       if (!modest_init_uninit ()) 
+               g_printerr ("modest: modest_init_uninit failed\n");
 
        return retval;
 }
 
 
 static ModestErrorCode 
-start_ui (const gchar *account, const gchar* mailto, const gchar *cc, const gchar *bcc,
+start_ui (const gchar *account_name, const gchar* mailto, const gchar *cc, const gchar *bcc,
          const gchar* subject, const gchar *body)
 {
        ModestWindow *win = NULL;
 
        if (mailto||cc||bcc||subject||body) {           
                gchar *from;
-               TnyMsg *msg;
-
-               if (!account) {
-                       g_printerr ("modest: no valid account provided, nor is default one available\n");
+               TnyMsg     *msg;
+               TnyFolder  *folder;
+               TnyAccount *account;
+               
+               if (!account_name) {
+                       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);
+               from = modest_account_mgr_get_from_string (modest_runtime_get_account_mgr(),
+                                                          account_name);
                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;
+               }
+
+               account = modest_tny_account_store_get_transport_account_for_open_connection (
+                       modest_runtime_get_account_store(), account_name);
+               if (!account) {
+                       g_printerr ("modest: failed to get tny account folder\n");
+                       g_free (from);
+                       g_object_unref (G_OBJECT(msg));
+                       return MODEST_ERR_SEND;
+               }
                
-               win = modest_msg_edit_window_new (MODEST_EDIT_TYPE_NEW);
-               modest_msg_edit_window_set_msg  (MODEST_MSG_EDIT_WINDOW(win), msg);
+               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));
+                       g_object_unref (G_OBJECT(account));
+                       return MODEST_ERR_SEND;
+               }
+               tny_folder_add_msg (folder, msg, NULL); /* FIXME: check err */
+
+               win = modest_msg_edit_window_new (msg, account_name);
                
                g_object_unref (G_OBJECT(msg));
+               g_object_unref (G_OBJECT(account));
+               g_object_unref (G_OBJECT(folder));
                g_free (from);
        } else 
                win = modest_main_window_new ();
@@ -180,6 +224,9 @@ start_ui (const gchar *account, const gchar* mailto, const gchar *cc, const gcha
        if (!win) {
                g_printerr ("modest: failed to create window\n");
                return MODEST_ERR_UI;
+       } else {
+               ModestWindowMgr *mgr = modest_runtime_get_window_mgr ();
+               modest_window_mgr_register_window (mgr, win);
        }
        
        gtk_widget_show_all (GTK_WIDGET (win));
@@ -202,7 +249,7 @@ check_account (const gchar* account)
                retval = g_strdup (account);
 
        /* sanity check */
-       if (!account || !modest_account_mgr_account_exists (account_mgr, account, FALSE, NULL)) {
+       if (!account || !modest_account_mgr_account_exists (account_mgr, account, FALSE)) {
                g_free (retval);
                retval = NULL;
        }
@@ -221,9 +268,13 @@ send_mail (const gchar* account_name,
        
        g_return_val_if_fail (account_name, MODEST_ERR_SEND);
 
-       account = TNY_TRANSPORT_ACCOUNT (modest_tny_account_store_get_tny_account_by_account
-                                        (modest_runtime_get_account_store(), account_name,
-                                         TNY_ACCOUNT_TYPE_TRANSPORT));
+       ////////////////////// FIXME ////////
+       modest_runtime_not_implemented (NULL);
+       return MODEST_ERR_NONE;
+       //////////////////////////////////////
+       
+       account = TNY_TRANSPORT_ACCOUNT (modest_tny_account_store_get_transport_account_for_open_connection
+                                        (modest_runtime_get_account_store(), account_name));
        if (!account) {
                g_printerr ("modest: no transport defined account for %s\n",
                            account_name);
@@ -232,11 +283,12 @@ send_mail (const gchar* account_name,
        from_string = modest_account_mgr_get_from_string (modest_runtime_get_account_mgr(),
                                                          account_name);
 
-       mail_operation = modest_mail_operation_new ();
+       mail_operation = modest_mail_operation_new (MODEST_MAIL_OPERATION_TYPE_SEND, NULL);
+
        modest_mail_operation_send_new_mail (mail_operation, account,
                                             from_string, mailto,
-                                            cc, bcc, subject, body,
-                                            NULL);
+                                            cc, bcc, subject, body, NULL /* html_body */,
+                                            NULL /* attachments */, 0 /* priority */);
        if (modest_mail_operation_get_status (mail_operation) == 
            MODEST_MAIL_OPERATION_STATUS_FAILED) {
                retval = MODEST_ERR_SEND;