From d44fb9e2cf43ebec0ffc811d6d1f9f6e28ccefae Mon Sep 17 00:00:00 2001 From: David Woodhouse Date: Fri, 15 Apr 2011 14:57:39 +0100 Subject: Bug 647816 - Moving folder hierarchy causes error When *moving*, as opposed to copying, we only need to operate on the top-level folder; its children will automatically follow it. --- mail/em-folder-utils.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/mail/em-folder-utils.c b/mail/em-folder-utils.c index eed9298f07..5e21fc47f2 100644 --- a/mail/em-folder-utils.c +++ b/mail/em-folder-utils.c @@ -105,9 +105,13 @@ emft_copy_folders__exec (struct _EMCopyFolders *m, gint fromlen; flags = CAMEL_STORE_FOLDER_INFO_FAST | - CAMEL_STORE_FOLDER_INFO_RECURSIVE | CAMEL_STORE_FOLDER_INFO_SUBSCRIBED; + /* If we're copying, then we need to copy every subfolder. If we're + *moving*, though, then we only need to rename the top-level folder */ + if (!m->delete) + flags |= CAMEL_STORE_FOLDER_INFO_RECURSIVE; + fi = camel_store_get_folder_info_sync ( m->fromstore, m->frombase, flags, cancellable, error); if (fi == NULL) @@ -135,7 +139,10 @@ emft_copy_folders__exec (struct _EMCopyFolders *m, GPtrArray *uids; gint deleted = 0; - if (info->child) + /* We still get immediate children even without the + CAMEL_STORE_FOLDER_INFO_RECURSIVE flag. But we only + want to process the children too if we're *copying* */ + if (info->child && !m->delete) pending = g_list_append (pending, info->child); if (m->tobase[0]) -- cgit v1.2.3