* Removed some unused code
[modest] / src / modest-mail-operation.c
index a885498..cd2c552 100644 (file)
@@ -600,6 +600,35 @@ modest_mail_operation_clone_state (ModestMailOperation *self)
 /* ************************** SEND   ACTIONS ************************* */
 /* ******************************************************************* */
 
+static void
+send_mail_on_added_to_outbox (TnySendQueue *send_queue, 
+                             gboolean cancelled, 
+                             TnyMsg *msg, 
+                             GError *err,
+                             gpointer user_data)
+{
+       ModestMailOperationPrivate *priv;
+       ModestMailOperation *self;
+
+       self = MODEST_MAIL_OPERATION (user_data);
+       priv = MODEST_MAIL_OPERATION_GET_PRIVATE (self);
+
+       if (cancelled || err)
+               goto end;
+
+       if (err) {
+               g_set_error (&(priv->error), MODEST_MAIL_OPERATION_ERROR,
+                            MODEST_MAIL_OPERATION_ERROR_SEND_QUEUE_ADD_ERROR,
+                            "Error adding a msg to the send queue\n");
+               priv->status = MODEST_MAIL_OPERATION_STATUS_FINISHED_WITH_ERRORS;
+       } else {
+               priv->status = MODEST_MAIL_OPERATION_STATUS_SUCCESS;
+       }
+ end:
+       modest_mail_operation_notify_end (self);
+       g_object_unref (self);
+}
+
 void
 modest_mail_operation_send_mail (ModestMailOperation *self,
                                 TnyTransportAccount *transport_account,
@@ -631,22 +660,15 @@ modest_mail_operation_send_mail (ModestMailOperation *self,
                             "modest: could not find send queue for account\n");
                priv->status = MODEST_MAIL_OPERATION_STATUS_FAILED;
                modest_mail_operation_notify_end (self);
-
        } else {
-               /* Add the msg to the queue */
                modest_mail_operation_notify_start (self);
-
-               tny_send_queue_add_async (send_queue, msg, NULL, NULL, NULL);
-               modest_tny_send_queue_set_requested_send_receive (MODEST_TNY_SEND_QUEUE (send_queue), FALSE);
-
-               if (priv->error) {
-                       priv->status = MODEST_MAIL_OPERATION_STATUS_FINISHED_WITH_ERRORS;
-               } else {
-                       priv->status = MODEST_MAIL_OPERATION_STATUS_SUCCESS;
-               }
-               modest_mail_operation_notify_end (self);
+               /* Add the msg to the queue. The callback will
+                  finalize the mail operation */
+               tny_send_queue_add_async (send_queue, msg, send_mail_on_added_to_outbox, 
+                                         NULL, g_object_ref (self));
+               modest_tny_send_queue_set_requested_send_receive (MODEST_TNY_SEND_QUEUE (send_queue), 
+                                                                 FALSE);
        }
-
 }
 
 
@@ -1284,6 +1306,9 @@ inbox_refreshed_cb (TnyFolder *inbox,
        priv = MODEST_MAIL_OPERATION_GET_PRIVATE (info->mail_op);
        mgr = modest_runtime_get_account_mgr ();
 
+       /* Set the last updated as the current time, do it even if the inbox refresh failed */
+       modest_account_mgr_set_last_updated (mgr, tny_account_get_id (priv->account), time (NULL));
+
        if (canceled || err) {
                priv->status = MODEST_MAIL_OPERATION_STATUS_FAILED;
                if (err)
@@ -1292,6 +1317,7 @@ inbox_refreshed_cb (TnyFolder *inbox,
                        g_set_error (&(priv->error), MODEST_MAIL_OPERATION_ERROR,
                                     MODEST_MAIL_OPERATION_ERROR_OPERATION_CANCELED,
                                     "canceled");
+
                /* Notify the user about the error and then exit */
                update_account_notify_user_and_free (info, NULL);
                return;
@@ -1330,9 +1356,6 @@ inbox_refreshed_cb (TnyFolder *inbox,
        g_object_unref (info->inbox_observer);
        info->inbox_observer = NULL;
 
-       /* Update the last updated key, even if we don't have to get new headers */
-       modest_account_mgr_set_last_updated (mgr, tny_account_get_id (priv->account), time (NULL));
-       
        if (new_headers_array->len == 0)
                goto send_mail;
 
@@ -1444,6 +1467,41 @@ inbox_refreshed_cb (TnyFolder *inbox,
        update_account_notify_user_and_free (info, new_headers);
 }
 
+static void
+inbox_refresh_status_update (GObject *obj,
+                            TnyStatus *status,
+                            gpointer user_data)
+{
+       UpdateAccountInfo *info = NULL;
+       ModestMailOperation *self = NULL;
+       ModestMailOperationPrivate *priv = NULL;
+       ModestMailOperationState *state;
+
+       g_return_if_fail (user_data != NULL);
+       g_return_if_fail (status != NULL);
+
+       /* Show only the status information we want */
+       if (status->code != TNY_FOLDER_STATUS_CODE_REFRESH)
+               return;
+
+       info = (UpdateAccountInfo *) user_data;
+       self = info->mail_op;
+       g_return_if_fail (MODEST_IS_MAIL_OPERATION(self));
+
+       priv = MODEST_MAIL_OPERATION_GET_PRIVATE(self);
+
+       priv->done = status->position;
+       priv->total = status->of_total;
+
+       state = modest_mail_operation_clone_state (self);
+
+       /* This is not a GDK lock because we are a Tinymail callback and
+        * Tinymail already acquires the Gdk lock */
+       g_signal_emit (G_OBJECT (self), signals[PROGRESS_CHANGED_SIGNAL], 0, state, NULL);
+
+       g_slice_free (ModestMailOperationState, state);
+}
+
 static void 
 recurse_folders_async_cb (TnyFolderStore *folder_store, 
                          gboolean canceled,
@@ -1544,7 +1602,7 @@ recurse_folders_async_cb (TnyFolderStore *folder_store,
                        tny_folder_add_observer (inbox, info->inbox_observer);
 
                        /* Refresh the INBOX */
-                       tny_folder_refresh_async (inbox, inbox_refreshed_cb, NULL, info);
+                       tny_folder_refresh_async (inbox, inbox_refreshed_cb, inbox_refresh_status_update, info);
                        g_object_unref (inbox);
                } else {
                        /* We could not perform the inbox refresh but
@@ -2165,6 +2223,7 @@ modest_mail_operation_rename_folder (ModestMailOperation *self,
 void 
 modest_mail_operation_get_msg (ModestMailOperation *self,
                               TnyHeader *header,
+                              gboolean progress_feedback,
                               GetMsgAsyncUserCallback user_callback,
                               gpointer user_data)
 {
@@ -2186,10 +2245,14 @@ modest_mail_operation_get_msg (ModestMailOperation *self,
        priv->account = modest_tny_folder_get_account (TNY_FOLDER(folder));
        
        /* Check for cached messages */
-       if (tny_header_get_flags (header) & TNY_HEADER_FLAG_CACHED)
-               priv->op_type = MODEST_MAIL_OPERATION_TYPE_OPEN;
-       else 
-               priv->op_type = MODEST_MAIL_OPERATION_TYPE_RECEIVE;
+       if (progress_feedback) {
+               if (tny_header_get_flags (header) & TNY_HEADER_FLAG_CACHED)
+                       priv->op_type = MODEST_MAIL_OPERATION_TYPE_OPEN;
+               else 
+                       priv->op_type = MODEST_MAIL_OPERATION_TYPE_RECEIVE;
+       } else {
+               priv->op_type = MODEST_MAIL_OPERATION_TYPE_UNKNOWN;
+       }
        
        /* Create the helper */
        helper = g_slice_new0 (GetMsgInfo);
@@ -2820,7 +2883,6 @@ modest_mail_operation_xfer_msgs (ModestMailOperation *self,
        helper->dest_folder = g_object_ref(folder);
        helper->user_callback = user_callback;
        helper->user_data = user_data;
-       helper->delete = delete_original;
        helper->last_total_bytes = 0;
        helper->sum_total_bytes = 0;
        helper->total_bytes = compute_message_list_size (headers);
@@ -2864,11 +2926,14 @@ modest_mail_operation_xfer_msgs (ModestMailOperation *self,
                leave_on_server = FALSE;
        }
 
+       /* Do not delete messages if leave on server is TRUE */
+       helper->delete = (leave_on_server) ? FALSE : delete_original;
+
        modest_mail_operation_notify_start (self);
        tny_folder_transfer_msgs_async (src_folder, 
                                        helper->headers, 
                                        folder, 
-                                       (leave_on_server) ? FALSE : delete_original, 
+                                       helper->delete, 
                                        transfer_msgs_cb, 
                                        transfer_msgs_status_cb,
                                        helper);
@@ -3083,7 +3148,7 @@ modest_mail_operation_sync_folder (ModestMailOperation *self,
        priv = MODEST_MAIL_OPERATION_GET_PRIVATE (self);
 
        priv->status = MODEST_MAIL_OPERATION_STATUS_IN_PROGRESS;
-       priv->account = TNY_ACCOUNT (tny_folder_get_account (folder));
+       priv->account = modest_tny_folder_get_account (folder);
        priv->op_type = MODEST_MAIL_OPERATION_TYPE_SYNC_FOLDER;
 
        modest_mail_operation_notify_start (self);