* Fixes a crash when removing accounts. Added by a code I commited today
authorSergio Villar Senin <svillar@igalia.com>
Fri, 18 Apr 2008 12:23:57 +0000 (12:23 +0000)
committerSergio Villar Senin <svillar@igalia.com>
Fri, 18 Apr 2008 12:23:57 +0000 (12:23 +0000)
* Adds a new parameter to get_send_queue that tells the runtime to create it or not if it does not exist

pmo-trunk-r4431

src/dbus_api/modest-dbus-callbacks.c
src/modest-mail-operation.c
src/modest-runtime.c
src/modest-runtime.h
src/modest-tny-account-store.c
src/modest-tny-send-queue.c
src/modest-ui-actions.c

index a64c938..24cd7a8 100644 (file)
@@ -846,7 +846,7 @@ on_dbus_method_dump_send_queues (DBusConnection *con, DBusMessage *message)
                if (TNY_IS_ACCOUNT(acc)) {
                        gchar *tmp, *url = tny_account_get_url_string (acc);
                        ModestTnySendQueue *sendqueue =
-                               modest_runtime_get_send_queue (TNY_TRANSPORT_ACCOUNT(acc));
+                               modest_runtime_get_send_queue (TNY_TRANSPORT_ACCOUNT(acc), TRUE);
                        gchar *queue_str = modest_tny_send_queue_to_string (sendqueue);
                        
                        tmp = g_strdup_printf ("%s[%s]: '%s': %s\n%s",
index 001d4ae..a885498 100644 (file)
@@ -504,7 +504,8 @@ modest_mail_operation_cancel (ModestMailOperation *self)
 
        if (priv->op_type == MODEST_MAIL_OPERATION_TYPE_SEND) {
                ModestTnySendQueue *queue;
-               queue = modest_runtime_get_send_queue (TNY_TRANSPORT_ACCOUNT (priv->account));
+               queue = modest_runtime_get_send_queue (TNY_TRANSPORT_ACCOUNT (priv->account),
+                                                      TRUE);
 
                /* Cancel the sending of the following next messages */
                tny_send_queue_cancel (TNY_SEND_QUEUE (queue), TNY_SEND_QUEUE_CANCEL_ACTION_SUSPEND, NULL);
@@ -619,7 +620,7 @@ modest_mail_operation_send_mail (ModestMailOperation *self,
        priv->done = 1;
        priv->total = 1;
 
-       send_queue = TNY_SEND_QUEUE (modest_runtime_get_send_queue (transport_account));
+       send_queue = TNY_SEND_QUEUE (modest_runtime_get_send_queue (transport_account, TRUE));
        if (!TNY_IS_SEND_QUEUE(send_queue)) {
                if (priv->error) {
                        g_error_free (priv->error);
@@ -1411,7 +1412,7 @@ inbox_refreshed_cb (TnyFolder *inbox,
                TnyFolder *outbox;
                guint num_messages;
 
-               send_queue = modest_runtime_get_send_queue (transport_account);
+               send_queue = modest_runtime_get_send_queue (transport_account, TRUE);
                g_object_unref (transport_account);
 
                /* Get outbox folder */
@@ -2510,7 +2511,7 @@ modest_mail_operation_remove_msgs (ModestMailOperation *self,
                traccount = modest_tny_account_store_get_transport_account_from_outbox_header(accstore, header);
                if (traccount) {
                        ModestTnySendQueueStatus status;
-                       ModestTnySendQueue *send_queue = modest_runtime_get_send_queue(traccount);
+                       ModestTnySendQueue *send_queue = modest_runtime_get_send_queue(traccount, TRUE);
                        TnyIterator *iter = tny_list_create_iterator(headers);
                        g_object_unref(remove_headers);
                        remove_headers = TNY_LIST(tny_simple_list_new());
index 26ed013..b7fa5e7 100644 (file)
@@ -189,11 +189,12 @@ modest_runtime_get_platform_factory  (void)
 }
 
 ModestTnySendQueue*
-modest_runtime_get_send_queue  (TnyTransportAccount *account)
+modest_runtime_get_send_queue  (TnyTransportAccount *account,
+                               gboolean create)
 {
        ModestCacheMgr *cache_mgr;
        GHashTable     *send_queue_cache;
-       gpointer       orig_key, send_queue;
+       gpointer       orig_key = NULL, send_queue = NULL;
        
        g_return_val_if_fail (_singletons, NULL);
        g_return_val_if_fail (TNY_IS_TRANSPORT_ACCOUNT(account), NULL);
@@ -206,7 +207,8 @@ modest_runtime_get_send_queue  (TnyTransportAccount *account)
         * Note that each modest account will have its own outbox folder, 
         * returned by TnySendQueue::get_outbox_func().
         */
-       if (!g_hash_table_lookup_extended (send_queue_cache, account, &orig_key, &send_queue)) {
+       if (!g_hash_table_lookup_extended (send_queue_cache, account, &orig_key, &send_queue) &&
+           create) {
                /* Note that this send queue will start sending messages from its outbox 
                 * as soon as it is instantiated: */
                send_queue = (gpointer)modest_tny_send_queue_new (TNY_CAMEL_TRANSPORT_ACCOUNT(account));
@@ -231,7 +233,7 @@ modest_runtime_get_send_queue  (TnyTransportAccount *account)
                                     g_object_ref (send_queue));
        }
 
-       return MODEST_TNY_SEND_QUEUE(send_queue);
+       return (send_queue) ? MODEST_TNY_SEND_QUEUE(send_queue) : NULL;
 }
 
 void modest_runtime_remove_all_send_queues ()
index 53bccbd..5726a3d 100644 (file)
@@ -186,13 +186,15 @@ ModestMailOperationQueue* modest_runtime_get_mail_operation_queue (void);
 /**
  * modest_runtime_get_send_queue:
  * @account: a valid TnyTransportAccount
+ * @create: whether or not a new send queue should be created if it does not exist
  * 
  * get the send queue for the given account
  *
  * Returns: the #ModestTnySendQueue singleton instance for this account
  * (ie., one singleton per account). This should NOT be unref'd.
  **/
-ModestTnySendQueue* modest_runtime_get_send_queue        (TnyTransportAccount *account);
+ModestTnySendQueue* modest_runtime_get_send_queue        (TnyTransportAccount *account,
+                                                         gboolean create);
 
 /**
  * modest_runtime_remove_send_queue:
index 088f941..5d92d16 100644 (file)
@@ -1748,12 +1748,14 @@ on_account_disconnect_when_removing (TnyCamelAccount *account,
                tny_store_account_delete_cache (TNY_STORE_ACCOUNT (account));
        } else if (TNY_IS_TRANSPORT_ACCOUNT (account)) {
                ModestTnySendQueue* send_queue;
-               send_queue = modest_runtime_get_send_queue (TNY_TRANSPORT_ACCOUNT (account));
-               if (modest_tny_send_queue_sending_in_progress (send_queue))
-                       tny_send_queue_cancel (TNY_SEND_QUEUE (send_queue),
-                                              TNY_SEND_QUEUE_CANCEL_ACTION_REMOVE, 
-                                              NULL);
-               modest_runtime_remove_send_queue (TNY_TRANSPORT_ACCOUNT (account));
+               send_queue = modest_runtime_get_send_queue (TNY_TRANSPORT_ACCOUNT (account), FALSE);
+               if (send_queue) {
+                       if (modest_tny_send_queue_sending_in_progress (send_queue))
+                               tny_send_queue_cancel (TNY_SEND_QUEUE (send_queue),
+                                                      TNY_SEND_QUEUE_CANCEL_ACTION_REMOVE, 
+                                                      NULL);
+                       modest_runtime_remove_send_queue (TNY_TRANSPORT_ACCOUNT (account));
+               }
        }
 }
 
@@ -1992,7 +1994,7 @@ modest_tny_account_store_get_transport_account_from_outbox_header(ModestTnyAccou
                TnyTransportAccount *account = TNY_TRANSPORT_ACCOUNT (tny_iterator_get_current (acc_iter));
                ModestTnySendQueue *send_queue;
                ModestTnySendQueueStatus status;
-               send_queue = modest_runtime_get_send_queue(TNY_TRANSPORT_ACCOUNT(account));
+               send_queue = modest_runtime_get_send_queue(TNY_TRANSPORT_ACCOUNT(account), TRUE);
                status = modest_tny_send_queue_get_msg_status(send_queue, msg_id);
                if (status != MODEST_TNY_SEND_QUEUE_UNKNOWN) {
                        header_acc = g_object_ref(account);
index b18c964..b67a9d9 100644 (file)
@@ -700,7 +700,7 @@ modest_tny_all_send_queues_get_msg_status (TnyHeader *header)
                iter = tny_list_create_iterator (accounts);
                while (!tny_iterator_is_done (iter)) {                  
                        account = TNY_TRANSPORT_ACCOUNT(tny_iterator_get_current (iter));
-                       send_queue = modest_runtime_get_send_queue(TNY_TRANSPORT_ACCOUNT(account));
+                       send_queue = modest_runtime_get_send_queue(TNY_TRANSPORT_ACCOUNT(account), TRUE);
                        g_object_unref(account);
 
                        queue_status = modest_tny_send_queue_get_msg_status (send_queue, msg_uid);
index 765dc88..d4c6622 100644 (file)
@@ -904,7 +904,7 @@ open_msg_cb (ModestMailOperation *mail_op,
                        char *msg_id;
                        account = g_strdup(modest_tny_account_get_parent_modest_account_name_for_server_account(
                                                   TNY_ACCOUNT(traccount)));
-                       send_queue = modest_runtime_get_send_queue(traccount);
+                       send_queue = modest_runtime_get_send_queue(traccount, TRUE);
                        msg_id = modest_tny_send_queue_get_msg_id (header);
                        status = modest_tny_send_queue_get_msg_status(send_queue, msg_id);
                        /* Only open messages in outbox with the editor if they are in Failed state */
@@ -1997,7 +1997,7 @@ modest_ui_actions_do_cancel_send (const gchar *account_name,
        }
 
        /* Get send queue*/
-       send_queue = TNY_SEND_QUEUE (modest_runtime_get_send_queue (transport_account));
+       send_queue = TNY_SEND_QUEUE (modest_runtime_get_send_queue (transport_account, TRUE));
        if (!TNY_IS_SEND_QUEUE(send_queue)) {
                g_set_error (&error, MODEST_MAIL_OPERATION_ERROR,
                             MODEST_MAIL_OPERATION_ERROR_ITEM_NOT_FOUND,