X-Git-Url: http://git.maemo.org/git/?a=blobdiff_plain;f=src%2Fmodest-mail-operation.c;h=d6882a94fb5e9bdba92173d1e84073750092c3e3;hb=c2f1be22204a73a786821ede37c64a06efa61375;hp=4e1fee925019ea7e6e4885d6bc8255657634a9a6;hpb=542ed9bebb3d8ccd83702510bd58b938ed376eb9;p=modest diff --git a/src/modest-mail-operation.c b/src/modest-mail-operation.c index 4e1fee9..d6882a9 100644 --- a/src/modest-mail-operation.c +++ b/src/modest-mail-operation.c @@ -136,7 +136,6 @@ typedef struct gint pending_calls; gboolean poke_all; TnyFolderObserver *inbox_observer; - RetrieveAllCallback retrieve_all_cb; gboolean interactive; gboolean msg_readed; } UpdateAccountInfo; @@ -224,6 +223,12 @@ typedef struct _XFerFolderAsyncHelper gpointer user_data; } XFerFolderAsyncHelper; +typedef struct _SyncFolderHelper { + ModestMailOperation *mail_op; + SyncFolderCallback user_callback; + gpointer user_data; +} SyncFolderHelper; + typedef void (*ModestMailOperationCreateMsgCallback) (ModestMailOperation *mail_op, TnyMsg *msg, gpointer userdata); @@ -1282,7 +1287,8 @@ modest_mail_operation_save_to_drafts_add_msg_cb(TnyFolder *self, if (!callback_called) modest_mail_operation_notify_end (info->mailop); - g_object_unref(info->mailop); + if (info->mailop) + g_object_unref(info->mailop); g_slice_free (SaveToDraftsAddMsgInfo, info); } @@ -1595,7 +1601,6 @@ update_account_get_msg_async_cb (TnyFolder *folder, /* Call the user callback and free */ new_headers = tny_iterator_get_list (msg_info->more_msgs); update_account_notify_user_and_free (info, new_headers); - g_object_unref (new_headers); /* Delete the helper */ g_object_unref (msg_info->more_msgs); @@ -1639,7 +1644,7 @@ inbox_refreshed_cb (TnyFolder *inbox, ModestAccountMgr *mgr; ModestAccountRetrieveType retrieve_type; TnyList *new_headers = NULL; - gboolean headers_only, ignore_limit; + gboolean headers_only; time_t time_to_store; info = (UpdateAccountInfo *) user_data; @@ -1728,20 +1733,6 @@ inbox_refreshed_cb (TnyFolder *inbox, /* Order by date */ g_ptr_array_sort (new_headers_array, (GCompareFunc) compare_headers_by_date); - /* Ask the users if they want to retrieve all the messages - even though the limit was exceeded */ - ignore_limit = FALSE; - if (new_headers_array->len > retrieve_limit) { - /* Ask the user if a callback has been specified and - if the mail operation has a source (this means that - was invoked by the user and not automatically by a - D-Bus method) */ - if (info->retrieve_all_cb && info->interactive) - ignore_limit = info->retrieve_all_cb (priv->source, - new_headers_array->len, - retrieve_limit); - } - /* Copy the headers to a list and free the array */ new_headers = tny_simple_list_new (); for (i=0; i < new_headers_array->len; i++) { @@ -1759,10 +1750,7 @@ inbox_refreshed_cb (TnyFolder *inbox, GetMsgInfo *msg_info; priv->done = 0; - if (ignore_limit) - priv->total = tny_list_get_length (new_headers); - else - priv->total = MIN (tny_list_get_length (new_headers), retrieve_limit); + priv->total = MIN (tny_list_get_length (new_headers), retrieve_limit); iter = tny_list_create_iterator (new_headers); @@ -1782,11 +1770,13 @@ inbox_refreshed_cb (TnyFolder *inbox, NULL, msg_info); g_object_unref (folder); + g_object_unref (header); msg_num++; tny_iterator_next (iter); } g_object_unref (iter); + g_object_unref (new_headers); /* The mail operation will finish when the last message is retrieved */ @@ -1955,7 +1945,6 @@ modest_mail_operation_update_account (ModestMailOperation *self, const gchar *account_name, gboolean poke_all, gboolean interactive, - RetrieveAllCallback retrieve_all_cb, UpdateAccountCallback callback, gpointer user_data) { @@ -2012,7 +2001,6 @@ modest_mail_operation_update_account (ModestMailOperation *self, info->account_name = g_strdup (account_name); info->callback = callback; info->user_data = user_data; - info->retrieve_all_cb = retrieve_all_cb; /* Set account busy */ modest_account_mgr_set_account_busy (modest_runtime_get_account_mgr (), account_name, TRUE); @@ -2030,7 +2018,7 @@ modest_mail_operation_update_account (ModestMailOperation *self, /* Get all folders and continue in the callback */ folders = tny_simple_list_new (); tny_folder_store_get_folders_async (TNY_FOLDER_STORE (priv->account), - folders, NULL, FALSE, + folders, NULL, TRUE, recurse_folders_async_cb, NULL, info); g_object_unref (folders); @@ -2480,7 +2468,7 @@ modest_mail_operation_xfer_folder (ModestMailOperation *self, priv->status = MODEST_MAIL_OPERATION_STATUS_FAILED; g_set_error (&(priv->error), MODEST_MAIL_OPERATION_ERROR, MODEST_MAIL_OPERATION_ERROR_FOLDER_RULES, - error_msg); + "%s", error_msg); /* Call the user callback if exists */ if (user_callback) @@ -2752,7 +2740,7 @@ get_msg_async_cb (TnyFolder *folder, } else { g_set_error (&(priv->error), MODEST_MAIL_OPERATION_ERROR, MODEST_MAIL_OPERATION_ERROR_ITEM_NOT_FOUND, - err->message); + "%s", err->message); } } else if (finished && priv->status == MODEST_MAIL_OPERATION_STATUS_IN_PROGRESS) { /* Set the success status before calling the user callback */ @@ -2925,6 +2913,7 @@ remove_msgs_async_cb (TnyFolder *folder, ModestMailOperation *self; ModestMailOperationPrivate *priv; ModestProtocolRegistry *protocol_registry; + SyncFolderHelper *helper; self = (ModestMailOperation *) user_data; priv = MODEST_MAIL_OPERATION_GET_PRIVATE (self); @@ -2960,9 +2949,17 @@ remove_msgs_async_cb (TnyFolder *folder, else expunge = FALSE; + /* Create helper */ + helper = g_slice_new0 (SyncFolderHelper); + helper->mail_op = g_object_ref (self); + helper->user_callback = NULL; + helper->user_data = NULL; + /* Sync folder */ - tny_folder_sync_async(folder, expunge, sync_folder_finish_callback, - NULL, self); + tny_folder_sync_async(folder, expunge, sync_folder_finish_callback, NULL, helper); + + /* Remove the extra reference */ + g_object_unref (self); } void @@ -3691,17 +3688,17 @@ modest_mail_operation_shutdown (ModestMailOperation *self, ModestTnyAccountStore } static void -sync_folder_finish_callback (TnyFolder *self, - gboolean cancelled, - GError *err, +sync_folder_finish_callback (TnyFolder *self, + gboolean cancelled, + GError *err, gpointer user_data) { - ModestMailOperation *mail_op; ModestMailOperationPrivate *priv; + SyncFolderHelper *helper; - mail_op = (ModestMailOperation *) user_data; - priv = MODEST_MAIL_OPERATION_GET_PRIVATE (mail_op); + helper = (SyncFolderHelper *) user_data; + priv = MODEST_MAIL_OPERATION_GET_PRIVATE (helper->mail_op); /* If canceled by the user, ignore the error given by Tinymail */ if (cancelled) { @@ -3720,15 +3717,26 @@ sync_folder_finish_callback (TnyFolder *self, priv->status = MODEST_MAIL_OPERATION_STATUS_SUCCESS; } - modest_mail_operation_notify_end (mail_op); - g_object_unref (mail_op); + /* User callback */ + if (helper->user_callback) + helper->user_callback (helper->mail_op, self, helper->user_data); + + modest_mail_operation_notify_end (helper->mail_op); + + /* Frees */ + g_object_unref (helper->mail_op); + g_slice_free (SyncFolderHelper, helper); } void modest_mail_operation_sync_folder (ModestMailOperation *self, - TnyFolder *folder, gboolean expunge) + TnyFolder *folder, + gboolean expunge, + SyncFolderCallback callback, + gpointer user_data) { ModestMailOperationPrivate *priv; + SyncFolderHelper *helper; g_return_if_fail (MODEST_IS_MAIL_OPERATION (self)); g_return_if_fail (TNY_IS_FOLDER (folder)); @@ -3738,11 +3746,16 @@ modest_mail_operation_sync_folder (ModestMailOperation *self, priv->account = modest_tny_folder_get_account (folder); priv->op_type = MODEST_MAIL_OPERATION_TYPE_SYNC_FOLDER; + /* Create helper */ + helper = g_slice_new0 (SyncFolderHelper); + helper->mail_op = g_object_ref (self); + helper->user_callback = callback; + helper->user_data = user_data; + modest_mail_operation_notify_start (self); - g_object_ref (self); - tny_folder_sync_async (folder, expunge, - (TnyFolderCallback) sync_folder_finish_callback, - NULL, self); + tny_folder_sync_async (folder, expunge, + (TnyFolderCallback) sync_folder_finish_callback, + NULL, helper); } static void @@ -3837,12 +3850,14 @@ modest_mail_operation_to_string (ModestMailOperation *self) switch (priv->op_type) { case MODEST_MAIL_OPERATION_TYPE_SEND: type= "SEND"; break; + case MODEST_MAIL_OPERATION_TYPE_SEND_AND_RECEIVE: type= "SEND-AND-RECEIVE"; 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_RUN_QUEUE: type= "RUN-QUEUE"; break; case MODEST_MAIL_OPERATION_TYPE_SYNC_FOLDER: type= "SYNC-FOLDER"; break; + case MODEST_MAIL_OPERATION_TYPE_SHUTDOWN: type= "SHUTDOWN"; break; case MODEST_MAIL_OPERATION_TYPE_UNKNOWN: type= "UNKNOWN"; break; default: type = "UNEXPECTED"; break; }