- /* Create the destination folder */
- folder_name = tny_folder_get_name (folder);
- dest_folder = modest_mail_operation_create_folder (self, parent, folder_name);
- CHECK_EXCEPTION (priv, MODEST_MAIL_OPERATION_STATUS_FAILED, goto clean);
-
- /* Transfer messages */
- headers = TNY_LIST (tny_simple_list_new ());
- tny_folder_get_headers (folder, headers, FALSE, &(priv->error));
- CHECK_EXCEPTION (priv, MODEST_MAIL_OPERATION_STATUS_FAILED, goto clean);
-
- tny_folder_transfer_msgs (folder, headers, dest_folder, delete_original, &(priv->error));
- CHECK_EXCEPTION (priv, MODEST_MAIL_OPERATION_STATUS_FAILED, goto clean);
-
- /* Recurse children */
- folders = TNY_LIST (tny_simple_list_new ());
- tny_folder_store_get_folders (TNY_FOLDER_STORE (folder), folders, NULL, &(priv->error));
- CHECK_EXCEPTION (priv, MODEST_MAIL_OPERATION_STATUS_FAILED, goto clean);
-
- iter = tny_list_create_iterator (folders);
- while (!tny_iterator_is_done (iter)) {
- child = TNY_FOLDER (tny_iterator_get_current (iter));
- modest_mail_operation_xfer_folder (self, child, TNY_FOLDER_STORE (dest_folder),
- delete_original);
- tny_iterator_next (iter);
- g_object_unref (G_OBJECT(child));
- }
-
- /* Delete source folder (if needed) */
- if (delete_original)
- modest_mail_operation_remove_folder (self, folder, FALSE);
-
- /* Clean up */
- clean:
- if (dest_folder)
- g_object_unref (G_OBJECT (dest_folder));
- if (headers)
- g_object_unref (G_OBJECT (headers));
- if (folders)
- g_object_unref (G_OBJECT (folders));
- if (iter)
- g_object_unref (G_OBJECT (iter));