From 86c9c4d793b3f9eff93fe00ad579427f254c5882 Mon Sep 17 00:00:00 2001 From: Matthew Barnes Date: Thu, 19 May 2011 14:56:17 -0400 Subject: Remove mail_remove_folder(). Use e_mail_folder_remove() instead. --- mail/mail-ops.c | 163 -------------------------------------------------------- 1 file changed, 163 deletions(-) (limited to 'mail/mail-ops.c') diff --git a/mail/mail-ops.c b/mail/mail-ops.c index cbb50315ec..67906957bd 100644 --- a/mail/mail-ops.c +++ b/mail/mail-ops.c @@ -1031,169 +1031,6 @@ mail_transfer_messages (EMailSession *session, mail_msg_slow_ordered_push (m); } -/* ** REMOVE FOLDER ******************************************************* */ - -struct _remove_folder_msg { - MailMsg base; - - CamelFolder *folder; - gboolean removed; - void (*done) (CamelFolder *folder, gboolean removed, GError **error, gpointer data); - gpointer data; -}; - -static gchar * -remove_folder_desc (struct _remove_folder_msg *m) -{ - return g_strdup_printf (_("Removing folder '%s'"), camel_folder_get_full_name (m->folder)); -} - -static gboolean -remove_folder_rec (CamelStore *store, - CamelFolderInfo *fi, - GCancellable *cancellable, - GError **error) -{ - while (fi) { - CamelFolder *folder; - - if (fi->child) { - if (!remove_folder_rec ( - store, fi->child, cancellable, error)) - return FALSE; - } - - d(printf ("deleting folder '%s'\n", fi->full_name)); - - folder = camel_store_get_folder_sync ( - store, fi->full_name, 0, cancellable, error); - if (folder == NULL) - return FALSE; - - if (!CAMEL_IS_VEE_FOLDER (folder)) { - GPtrArray *uids = camel_folder_get_uids (folder); - gint i; - - /* Delete every message in this folder, then expunge it */ - camel_folder_freeze (folder); - for (i = 0; i < uids->len; i++) - camel_folder_delete_message ( - folder, uids->pdata[i]); - - camel_folder_free_uids (folder, uids); - - /* FIXME Not passing a GCancellable or GError here. */ - camel_folder_synchronize_sync (folder, TRUE, NULL, NULL); - camel_folder_thaw (folder); - } - - /* If the store supports subscriptions, unsubscribe - * from this folder. - * FIXME Not passing a GCancellable or GError here. */ - if (camel_store_supports_subscriptions (store)) - camel_store_unsubscribe_folder_sync ( - store, fi->full_name, NULL, NULL); - - /* Then delete the folder from the store */ - if (!camel_store_delete_folder_sync ( - store, fi->full_name, cancellable, error)) - return FALSE; - - fi = fi->next; - } - - return TRUE; -} - -static void -remove_folder_exec (struct _remove_folder_msg *m, - GCancellable *cancellable, - GError **error) -{ - CamelFolderInfo *fi, *to_remove, *next = NULL; - CamelStore *parent_store; - const gchar *full_name; - - m->removed = FALSE; - - full_name = camel_folder_get_full_name (m->folder); - parent_store = camel_folder_get_parent_store (m->folder); - - fi = camel_store_get_folder_info_sync ( - parent_store, full_name, - CAMEL_STORE_FOLDER_INFO_RECURSIVE | - CAMEL_STORE_FOLDER_INFO_FAST | - CAMEL_STORE_FOLDER_INFO_SUBSCRIBED, - cancellable, error); - if (fi == NULL) - return; - - if (fi->next) { - /* for cases when the folder info contains more folders on the 0-level, - like when full_name contains a wildcard letter, use only folder info - for the the exact full_name, to not delete more than requested */ - for (to_remove = fi; to_remove; to_remove = to_remove->next) { - if (g_strcmp0 (to_remove->full_name, full_name) == 0) - break; - } - - if (!to_remove) { - g_warning ("%s: Failed to find '%s' in returned folder info", G_STRFUNC, full_name); - camel_store_free_folder_info (parent_store, fi); - return; - } - - next = to_remove->next; - to_remove->next = NULL; - } else { - to_remove = fi; - } - - m->removed = remove_folder_rec ( - parent_store, to_remove, cancellable, error); - - to_remove->next = next; - - camel_store_free_folder_info (parent_store, fi); -} - -static void -remove_folder_done (struct _remove_folder_msg *m) -{ - if (m->done) - m->done (m->folder, m->removed, &m->base.error, m->data); -} - -static void -remove_folder_free (struct _remove_folder_msg *m) -{ - g_object_unref (m->folder); -} - -static MailMsgInfo remove_folder_info = { - sizeof (struct _remove_folder_msg), - (MailMsgDescFunc) remove_folder_desc, - (MailMsgExecFunc) remove_folder_exec, - (MailMsgDoneFunc) remove_folder_done, - (MailMsgFreeFunc) remove_folder_free -}; - -void -mail_remove_folder (CamelFolder *folder, void (*done) (CamelFolder *folder, gboolean removed, GError **error, gpointer data), gpointer data) -{ - struct _remove_folder_msg *m; - - g_return_if_fail (folder != NULL); - - m = mail_msg_new (&remove_folder_info); - m->folder = folder; - g_object_ref (folder); - m->data = data; - m->done = done; - - mail_msg_unordered_push (m); -} - /* ** SYNC FOLDER ********************************************************* */ struct _sync_folder_msg { -- cgit v1.2.3