* all:
authorDirk-Jan C. Binnema <dirk-jan.binnema@nokia.com>
Thu, 1 Feb 2007 08:46:00 +0000 (08:46 +0000)
committerDirk-Jan C. Binnema <dirk-jan.binnema@nokia.com>
Thu, 1 Feb 2007 08:46:00 +0000 (08:46 +0000)
- add some convenience functions for sending mail
- small updates / renaming / cleanup

pmo-trunk-r773

src/modest-account-mgr-helpers.c
src/modest-account-mgr-helpers.h
src/modest-account-mgr.c
src/modest-cache-mgr.c
src/modest-defs.h
src/modest-main.c
src/widgets/modest-account-view.c

index 539a0d6..07e62d3 100644 (file)
 
 #include <modest-account-mgr-helpers.h>
 #include <modest-account-mgr-priv.h>
 
 #include <modest-account-mgr-helpers.h>
 #include <modest-account-mgr-priv.h>
-
+#include <tny-simple-list.h>
+#include <modest-runtime.h>
+#include <string.h>
 
 gboolean
 
 gboolean
-modest_account_mgr_account_set_enabled (ModestAccountMgr *self, const gchar* name,
+modest_account_mgr_set_enabled (ModestAccountMgr *self, const gchar* name,
                                        gboolean enabled)
 {
        return modest_account_mgr_set_bool (self, name,
                                        gboolean enabled)
 {
        return modest_account_mgr_set_bool (self, name,
@@ -42,7 +44,7 @@ modest_account_mgr_account_set_enabled (ModestAccountMgr *self, const gchar* nam
 
 
 gboolean
 
 
 gboolean
-modest_account_mgr_account_get_enabled (ModestAccountMgr *self, const gchar* name)
+modest_account_mgr_get_enabled (ModestAccountMgr *self, const gchar* name)
 {
        return modest_account_mgr_get_bool (self, name,
                                            MODEST_ACCOUNT_ENABLED, FALSE,
 {
        return modest_account_mgr_get_bool (self, name,
                                            MODEST_ACCOUNT_ENABLED, FALSE,
@@ -135,13 +137,13 @@ modest_account_mgr_get_account_data     (ModestAccountMgr *self, const gchar* na
        data->display_name = modest_account_mgr_get_string (self, name,
                                                            MODEST_ACCOUNT_DISPLAY_NAME,
                                                            FALSE, NULL);
        data->display_name = modest_account_mgr_get_string (self, name,
                                                            MODEST_ACCOUNT_DISPLAY_NAME,
                                                            FALSE, NULL);
-       data->fullname      = modest_account_mgr_get_string (self, name,
+       data->fullname      = modest_account_mgr_get_string (self, name,
                                                              MODEST_ACCOUNT_FULLNAME,
                                                               FALSE, NULL);
        data->email        = modest_account_mgr_get_string (self, name,
                                                            MODEST_ACCOUNT_EMAIL,
                                                            FALSE, NULL);
                                                              MODEST_ACCOUNT_FULLNAME,
                                                               FALSE, NULL);
        data->email        = modest_account_mgr_get_string (self, name,
                                                            MODEST_ACCOUNT_EMAIL,
                                                            FALSE, NULL);
-       data->enabled      = modest_account_mgr_account_get_enabled (self, name);
+       data->enabled      = modest_account_mgr_get_enabled (self, name);
 
        /* store */
        server_account     = modest_account_mgr_get_string (self, name,
 
        /* store */
        server_account     = modest_account_mgr_get_string (self, name,
@@ -234,4 +236,83 @@ modest_account_mgr_set_default_account  (ModestAccountMgr *self, const gchar* ac
 }
 
 
 }
 
 
+TnyAccount*
+modest_account_mgr_get_tny_account (ModestAccountMgr *self, const gchar* account_name,
+                                       TnyAccountType type)
+{
+       TnyAccount      *account = NULL;
+       TnyList         *accounts;
+       TnyIterator     *iter;
+       gchar           *server_account;
+       const gchar     *conf_key;
+       
+       g_return_val_if_fail (self, NULL);
+       g_return_val_if_fail (account_name, NULL);
+
+       switch (type) {
+       case TNY_ACCOUNT_TYPE_STORE:
+               conf_key = MODEST_ACCOUNT_STORE_ACCOUNT; break;
+       case TNY_ACCOUNT_TYPE_TRANSPORT:
+               conf_key = MODEST_ACCOUNT_TRANSPORT_ACCOUNT; break;
+       default:
+               g_return_val_if_reached (NULL);
+       }
+       
+       server_account = modest_account_mgr_get_string (self, account_name, conf_key, FALSE, NULL);
+       if (!server_account) {
+               g_printerr ("modest: no %s account specified for %s\n",
+                           type == TNY_ACCOUNT_TYPE_TRANSPORT ? "transport" : "store", account_name);
+               return NULL;
+       }
+       
+       accounts = tny_simple_list_new ();
+       tny_account_store_get_accounts (TNY_ACCOUNT_STORE(modest_runtime_get_account_store()),
+                                       accounts, type);        
+       iter = tny_list_create_iterator (accounts);     
+       while (tny_iterator_is_done (iter)) {
+               account = TNY_ACCOUNT(tny_iterator_get_current(iter));
+               if (strcmp (tny_account_get_id (account), server_account) == 0)
+                       break;
+       }
+       
+       g_object_unref (G_OBJECT(iter));
+       g_object_unref (G_OBJECT(accounts));
+       
+       if (!account)
+               g_printerr ("modest: no tny %s account found for %s\n",
+                           type == TNY_ACCOUNT_TYPE_TRANSPORT ? "transport" : "store", account_name);
+       else {
+               /* sanity check */
+               if ((type == TNY_ACCOUNT_TYPE_TRANSPORT && !TNY_IS_TRANSPORT_ACCOUNT(account)) ||
+                   (type == TNY_ACCOUNT_TYPE_STORE && !TNY_IS_STORE_ACCOUNT(account))) {
+                       g_printerr ("modest: tny %s acccount found for %s, but was expecting %s account\n",
+                                   type == TNY_ACCOUNT_TYPE_TRANSPORT ? "transport" : "store", account_name,
+                                   type == TNY_ACCOUNT_TYPE_TRANSPORT ? "store" : "transport");
+                       g_object_unref (G_OBJECT(account));
+                       account = NULL;
+               }
+       }
+       return account;
+}
+
+
+gchar*
+modest_account_mgr_get_from_string (ModestAccountMgr *self, const gchar* name)
+{
+       gchar *fullname, *email, *from;
+       
+       g_return_val_if_fail (self, NULL);
+       g_return_val_if_fail (name, NULL);
 
 
+       fullname      = modest_account_mgr_get_string (self, name,MODEST_ACCOUNT_FULLNAME,
+                                                      FALSE, NULL);
+       email         = modest_account_mgr_get_string (self, name, MODEST_ACCOUNT_EMAIL,
+                                                      FALSE, NULL);
+       from = g_strdup_printf ("%s <%s>",
+                               fullname ? fullname : "",
+                               email    ? email    : "");
+       g_free (fullname);
+       g_free (email);
+
+       return from;
+}
index 093c4d6..61cef7d 100644 (file)
 #include <modest-account-mgr.h>
 #include <modest-tny-account-store.h>
 
 #include <modest-account-mgr.h>
 #include <modest-tny-account-store.h>
 
+#include <tny-account.h>
+#include <tny-store-account.h>
+#include <tny-transport-account.h>
+
 G_BEGIN_DECLS
 
 typedef struct {
 G_BEGIN_DECLS
 
 typedef struct {
-       gchar *account_name;
-       gchar *hostname;
-       gchar *username;
+       TnyAccount    *tny_account;
+       gchar         *account_name;
+       gchar         *hostname;
+       gchar         *username;
        ModestProtocol proto;
        ModestProtocol proto;
-       gchar *password;
-       GSList *options;
+       gchar         *password;
+       GSList        *options;
 } ModestServerAccountData;
 
 typedef struct {
 } ModestServerAccountData;
 
 typedef struct {
-       gchar *account_name;
-       gchar *display_name;
-       gchar *fullname;
-       gchar *email;
-       gboolean enabled;
+       gchar                  *account_name;
+       gchar                  *display_name;
+       gchar                  *fullname;
+       gchar                  *email;
+       gboolean                enabled;
        ModestServerAccountData *transport_account;
        ModestServerAccountData *store_account;
 } ModestAccountData;
        ModestServerAccountData *transport_account;
        ModestServerAccountData *store_account;
 } ModestAccountData;
@@ -108,7 +113,7 @@ void       modest_account_mgr_free_account_data     (ModestAccountMgr *self,
 
 
 /**
 
 
 /**
- * modest_account_mgr_account_set_enabled
+ * modest_account_mgr_set_enabled
  * @self: a ModestAccountMgr instance
  * @name: the account name 
  * @enabled: if TRUE, the account will be enabled, if FALSE, it will be disabled
  * @self: a ModestAccountMgr instance
  * @name: the account name 
  * @enabled: if TRUE, the account will be enabled, if FALSE, it will be disabled
@@ -117,11 +122,11 @@ void       modest_account_mgr_free_account_data     (ModestAccountMgr *self,
  *
  * Returns: TRUE if it worked, FALSE otherwise
  */
  *
  * Returns: TRUE if it worked, FALSE otherwise
  */
-gboolean modest_account_mgr_account_set_enabled (ModestAccountMgr *self, const gchar* name,
-                                                gboolean enabled);
+gboolean modest_account_mgr_set_enabled (ModestAccountMgr *self, const gchar* name,
+                                        gboolean enabled);
 
 /**
 
 /**
- * modest_account_mgr_account_get_enabled:
+ * modest_account_mgr_get_enabled:
  * @self: a ModestAccountMgr instance
  * @name: the account name to check
  *
  * @self: a ModestAccountMgr instance
  * @name: the account name to check
  *
@@ -129,7 +134,35 @@ gboolean modest_account_mgr_account_set_enabled (ModestAccountMgr *self, const g
  *
  * Returns: TRUE if it is enabled, FALSE otherwise
  */
  *
  * Returns: TRUE if it is enabled, FALSE otherwise
  */
-gboolean modest_account_mgr_account_get_enabled (ModestAccountMgr *self, const gchar* name);
+gboolean modest_account_mgr_get_enabled (ModestAccountMgr *self, const gchar* name);
+
+
+
+/**
+ * modest_account_mgr_get_tny_account:
+ * @self: a #ModestAccountMgr instance
+ * @name: the account name
+ * @type: the #TnyAccountType to check; either TNY_ACCOUNT_TYPE_TRANSPORT or TNY_ACCOUNT_TYPE_STORE
+ *
+ * get the TnyAccount corresponding to the store/transport (server) accounts for some account.
+ * ie., every account has two server accounts, and for every server account there is a corresponding
+ * TnyAccount 
+ *
+ * Returns: the requested TnyAccount, or NULL in case of error
+ */
+TnyAccount*  modest_account_mgr_get_tny_account (ModestAccountMgr *self, const gchar* name,
+                                                TnyAccountType type);
+
+/**
+ * modest_account_mgr_get_from_string
+ * @self: a #ModestAccountMgr instance
+ * @name: the account name
+ *
+ * get the From: string for some account; ie. "Foo Bar" <foo.bar@cuux.yy>"
+ *
+ * Returns: the newly allocated from-string, or NULL in case of error
+ */
+gchar * modest_account_mgr_get_from_string (ModestAccountMgr *self, const gchar* name);
 
 
 G_END_DECLS
 
 
 G_END_DECLS
index fc0994e..ebbf2fb 100644 (file)
@@ -81,7 +81,7 @@ on_key_change (ModestConf *conf, const gchar *key, ModestConfEvent event, gpoint
        if (is_server_account)
                enabled = TRUE;
        else 
        if (is_server_account)
                enabled = TRUE;
        else 
-               enabled = modest_account_mgr_account_get_enabled (self, account);
+               enabled = modest_account_mgr_get_enabled (self, account);
 
        /* account was changed.
         * and always notify when enabled/disabled changes
 
        /* account was changed.
         * and always notify when enabled/disabled changes
@@ -260,8 +260,7 @@ modest_account_mgr_add_account (ModestAccountMgr *self,
                        return FALSE;
                }
        }
                        return FALSE;
                }
        }
-
-       modest_account_mgr_account_set_enabled (self, name, TRUE);
+       modest_account_mgr_set_enabled (self, name, TRUE);
        
        return TRUE;
 }
        
        return TRUE;
 }
index 61fb100..f35c286 100644 (file)
@@ -69,7 +69,7 @@ modest_cache_mgr_get_type (void)
                        NULL,           /* class finalize */
                        NULL,           /* class data */
                        sizeof(ModestCacheMgr),
                        NULL,           /* class finalize */
                        NULL,           /* class data */
                        sizeof(ModestCacheMgr),
-                       1,              /* n_preallocs */
+                       0,              /* n_preallocs */
                        (GInstanceInitFunc) modest_cache_mgr_init,
                        NULL
                };
                        (GInstanceInitFunc) modest_cache_mgr_init,
                        NULL
                };
index 4160c83..b92d044 100644 (file)
@@ -42,6 +42,7 @@ enum {
        MODEST_ERR_HILDON,       /* error with Hildon (maemo-only) */
        MODEST_ERR_RUN,          /* errr running */
        MODEST_ERR_SEND,         /* error sending mail */
        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_INIT          /* error in initialization */
 };
 
index 06b627f..05ebd48 100644 (file)
 #include <modest-tny-account-store.h>
 #include <modest-tny-platform-factory.h>
 #include <modest-mail-operation.h>
 #include <modest-tny-account-store.h>
 #include <modest-tny-platform-factory.h>
 #include <modest-mail-operation.h>
-#include <modest-account-mgr-helpers.h>
 
 
-static gchar*  check_account (ModestAccountMgr* account_mgr, const gchar *account);
-TnyAccount*    get_transport_account (ModestAccountMgr *account_mgr,
-                                     ModestAccountData *account_data,
-                                     const gchar *account);
+#include <modest-account-mgr.h>
+#include <modest-account-mgr-helpers.h>
 
 
+static gchar*  check_account (const gchar *account);
 static int     start_ui (const gchar* mailto, const gchar *cc, const gchar *bcc,
                         const gchar* subject, const gchar *body);
 static int     send_mail (const gchar* account,
 static int     start_ui (const gchar* mailto, const gchar *cc, const gchar *bcc,
                         const gchar* subject, const gchar *body);
 static int     send_mail (const gchar* account,
@@ -68,8 +66,8 @@ main (int argc, char *argv[])
                
        static gboolean batch = FALSE;
        static gchar    *mailto=NULL, *subject=NULL, *bcc=NULL,
                
        static gboolean batch = FALSE;
        static gchar    *mailto=NULL, *subject=NULL, *bcc=NULL,
-                       *cc=NULL, *body=NULL, *account=NULL;
-
+               *cc=NULL, *body=NULL, *account=NULL;
+       
        static GOptionEntry options[] = {
                { "mailto", 'm', 0, G_OPTION_ARG_STRING, &mailto,
                  N_("New email to <addresses> (comma-separated)"), NULL},
        static GOptionEntry options[] = {
                { "mailto", 'm', 0, G_OPTION_ARG_STRING, &mailto,
                  N_("New email to <addresses> (comma-separated)"), NULL},
@@ -105,7 +103,6 @@ main (int argc, char *argv[])
                goto cleanup;
        }
        g_option_context_free (context);
                goto cleanup;
        }
        g_option_context_free (context);
-
        
        if (!batch) {
                if (!modest_runtime_init_ui (argc, argv)) {
        
        if (!batch) {
                if (!modest_runtime_init_ui (argc, argv)) {
@@ -114,8 +111,18 @@ main (int argc, char *argv[])
                        goto cleanup;
                } else
                        retval = start_ui (mailto, cc, bcc, subject, body);
                        goto cleanup;
                } else
                        retval = start_ui (mailto, cc, bcc, subject, body);
-       } else 
+       } else {
+               gchar *account_or_default;
+               account_or_default = check_account (account);
+               g_free (account);
+
+               if (!account_or_default) {
+                       g_printerr ("modest: account is not valid\n");
+                       retval = MODEST_ERR_PARAM;
+                       goto cleanup;
+               } 
                retval = send_mail (account, mailto, cc, bcc, subject, body);
                retval = send_mail (account, mailto, cc, bcc, subject, body);
+       }
        
 cleanup:
        g_free (mailto);
        
 cleanup:
        g_free (mailto);
@@ -164,115 +171,65 @@ start_ui (const gchar* mailto, const gchar *cc, const gchar *bcc,
        return retval;
 }
 
        return retval;
 }
 
+static gchar*
+check_account (const gchar* account)
+{
+       gchar *retval;
+       ModestAccountMgr *account_mgr;
+
+       account_mgr = modest_runtime_get_account_mgr();
+       
+       if (!account)
+               retval = modest_account_mgr_get_default_account (account_mgr);
+       else
+               retval = g_strdup (account);
+
+       /* sanity check */
+       if (!modest_account_mgr_account_exists (account_mgr, account, FALSE, NULL)) {
+               g_free (retval);
+               retval = NULL;
+       }
+       return retval;
+}
 
 static int
 
 static int
-send_mail (const gchar* account_,
+send_mail (const gchar* account_name,
           const gchar* mailto, const gchar *cc, const gchar *bcc,
           const gchar* subject, const gchar *body)
 {
           const gchar* mailto, const gchar *cc, const gchar *bcc,
           const gchar* subject, const gchar *body)
 {
-       ModestAccountMgr *account_mgr;
-       ModestMailOperation *mail_operation = NULL;
-       TnyTransportAccount *account = NULL;
-       ModestAccountData *account_data;
-       gchar *account_name = NULL, *sender_name = NULL;
        int retval;
        int retval;
-
-       account_mgr = modest_runtime_get_account_mgr ();
+       TnyTransportAccount *account;
+       ModestMailOperation *mail_operation = NULL;
+       ModestAccountMgr    *account_mgr;
+       gchar               *from_string;
        
        
-       account_name = check_account (account_mgr, account_);   
-       if (!account_name) 
-               return MODEST_ERR_SEND;
+       g_return_val_if_fail (account_name, MODEST_ERR_SEND);
 
 
-       account_data = modest_account_mgr_get_account_data (account_mgr, account_name);
-       if (!account_data) {
-               g_printerr ("modest: cannot get account data for %s\n", account_name);
-               g_free (account_name);
-               return MODEST_ERR_SEND;
-       }
-       account = TNY_TRANSPORT_ACCOUNT(get_transport_account (account_mgr, account_data,
-                                                              account_name));
+       account_mgr = modest_runtime_get_account_mgr ();        
+       account = modest_account_mgr_get_tny_account (account_mgr, account_name,
+                                                     TNY_ACCOUNT_TYPE_TRANSPORT);      
        if (!account) {
        if (!account) {
-               g_printerr ("modest: cannot get transport account for %s\n", account_name);
-               g_free (account_name);
-               modest_account_mgr_free_account_data (account_mgr, account_data);
+               g_printerr ("modest: no transport defined account for %s\n",
+                           account_name);
                return MODEST_ERR_SEND;
        }
                return MODEST_ERR_SEND;
        }
-
-       sender_name = g_strdup_printf ("%s <%s>",
-                                      account_data->fullname ?  account_data->fullname : "",
-                                      account_data->email    ?  account_data->email : "");
+       from_string = modest_account_mgr_get_from_string (account_mgr, account_name);
 
        mail_operation = modest_mail_operation_new ();
 
        mail_operation = modest_mail_operation_new ();
-       modest_mail_operation_send_new_mail (mail_operation,
-                                            account,
-                                            sender_name,
-                                            mailto,
+       modest_mail_operation_send_new_mail (mail_operation, account,
+                                            from_string, mailto,
                                             cc, bcc, subject, body,
                                             NULL);
                                             cc, bcc, subject, body,
                                             NULL);
-
        if (modest_mail_operation_get_status (mail_operation) == 
            MODEST_MAIL_OPERATION_STATUS_FAILED) {
                retval = MODEST_ERR_SEND;
        } else
                retval = MODEST_ERR_NONE; /* hurray! */
 
        if (modest_mail_operation_get_status (mail_operation) == 
            MODEST_MAIL_OPERATION_STATUS_FAILED) {
                retval = MODEST_ERR_SEND;
        } else
                retval = MODEST_ERR_NONE; /* hurray! */
 
-       g_free (sender_name);
-       g_free (account_name);
-       modest_account_mgr_free_account_data (account_mgr, account_data);
-                       
-       return retval;
-}
-
-
-
-               
-static gchar*
-check_account (ModestAccountMgr* account_mgr, const gchar *account)
-{
-       gchar *account_or_default;
-
-       if (account)
-               account_or_default = g_strdup(account);
-       else {
-               account_or_default = modest_account_mgr_get_default_account (account_mgr);
-               if (!account_or_default) {
-                       g_printerr ("modest: no default account has been defined\n");
-                       return NULL;
-               }
-       }               
-
-       if (!modest_account_mgr_account_exists (account_mgr, account_or_default, FALSE, NULL)) {
-               g_printerr ("modest: account %s is undefined\n", account_or_default);
-               return NULL;
-       }
-
-       return account_or_default;
-}
-
-
-TnyAccount*
-get_transport_account (ModestAccountMgr *account_mgr,
-                      ModestAccountData *account_data,
-                      const gchar *account_name)
-{
-       TnyAccount *account;
+       g_object_unref (G_OBJECT(mail_operation));
+       g_free (from_string);
        
        
-       if (!account_data->transport_account || !account_data->transport_account->account_name) {
-               g_printerr ("modest: no transport account defined for %s\n", account_name);
-               return NULL;
-       }
-
-       account = (modest_tny_account_store_get_tny_account_from_server_account (
-                          modest_runtime_get_account_store(),
-                          account_data->transport_account->account_name));
-       
-       if (!TNY_IS_TRANSPORT_ACCOUNT(account)) {
-               g_printerr ("modest: no valid transport account defined for %s\n", account_name);
-               g_object_unref (G_OBJECT(account));
-               return NULL;
-       }
-
-       return account;
+       return retval;
 }
 
        
 }
 
        
index a6c9379..cfaa5e6 100644 (file)
@@ -180,7 +180,7 @@ update_account_view (ModestAccountMgr *account_mgr, ModestAccountView *view)
                                g_free(store);
                        }
                
                                g_free(store);
                        }
                
-                       enabled = modest_account_mgr_account_get_enabled (account_mgr, account_name);
+                       enabled = modest_account_mgr_get_enabled (account_mgr, account_name);
                        gtk_list_store_insert_with_values (
                                model, NULL, 0,
                                ENABLED_COLUMN, enabled,
                        gtk_list_store_insert_with_values (
                                model, NULL, 0,
                                ENABLED_COLUMN, enabled,
@@ -241,7 +241,7 @@ on_account_enable_toggled (GtkCellRendererToggle *cell_renderer, gchar *path,
                            -1);
        
        /* toggle enabled / disabled */
                            -1);
        
        /* toggle enabled / disabled */
-       modest_account_mgr_account_set_enabled (priv->account_mgr, account_name, !enabled);
+       modest_account_mgr_set_enabled (priv->account_mgr, account_name, !enabled);
        g_free (account_name);
 }
 
        g_free (account_name);
 }