X-Git-Url: http://git.maemo.org/git/?p=modest;a=blobdiff_plain;f=src%2Fmodest-mail-operation.c;h=d7b24ce7def6b6c4ce50945168ddce99420b5caa;hp=45a545501926b510ded15872e5ab9192b470aa20;hb=12c8ed43dedce8fb9a7ceb0061152cdd8d10ee08;hpb=0c33e62765906c36435deea78e477f47b045c6c4 diff --git a/src/modest-mail-operation.c b/src/modest-mail-operation.c index 45a5455..d7b24ce 100644 --- a/src/modest-mail-operation.c +++ b/src/modest-mail-operation.c @@ -697,9 +697,8 @@ send_mail_error_happened_handler (TnySendQueue *queue, TnyHeader *header, TnyMsg { SendMsgInfo *info = (SendMsgInfo *) userdata; TnyHeader *hdr1, *hdr2; - hdr1 = tny_msg_get_header(msg); - hdr2 = tny_msg_get_header(info->msg); const char *msgid1, *msgid2; + hdr1 = tny_msg_get_header(msg); hdr2 = tny_msg_get_header(info->msg); msgid1 = tny_header_get_message_id(hdr1); @@ -1232,6 +1231,7 @@ typedef struct gboolean poke_all; TnyFolderObserver *inbox_observer; guint update_timeout; + RetrieveAllCallback retrieve_all_cb; } UpdateAccountInfo; @@ -1280,7 +1280,7 @@ inbox_refreshed_cb (TnyFolder *inbox, ModestAccountMgr *mgr; ModestAccountRetrieveType retrieve_type; TnyList *new_headers = NULL; - gboolean headers_only; + gboolean headers_only, ignore_limit; TnyTransportAccount *transport_account; ModestTnySendQueue *send_queue; @@ -1339,11 +1339,18 @@ inbox_refreshed_cb (TnyFolder *inbox, /* Order by date */ g_ptr_array_sort (new_headers_array, (GCompareFunc) compare_headers_by_date); - /* TODO: Ask the user, instead of just failing, - * showing mail_nc_msg_count_limit_exceeded, with 'Get - * all' and 'Newest only' buttons. */ + /* 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) { - /* TODO */ + /* 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 && priv->source) + ignore_limit = info->retrieve_all_cb (priv->source, + new_headers_array->len, + retrieve_limit); } if (!headers_only) { @@ -1351,7 +1358,10 @@ inbox_refreshed_cb (TnyFolder *inbox, const gint msg_list_size = compute_message_array_size (new_headers_array); priv->done = 0; - priv->total = MIN (new_headers_array->len, retrieve_limit); + if (ignore_limit) + priv->total = new_headers_array->len; + else + priv->total = MIN (new_headers_array->len, retrieve_limit); while (msg_num < priv->total) { TnyHeader *header = TNY_HEADER (g_ptr_array_index (new_headers_array, msg_num)); TnyFolder *folder = tny_header_get_folder (header); @@ -1538,6 +1548,7 @@ void modest_mail_operation_update_account (ModestMailOperation *self, const gchar *account_name, gboolean poke_all, + RetrieveAllCallback retrieve_all_cb, UpdateAccountCallback callback, gpointer user_data) { @@ -1572,6 +1583,7 @@ modest_mail_operation_update_account (ModestMailOperation *self, info->callback = callback; info->user_data = user_data; info->update_timeout = g_timeout_add (250, timeout_notify_progress, self); + info->retrieve_all_cb = retrieve_all_cb; /* Set account busy */ modest_account_mgr_set_account_busy (modest_runtime_get_account_mgr (), account_name, TRUE); @@ -2301,16 +2313,32 @@ modest_mail_operation_remove_msg (ModestMailOperation *self, /* remove message from folder */ tny_folder_remove_msg (folder, header, &(priv->error)); if (!priv->error) { + gboolean expunge, leave_on_server; + const gchar *account_name; + TnyAccount *account; + tny_header_set_flag (header, TNY_HEADER_FLAG_DELETED); tny_header_set_flag (header, TNY_HEADER_FLAG_SEEN); modest_mail_operation_notify_start (self); - if (TNY_IS_CAMEL_IMAP_FOLDER (folder) || - TNY_IS_CAMEL_POP_FOLDER (folder)) - tny_folder_sync_async(folder, FALSE, NULL, NULL, NULL); /* FALSE --> dont expunge */ + /* Get leave on server setting */ + account = tny_folder_get_account (folder); + account_name = modest_tny_account_get_parent_modest_account_name_for_server_account (account); + leave_on_server = + modest_account_mgr_get_leave_on_server (modest_runtime_get_account_mgr (), + account_name); + + if (TNY_IS_CAMEL_POP_FOLDER (folder) && !leave_on_server) + expunge = TRUE; else - tny_folder_sync_async(folder, TRUE, NULL, NULL, NULL); /* TRUE --> expunge */ + expunge = FALSE; + + /* Sync folder */ + tny_folder_sync_async(folder, expunge, NULL, NULL, NULL); + + /* Unref */ + g_object_unref (account); }