+static void
+foreach_unregister_headers (gpointer data,
+ gpointer user_data)
+{
+ ModestWindowMgr *mgr = (ModestWindowMgr *) user_data;
+ TnyHeader *header = TNY_HEADER (data);
+
+ modest_window_mgr_unregister_header (mgr, header);
+}
+
+static void
+open_msgs_performer(gboolean canceled,
+ GError *err,
+ GtkWindow *parent_window,
+ TnyAccount *account,
+ gpointer user_data)
+{
+ ModestMailOperation *mail_op = NULL;
+ const gchar *proto_name;
+ gchar *error_msg;
+ ModestTransportStoreProtocol proto;
+ TnyList *not_opened_headers;
+ TnyConnectionStatus status;
+ gboolean show_open_draft = FALSE;
+ OpenMsgBannerInfo *banner_info = NULL;
+
+ not_opened_headers = TNY_LIST (user_data);
+
+ status = tny_account_get_connection_status (account);
+ if (err || canceled) {
+ /* Unregister the already registered headers */
+ tny_list_foreach (not_opened_headers, foreach_unregister_headers,
+ modest_runtime_get_window_mgr ());
+ goto clean;
+ }
+
+ /* Get the error message depending on the protocol */
+ proto_name = tny_account_get_proto (account);
+ if (proto_name != NULL) {
+ proto = modest_protocol_info_get_transport_store_protocol (proto_name);
+ } else {
+ proto = MODEST_PROTOCOL_STORE_MAILDIR;
+ }
+
+ /* Create the error messages */
+ if (tny_list_get_length (not_opened_headers) == 1) {
+ if (proto == MODEST_PROTOCOL_STORE_POP) {
+ error_msg = g_strdup (_("emev_ni_ui_pop3_msg_recv_error"));
+ } else if (proto == MODEST_PROTOCOL_STORE_IMAP) {
+ TnyIterator *iter = tny_list_create_iterator (not_opened_headers);
+ TnyHeader *header = TNY_HEADER (tny_iterator_get_current (iter));
+ error_msg = g_strdup_printf (_("emev_ni_ui_imap_message_not_available_in_server"),
+ tny_header_get_subject (header));
+ g_object_unref (header);
+ g_object_unref (iter);
+ } else {
+ TnyHeader *header;
+ TnyFolder *folder;
+ TnyIterator *iter;
+ TnyFolderType folder_type;
+
+ iter = tny_list_create_iterator (not_opened_headers);
+ header = TNY_HEADER (tny_iterator_get_current (iter));
+ folder = tny_header_get_folder (header);
+ folder_type = modest_tny_folder_get_local_or_mmc_folder_type (folder);
+ show_open_draft = (folder_type == TNY_FOLDER_TYPE_DRAFTS);
+ g_object_unref (folder);
+ g_object_unref (header);
+ g_object_unref (iter);
+ error_msg = g_strdup (_("mail_ni_ui_folder_get_msg_folder_error"));
+ }
+ } else {
+ error_msg = g_strdup (_("mail_ni_ui_folder_get_msg_folder_error"));
+ }
+
+ /* Create the mail operation */
+ mail_op =
+ modest_mail_operation_new_with_error_handling ((GObject *) parent_window,
+ modest_ui_actions_get_msgs_full_error_handler,
+ error_msg, g_free);
+ modest_mail_operation_queue_add (modest_runtime_get_mail_operation_queue (),
+ mail_op);
+
+ if (show_open_draft) {
+ banner_info = g_slice_new (OpenMsgBannerInfo);
+ banner_info->message = g_strdup (_("mail_ib_opening_draft_message"));
+ banner_info->banner = NULL;
+ banner_info->idle_handler = g_timeout_add (500, open_msg_banner_idle, banner_info);
+ }
+
+ modest_mail_operation_get_msgs_full (mail_op,
+ not_opened_headers,
+ open_msg_cb,
+ banner_info,
+ NULL);
+
+ /* Frees */
+ clean:
+ if (mail_op)
+ g_object_unref (mail_op);
+ g_object_unref (not_opened_headers);
+ g_object_unref (account);
+}
+