X-Git-Url: http://git.maemo.org/git/?a=blobdiff_plain;f=src%2Fmodest-mail-operation.c;h=aa6de1cf6beee1a2ca9183a4bcdbaabeb7df1825;hb=4288a3ad29eb76bee6ab9477a7d72c52836efcf5;hp=c93874c2d2f4b027ed681df5ef63e1bec6525569;hpb=e0807422c3f39ad1114d6456964d1c007b5a92c8;p=modest diff --git a/src/modest-mail-operation.c b/src/modest-mail-operation.c index c93874c..aa6de1c 100644 --- a/src/modest-mail-operation.c +++ b/src/modest-mail-operation.c @@ -488,6 +488,7 @@ modest_mail_operation_send_new_mail (ModestMailOperation *self, { TnyMsg *new_msg = NULL; TnyFolder *folder = NULL; + TnyHeader *header = NULL; ModestMailOperationPrivate *priv = NULL; g_return_if_fail (MODEST_IS_MAIL_OPERATION (self)); @@ -518,8 +519,9 @@ modest_mail_operation_send_new_mail (ModestMailOperation *self, return; } - /* TODO: add priority handling. It's received in the priority_flags operator, and - it should have effect in the sending operation */ + /* Set priority flags in message */ + header = tny_msg_get_header (new_msg); + tny_header_set_flags (header, priority_flags); /* Call mail operation */ modest_mail_operation_send_mail (self, transport_account, new_msg); @@ -527,7 +529,9 @@ modest_mail_operation_send_new_mail (ModestMailOperation *self, folder = modest_tny_account_get_special_folder (TNY_ACCOUNT (transport_account), TNY_FOLDER_TYPE_DRAFTS); if (folder) { if (draft_msg != NULL) { - TnyHeader *header = tny_msg_get_header (draft_msg); + header = tny_msg_get_header (draft_msg); + /* Note: This can fail (with a warning) if the message is not really already in a folder, + * because this function requires it to have a UID. */ tny_folder_remove_msg (folder, header, NULL); g_object_unref (header); } @@ -550,6 +554,7 @@ modest_mail_operation_save_to_drafts (ModestMailOperation *self, { TnyMsg *msg = NULL; TnyFolder *folder = NULL; + TnyHeader *header = NULL; ModestMailOperationPrivate *priv = NULL; g_return_if_fail (MODEST_IS_MAIL_OPERATION (self)); @@ -572,6 +577,10 @@ modest_mail_operation_save_to_drafts (ModestMailOperation *self, goto end; } + /* add priority flags */ + header = tny_msg_get_header (msg); + tny_header_set_flags (header, priority_flags); + folder = modest_tny_account_get_special_folder (TNY_ACCOUNT (transport_account), TNY_FOLDER_TYPE_DRAFTS); if (!folder) { g_set_error (&(priv->error), MODEST_MAIL_OPERATION_ERROR, @@ -581,7 +590,7 @@ modest_mail_operation_save_to_drafts (ModestMailOperation *self, } if (draft_msg != NULL) { - TnyHeader *header = tny_msg_get_header (draft_msg); + header = tny_msg_get_header (draft_msg); tny_folder_remove_msg (folder, header, NULL); g_object_unref (header); } @@ -800,6 +809,21 @@ compare_headers_by_date (gconstpointer a, return -1; } +static gboolean +set_last_updated_idle (gpointer data) +{ + /* It does not matter if the time is not exactly the same than + the time when this idle was called, it's just an + approximation and it won't be very different */ + modest_account_mgr_set_int (modest_runtime_get_account_mgr (), + (gchar *) data, + MODEST_ACCOUNT_LAST_UPDATED, + time(NULL), + TRUE); + + return FALSE; +} + static gpointer update_account_thread (gpointer thr_user_data) { @@ -811,6 +835,7 @@ update_account_thread (gpointer thr_user_data) ModestMailOperationPrivate *priv; ModestTnySendQueue *send_queue; + info = (UpdateAccountInfo *) thr_user_data; priv = MODEST_MAIL_OPERATION_GET_PRIVATE(info->mail_op); @@ -870,13 +895,14 @@ update_account_thread (gpointer thr_user_data) * We use the blocking version, because we are already in a separate * thread. */ - tny_folder_refresh (TNY_FOLDER (folder), &(priv->error)); - /* If the retrieve type is headers only do nothing more */ if (!g_ascii_strcasecmp (info->retrieve_type, MODEST_ACCOUNT_RETRIEVE_VALUE_MESSAGES) || !g_ascii_strcasecmp (info->retrieve_type, MODEST_ACCOUNT_RETRIEVE_VALUE_MESSAGES_AND_ATTACHMENTS)) { TnyIterator *iter; + /* If the retrieve type is full messages, refresh and get the messages */ + tny_folder_refresh (TNY_FOLDER (folder), &(priv->error)); + iter = tny_list_create_iterator (observer->new_headers); while (!tny_iterator_is_done (iter)) { TnyHeader *header = TNY_HEADER (tny_iterator_get_current (iter)); @@ -893,7 +919,8 @@ update_account_thread (gpointer thr_user_data) tny_iterator_next (iter); } g_object_unref (iter); - } + } else /* If it's headers only, then just poke the folder status (this will update the unread and total count of folder observers, like the folder list model*/ + tny_folder_poke_status (TNY_FOLDER (folder)); tny_folder_remove_observer (TNY_FOLDER (folder), TNY_FOLDER_OBSERVER (observer)); g_object_unref (observer); @@ -989,11 +1016,10 @@ update_account_thread (gpointer thr_user_data) priv->status = MODEST_MAIL_OPERATION_STATUS_SUCCESS; /* Update the last updated key */ - modest_account_mgr_set_int (modest_runtime_get_account_mgr (), - tny_account_get_id (TNY_ACCOUNT (info->account)), - MODEST_ACCOUNT_LAST_UPDATED, - time(NULL), - TRUE); + g_idle_add_full (G_PRIORITY_HIGH_IDLE, + set_last_updated_idle, + g_strdup (tny_account_get_id (TNY_ACCOUNT (info->account))), + (GDestroyNotify) g_free); } out: @@ -1044,7 +1070,7 @@ modest_mail_operation_update_account (ModestMailOperation *self, /* Get the Modest account */ modest_account = (TnyStoreAccount *) - modest_tny_account_store_get_tny_account_by_account (modest_runtime_get_account_store (), + modest_tny_account_store_get_server_account (modest_runtime_get_account_store (), account_name, TNY_ACCOUNT_TYPE_STORE);