From: Sergio Villar Senin Date: Fri, 18 Apr 2008 12:23:57 +0000 (+0000) Subject: * Fixes a crash when removing accounts. Added by a code I commited today X-Git-Tag: git_migration_finished~1448 X-Git-Url: http://git.maemo.org/git/?p=modest;a=commitdiff_plain;h=2b6c4fa7f90c2e9e24627eba531e3f03f7a6391f * Fixes a crash when removing accounts. Added by a code I commited today * 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 --- diff --git a/src/dbus_api/modest-dbus-callbacks.c b/src/dbus_api/modest-dbus-callbacks.c index a64c938..24cd7a8 100644 --- a/src/dbus_api/modest-dbus-callbacks.c +++ b/src/dbus_api/modest-dbus-callbacks.c @@ -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", diff --git a/src/modest-mail-operation.c b/src/modest-mail-operation.c index 001d4ae..a885498 100644 --- a/src/modest-mail-operation.c +++ b/src/modest-mail-operation.c @@ -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()); diff --git a/src/modest-runtime.c b/src/modest-runtime.c index 26ed013..b7fa5e7 100644 --- a/src/modest-runtime.c +++ b/src/modest-runtime.c @@ -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 () diff --git a/src/modest-runtime.h b/src/modest-runtime.h index 53bccbd..5726a3d 100644 --- a/src/modest-runtime.h +++ b/src/modest-runtime.h @@ -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: diff --git a/src/modest-tny-account-store.c b/src/modest-tny-account-store.c index 088f941..5d92d16 100644 --- a/src/modest-tny-account-store.c +++ b/src/modest-tny-account-store.c @@ -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); diff --git a/src/modest-tny-send-queue.c b/src/modest-tny-send-queue.c index b18c964..b67a9d9 100644 --- a/src/modest-tny-send-queue.c +++ b/src/modest-tny-send-queue.c @@ -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); diff --git a/src/modest-ui-actions.c b/src/modest-ui-actions.c index 765dc88..d4c6622 100644 --- a/src/modest-ui-actions.c +++ b/src/modest-ui-actions.c @@ -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,