* add debugging code to the send-queue and the operations-queue;
[modest] / src / modest-mail-operation.c
index ae6f9ae..48f3c14 100644 (file)
@@ -635,20 +635,21 @@ modest_mail_operation_send_mail (ModestMailOperation *self,
        } else {
                /* Add the msg to the queue */
                modest_mail_operation_notify_start (self);
-               modest_tny_send_queue_add (MODEST_TNY_SEND_QUEUE(send_queue), 
-                                          msg, 
-                                          &(priv->error));
-
-               priv->status = MODEST_MAIL_OPERATION_STATUS_IN_PROGRESS;
 
                info = g_slice_new0 (SendMsgInfo);
 
                info->mail_op = g_object_ref (self);
                info->msg = g_object_ref (msg);
                info->msg_sent_handler = g_signal_connect (G_OBJECT (send_queue), "msg-sent",
-                                                          G_CALLBACK (send_mail_msg_sent_handler), info);
+                               G_CALLBACK (send_mail_msg_sent_handler), info);
                info->error_happened_handler = g_signal_connect (G_OBJECT (send_queue), "error-happened",
-                                                                G_CALLBACK (send_mail_error_happened_handler), info);
+                               G_CALLBACK (send_mail_error_happened_handler), info);
+
+               modest_tny_send_queue_add (MODEST_TNY_SEND_QUEUE(send_queue), 
+                               msg, 
+                               &(priv->error));
+
+               priv->status = MODEST_MAIL_OPERATION_STATUS_IN_PROGRESS;
        }
 
 }
@@ -707,6 +708,8 @@ send_mail_error_happened_handler (TnySendQueue *queue, TnyHeader *header, TnyMsg
        if (msgid2 == NULL) msgid2 = "(null)";
 
        if (!strcmp (msgid1, msgid2)) {
+               if (error != NULL)
+                       g_warning ("%s: %s\n", __FUNCTION__, error->message);
                ModestMailOperationPrivate *priv = MODEST_MAIL_OPERATION_GET_PRIVATE (info->mail_op);
                priv->status = MODEST_MAIL_OPERATION_STATUS_FAILED;
                g_set_error (&(priv->error), MODEST_MAIL_OPERATION_ERROR,
@@ -872,8 +875,16 @@ modest_mail_operation_send_new_mail_cb (ModestMailOperation *self,
        /* Remove old mail from its source folder */
        draft_folder = modest_tny_account_get_special_folder (TNY_ACCOUNT (info->transport_account),
                                                              TNY_FOLDER_TYPE_DRAFTS);
+       if (!draft_folder) {
+               g_warning ("%s: modest_tny_account_get_special_folder(..) returned a NULL drafts folder", __FUNCTION__);
+               goto end;
+       }
        outbox_folder = modest_tny_account_get_special_folder (TNY_ACCOUNT (info->transport_account),
                                                               TNY_FOLDER_TYPE_OUTBOX);
+       if (!outbox_folder) {
+               g_warning ("%s: modest_tny_account_get_special_folder(..) returned a NULL outbox folder", __FUNCTION__);
+               goto end;
+       }
        if (info->draft_msg != NULL) {
                TnyFolder *folder = NULL;
                TnyFolder *src_folder = NULL;
@@ -1051,13 +1062,15 @@ modest_mail_operation_save_to_drafts_cb (ModestMailOperation *self,
        priv = MODEST_MAIL_OPERATION_GET_PRIVATE(self);
 
        if (!msg) {
-               g_set_error (&(priv->error), MODEST_MAIL_OPERATION_ERROR,
-                            MODEST_MAIL_OPERATION_ERROR_INSTANCE_CREATION_FAILED,
-                            "modest: failed to create a new msg\n");
+               if (!(priv->error)) {
+                       g_set_error (&(priv->error), MODEST_MAIL_OPERATION_ERROR,
+                                    MODEST_MAIL_OPERATION_ERROR_INSTANCE_CREATION_FAILED,
+                                    "modest: failed to create a new msg\n");
+               }
        } else {
                drafts = modest_tny_account_get_special_folder (TNY_ACCOUNT (info->transport_account),
                                                                TNY_FOLDER_TYPE_DRAFTS);
-               if (!drafts) {
+               if (!drafts && !(priv->error)) {
                        g_set_error (&(priv->error), MODEST_MAIL_OPERATION_ERROR,
                                     MODEST_MAIL_OPERATION_ERROR_ITEM_NOT_FOUND,
                                     "modest: failed to create a new msg\n");
@@ -1773,6 +1786,8 @@ modest_mail_operation_remove_folder (ModestMailOperation *self,
                                                    TNY_FOLDER_STORE (trash_folder), 
                                                    TRUE, NULL, NULL);
                        g_object_unref (trash_folder);
+               } else {
+                       g_warning ("%s: modest_tny_account_get_special_folder(..) returned a NULL trash folder", __FUNCTION__);
                }
        } else {
                TnyFolderStore *parent = tny_folder_get_folder_store (folder);
@@ -2478,8 +2493,9 @@ modest_mail_operation_remove_msgs (ModestMailOperation *self,
        if (!priv->error) {
                gboolean expunge, leave_on_server;
                const gchar *account_name;
+               const gchar *proto;
                TnyAccount *account;
-               ModestTransportStoreProtocol account_proto;
+               ModestTransportStoreProtocol account_proto = MODEST_PROTOCOL_TRANSPORT_STORE_UNKNOWN;
                
                account = tny_folder_get_account (folder);
                account_name = modest_tny_account_get_parent_modest_account_name_for_server_account (account);
@@ -2487,7 +2503,10 @@ modest_mail_operation_remove_msgs (ModestMailOperation *self,
                        modest_account_mgr_get_leave_on_server (modest_runtime_get_account_mgr (),
                                        account_name);
 
-               account_proto = modest_protocol_info_get_transport_store_protocol (tny_account_get_proto (account));
+               proto = tny_account_get_proto (account);
+               if (proto) {
+                       account_proto = modest_protocol_info_get_transport_store_protocol (proto);
+               }
 
                if (((account_proto == MODEST_PROTOCOL_STORE_POP) && !leave_on_server) ||
                    modest_tny_folder_is_remote_folder (folder) == FALSE)
@@ -2630,7 +2649,6 @@ transfer_msgs_cb (TnyFolder *folder, gboolean cancelled, GError *err, gpointer u
 
                        tny_iterator_next (iter);
                }
-
        }
                
 
@@ -2992,3 +3010,41 @@ modest_mail_operation_noop (ModestMailOperation *self)
        modest_mail_operation_notify_start (self);
        modest_mail_operation_notify_end (self);
 }
+
+
+gchar*
+modest_mail_operation_to_string (ModestMailOperation *self)
+{
+       const gchar *type, *status, *account_id;
+       ModestMailOperationPrivate *priv = NULL;
+       
+       g_return_val_if_fail (self, NULL);
+
+       priv = MODEST_MAIL_OPERATION_GET_PRIVATE(self);
+       
+       switch (priv->op_type) {
+       case MODEST_MAIL_OPERATION_TYPE_SEND:    type= "SEND";    break;
+       case MODEST_MAIL_OPERATION_TYPE_RECEIVE: type= "RECEIVE"; break;
+       case MODEST_MAIL_OPERATION_TYPE_OPEN:    type= "OPEN";    break;
+       case MODEST_MAIL_OPERATION_TYPE_DELETE:  type= "DELETE";  break;
+       case MODEST_MAIL_OPERATION_TYPE_INFO:    type= "INFO";    break;
+       case MODEST_MAIL_OPERATION_TYPE_UNKNOWN: type= "UNKNOWN"; break;
+       default: type = "UNEXPECTED"; break;
+       }
+
+       switch (priv->status) {
+       case MODEST_MAIL_OPERATION_STATUS_INVALID:              status= "INVALID"; break;
+       case MODEST_MAIL_OPERATION_STATUS_SUCCESS:              status= "SUCCESS"; break;
+       case MODEST_MAIL_OPERATION_STATUS_FINISHED_WITH_ERRORS: status= "FINISHED-WITH-ERRORS"; break;
+       case MODEST_MAIL_OPERATION_STATUS_FAILED:               status= "FAILED"; break;
+       case MODEST_MAIL_OPERATION_STATUS_IN_PROGRESS:          status= "IN-PROGRESS"; break;
+       case MODEST_MAIL_OPERATION_STATUS_CANCELED:             status= "CANCELLED"; break;
+       default:                                                status= "UNEXPECTED"; break;
+       } 
+
+       account_id = priv->account ? tny_account_get_id (priv->account) : "";
+       
+       return g_strdup_printf ("%p \"%s\" (%s) [%s] {%d/%d} '%s'", self, account_id,type, status,
+                               priv->done, priv->total,
+                               priv->error && priv->error->message ? priv->error->message : "");
+}