X-Git-Url: http://git.maemo.org/git/?a=blobdiff_plain;f=src%2Fmodest-mail-operation.c;h=08318087030961b15416a4b88726c95c6870b796;hb=ce57cdcc1da651d4c18119dcd9b73898c770b54b;hp=a8e1025e77461fbdade4e3f3afa258b24bfce815;hpb=2cf033d1c7ff0cc8a0c6e723ecda0cff03d1e531;p=modest diff --git a/src/modest-mail-operation.c b/src/modest-mail-operation.c index a8e1025..0831808 100644 --- a/src/modest-mail-operation.c +++ b/src/modest-mail-operation.c @@ -35,6 +35,8 @@ #include #include #include +#include +#include #include #include #include @@ -644,7 +646,7 @@ modest_mail_operation_save_to_drafts (ModestMailOperation *self, header = tny_msg_get_header (draft_msg); /* Remove the old draft expunging it */ tny_folder_remove_msg (folder, header, NULL); - tny_folder_sync (folder, TRUE, &(priv->error)); + tny_folder_sync (folder, FALSE, &(priv->error)); /* FALSE --> don't expunge */ g_object_unref (header); } @@ -799,8 +801,6 @@ recurse_folders (TnyFolderStore *store, TnyFolderStoreQuery *query, TnyList *all static gboolean idle_notify_progress (gpointer data) { - gdk_threads_enter (); - ModestMailOperation *mail_op = MODEST_MAIL_OPERATION (data); ModestMailOperationState *state; @@ -808,8 +808,6 @@ idle_notify_progress (gpointer data) g_signal_emit (G_OBJECT (mail_op), signals[PROGRESS_CHANGED_SIGNAL], 0, state, NULL); g_slice_free (ModestMailOperationState, state); - gdk_threads_leave (); - return TRUE; } @@ -821,8 +819,6 @@ idle_notify_progress (gpointer data) static gboolean idle_notify_progress_once (gpointer data) { - gdk_threads_enter (); - ModestPair *pair; pair = (ModestPair *) data; @@ -833,8 +829,6 @@ idle_notify_progress_once (gpointer data) g_slice_free (ModestMailOperationState, (ModestMailOperationState*)pair->second); g_object_unref (pair->first); - gdk_threads_leave (); - return FALSE; } @@ -951,7 +945,7 @@ update_account_thread (gpointer thr_user_data) Gtk+. We use a timeout in order to provide more status information, because the sync tinymail call does not provide it for the moment */ - gint timeout = g_timeout_add (250, idle_notify_progress, info->mail_op); + gint timeout = g_timeout_add (100, idle_notify_progress, info->mail_op); /* Refresh folders */ new_headers = g_ptr_array_new (); @@ -1155,13 +1149,6 @@ modest_mail_operation_update_account (ModestMailOperation *self, priv->done = 0; priv->status = MODEST_MAIL_OPERATION_STATUS_IN_PROGRESS; - /* Make sure that we have a connection, and request one - * if necessary: - * TODO: Is there some way to trigger this for every attempt to - * use the network? */ - if (!modest_platform_connect_and_wait(NULL)) - goto error; - /* Get the Modest account */ modest_account = (TnyStoreAccount *) modest_tny_account_store_get_server_account (modest_runtime_get_account_store (), @@ -1353,9 +1340,6 @@ transfer_folder_status_cb (GObject *obj, self = MODEST_MAIL_OPERATION (user_data); priv = MODEST_MAIL_OPERATION_GET_PRIVATE(self); - if ((status->position == 1) && (status->of_total == 100)) - return; - priv->done = status->position; priv->total = status->of_total; @@ -1410,7 +1394,7 @@ modest_mail_operation_xfer_folder (ModestMailOperation *self, gboolean delete_original) { ModestMailOperationPrivate *priv = NULL; - ModestTnyFolderRules parent_rules = 0, rules = 0; + ModestTnyFolderRules parent_rules = 0, rules; g_return_if_fail (MODEST_IS_MAIL_OPERATION (self)); g_return_if_fail (TNY_IS_FOLDER (folder)); @@ -1428,6 +1412,7 @@ modest_mail_operation_xfer_folder (ModestMailOperation *self, /* The moveable restriction is applied also to copy operation */ if ((!TNY_IS_FOLDER_STORE (parent)) || (rules & MODEST_FOLDER_RULES_FOLDER_NON_MOVEABLE)) { + printf("DEBUG: %s: Not allowing the move.\n", __FUNCTION__); /* Set status failed and set an error */ priv->status = MODEST_MAIL_OPERATION_STATUS_FAILED; g_set_error (&(priv->error), MODEST_MAIL_OPERATION_ERROR, @@ -1644,9 +1629,6 @@ get_msg_status_cb (GObject *obj, if(priv->status == MODEST_MAIL_OPERATION_STATUS_CANCELED) return; - if ((status->position == 1) && (status->of_total == 100)) - return; - priv->done = 1; priv->total = 1; @@ -1886,9 +1868,8 @@ modest_mail_operation_get_msgs_full (ModestMailOperation *self, void -modest_mail_operation_remove_msg (ModestMailOperation *self, - TnyHeader *header, - gboolean remove_to_trash) +modest_mail_operation_remove_msg (ModestMailOperation *self, TnyHeader *header, + gboolean remove_to_trash /*ignored*/) { TnyFolder *folder; ModestMailOperationPrivate *priv; @@ -1896,6 +1877,9 @@ modest_mail_operation_remove_msg (ModestMailOperation *self, g_return_if_fail (MODEST_IS_MAIL_OPERATION (self)); g_return_if_fail (TNY_IS_HEADER (header)); + if (remove_to_trash) + g_warning ("remove to trash is not implemented"); + priv = MODEST_MAIL_OPERATION_GET_PRIVATE (self); folder = tny_header_get_folder (header); @@ -1904,46 +1888,21 @@ modest_mail_operation_remove_msg (ModestMailOperation *self, priv->status = MODEST_MAIL_OPERATION_STATUS_IN_PROGRESS; - /* Delete or move to trash */ - if (remove_to_trash) { - TnyFolder *trash_folder; - TnyStoreAccount *store_account; - store_account = TNY_STORE_ACCOUNT (modest_tny_folder_get_account (folder)); - trash_folder = modest_tny_account_get_special_folder (TNY_ACCOUNT(store_account), - TNY_FOLDER_TYPE_TRASH); - if (trash_folder) { - TnyList *headers; - - /* Create list */ - headers = tny_simple_list_new (); - tny_list_append (headers, G_OBJECT (header)); - g_object_unref (header); - - /* Move to trash */ - modest_mail_operation_xfer_msgs (self, headers, trash_folder, TRUE, NULL, NULL); - g_object_unref (headers); -/* g_object_unref (trash_folder); */ - } else { - ModestMailOperationPrivate *priv; - - /* Set status failed and set an error */ - priv = MODEST_MAIL_OPERATION_GET_PRIVATE(self); - priv->status = MODEST_MAIL_OPERATION_STATUS_FAILED; - g_set_error (&(priv->error), MODEST_MAIL_OPERATION_ERROR, - MODEST_MAIL_OPERATION_ERROR_ITEM_NOT_FOUND, - _("Error trying to delete a message. Trash folder not found")); - } - - g_object_unref (G_OBJECT (store_account)); - } else { - tny_folder_remove_msg (folder, header, &(priv->error)); - if (!priv->error) { - tny_header_set_flags (header, TNY_HEADER_FLAG_DELETED); - tny_folder_sync(folder, TRUE, &(priv->error)); - } + tny_folder_remove_msg (folder, header, &(priv->error)); + if (!priv->error) { + tny_header_set_flags (header, TNY_HEADER_FLAG_DELETED); + + if (TNY_IS_CAMEL_IMAP_FOLDER (folder)) + tny_folder_sync(folder, FALSE, &(priv->error)); /* FALSE --> don't expunge */ + else if (TNY_IS_CAMEL_POP_FOLDER (folder)) + tny_folder_sync(folder, TRUE, &(priv->error)); /* TRUE --> expunge */ + else + /* lcoal folders */ + tny_folder_sync(folder, TRUE, &(priv->error)); /* TRUE --> expunge */ } - + + /* Set status */ if (!priv->error) priv->status = MODEST_MAIL_OPERATION_STATUS_SUCCESS; @@ -1977,9 +1936,6 @@ transfer_msgs_status_cb (GObject *obj, self = helper->mail_op; priv = MODEST_MAIL_OPERATION_GET_PRIVATE(self); - if ((status->position == 1) && (status->of_total == 100)) - return; - priv->done = status->position; priv->total = status->of_total; @@ -2049,6 +2005,9 @@ modest_mail_operation_xfer_msgs (ModestMailOperation *self, XFerMsgAsyncHelper *helper; TnyHeader *header; ModestTnyFolderRules rules; + const gchar *id1 = NULL; + const gchar *id2 = NULL; + gboolean same_folder = FALSE; g_return_if_fail (MODEST_IS_MAIL_OPERATION (self)); g_return_if_fail (TNY_IS_LIST (headers)); @@ -2066,9 +2025,35 @@ modest_mail_operation_xfer_msgs (ModestMailOperation *self, priv->status = MODEST_MAIL_OPERATION_STATUS_FAILED; g_set_error (&(priv->error), MODEST_MAIL_OPERATION_ERROR, MODEST_MAIL_OPERATION_ERROR_FOLDER_RULES, - _("FIXME: folder does not accept msgs")); + _("ckct_ib_unable_to_paste_here")); + /* Notify the queue */ + modest_mail_operation_notify_end (self, FALSE); + return; + } + + /* Get source folder */ + iter = tny_list_create_iterator (headers); + header = TNY_HEADER (tny_iterator_get_current (iter)); + src_folder = tny_header_get_folder (header); + g_object_unref (header); + g_object_unref (iter); + + /* Check folder source and destination */ + id1 = tny_folder_get_id (src_folder); + id2 = tny_folder_get_id (TNY_FOLDER(folder)); + same_folder = !g_ascii_strcasecmp (id1, id2); + if (same_folder) { + /* Set status failed and set an error */ + priv->status = MODEST_MAIL_OPERATION_STATUS_FAILED; + g_set_error (&(priv->error), MODEST_MAIL_OPERATION_ERROR, + MODEST_MAIL_OPERATION_ERROR_BAD_PARAMETER, + _("mcen_ib_unable_to_copy_samefolder")); + /* Notify the queue */ modest_mail_operation_notify_end (self, FALSE); + + /* Free */ + g_object_unref (src_folder); return; } @@ -2080,13 +2065,6 @@ modest_mail_operation_xfer_msgs (ModestMailOperation *self, helper->user_callback = user_callback; helper->user_data = user_data; - /* Get source folder */ - iter = tny_list_create_iterator (headers); - header = TNY_HEADER (tny_iterator_get_current (iter)); - src_folder = tny_header_get_folder (header); - g_object_unref (header); - g_object_unref (iter); - /* Get account and set it into mail_operation */ priv->account = modest_tny_folder_get_account (src_folder);