+static void
+open_msg_for_purge_cb (ModestMailOperation *mail_op,
+ TnyHeader *header,
+ TnyMsg *msg,
+ gpointer user_data)
+{
+ TnyList *parts;
+ TnyIterator *iter;
+ gint pending_purges = 0;
+ gboolean some_purged = FALSE;
+ ModestWindow *win = MODEST_WINDOW (user_data);
+
+ /* If there was any error */
+ if (!modest_ui_actions_msg_retrieval_check (mail_op, header, msg))
+ return;
+
+ /* Once the message has been retrieved for purging, we check if
+ * it's all ok for purging */
+
+ parts = tny_simple_list_new ();
+ tny_mime_part_get_parts (TNY_MIME_PART (msg), parts);
+ iter = tny_list_create_iterator (parts);
+
+ while (!tny_iterator_is_done (iter)) {
+ TnyMimePart *part;
+ part = TNY_MIME_PART (tny_iterator_get_current (iter));
+ if (tny_mime_part_is_attachment (part) || TNY_IS_MSG (part)) {
+ if (tny_mime_part_is_purged (part))
+ some_purged = TRUE;
+ else
+ pending_purges++;
+ }
+ tny_iterator_next (iter);
+ }
+
+ if (pending_purges>0) {
+ gint response;
+ response = modest_platform_run_confirmation_dialog (GTK_WINDOW (win),_("mcen_nc_purge_file_text_inbox"));
+
+ if (response == GTK_RESPONSE_OK) {
+ modest_platform_information_banner (NULL, NULL, _("mcen_ib_removing_attachment"));
+ tny_iterator_first (iter);
+ while (!tny_iterator_is_done (iter)) {
+ TnyMimePart *part;
+
+ part = TNY_MIME_PART (tny_iterator_get_current (iter));
+ if (tny_mime_part_is_attachment (part) || TNY_IS_MSG (part))
+ tny_mime_part_set_purged (part);
+ tny_iterator_next (iter);
+ }
+
+ tny_msg_rewrite_cache (msg);
+ }
+ } else {
+ modest_platform_information_banner (NULL, NULL, _("mail_ib_attachment_already_purged"));
+ }
+
+ /* remove attachments */
+ tny_iterator_first (iter);
+ while (!tny_iterator_is_done (iter)) {
+ TnyMimePart *part;
+
+ part = TNY_MIME_PART (tny_iterator_get_current (iter));
+ g_object_unref (part);
+ tny_iterator_next (iter);
+ }
+
+ g_object_unref (iter);
+ g_object_unref (parts);
+}
+
+static void
+modest_ui_actions_on_main_window_remove_attachments (GtkAction *action,
+ ModestMainWindow *win)
+{
+ GtkWidget *header_view;
+ TnyList *header_list;
+ TnyIterator *iter;
+ TnyHeader *header;
+ TnyHeaderFlags flags;
+ ModestWindow *msg_view_window = NULL;
+ gboolean found;
+
+ g_return_if_fail (MODEST_IS_MAIN_WINDOW (win));
+
+ header_view = modest_main_window_get_child_widget (MODEST_MAIN_WINDOW (win),
+ MODEST_WIDGET_TYPE_HEADER_VIEW);
+
+ header_list = modest_header_view_get_selected_headers (MODEST_HEADER_VIEW (header_view));
+
+ if (tny_list_get_length (header_list) == 1) {
+ iter = tny_list_create_iterator (header_list);
+ header = TNY_HEADER (tny_iterator_get_current (iter));
+ g_object_unref (iter);
+ } else {
+ return;
+ }
+
+ found = modest_window_mgr_find_registered_header (modest_runtime_get_window_mgr (),
+ header, &msg_view_window);
+ flags = tny_header_get_flags (header);
+ if (!(flags & TNY_HEADER_FLAG_CACHED))
+ return;
+ if (found) {
+ if (msg_view_window != NULL)
+ modest_msg_view_window_remove_attachments (MODEST_MSG_VIEW_WINDOW (msg_view_window), TRUE);
+ else {
+ /* do nothing; uid was registered before, so window is probably on it's way */
+ g_warning ("debug: header %p has already been registered", header);
+ }
+ } else {
+ ModestMailOperation *mail_op = NULL;
+ modest_window_mgr_register_header (modest_runtime_get_window_mgr (), header);
+ mail_op = modest_mail_operation_new_with_error_handling (MODEST_MAIL_OPERATION_TYPE_RECEIVE,
+ G_OBJECT (win),
+ modest_ui_actions_get_msgs_full_error_handler,
+ NULL);
+ modest_mail_operation_queue_add (modest_runtime_get_mail_operation_queue (), mail_op);
+ modest_mail_operation_get_msg (mail_op, header, open_msg_for_purge_cb, win);
+
+ g_object_unref (mail_op);
+ }
+ if (header)
+ g_object_unref (header);
+ if (header_list)
+ g_object_unref (header_list);
+}
+