[evolution] Bug 770083 - Support removing attachments inside a search folder



commit 5787fd247f0f828ccbe399f64089a7c9eec782f8
Author: Milan Crha <mcrha redhat com>
Date:   Fri Aug 19 12:15:56 2016 +0200

    Bug 770083 - Support removing attachments inside a search folder

 libemail-engine/e-mail-folder-utils.c |   20 +++++++++----
 libemail-engine/e-mail-utils.c        |   52 +++++++++++++++++++++++++++++++++
 libemail-engine/e-mail-utils.h        |    6 ++++
 mail/em-composer-utils.c              |   52 ---------------------------------
 4 files changed, 72 insertions(+), 58 deletions(-)
---
diff --git a/libemail-engine/e-mail-folder-utils.c b/libemail-engine/e-mail-folder-utils.c
index ff3d2f7..edfa9ea 100644
--- a/libemail-engine/e-mail-folder-utils.c
+++ b/libemail-engine/e-mail-folder-utils.c
@@ -1414,26 +1414,34 @@ e_mail_folder_remove_attachments_sync (CamelFolder *folder,
 
        for (ii = 0; success && ii < message_uids->len; ii++) {
                CamelMimeMessage *message;
-               const gchar *uid;
+               CamelFolder *real_folder = NULL, *use_folder;
+               gchar *real_message_uid = NULL;
+               const gchar *uid, *use_message_uid;
                gint percent;
 
                uid = g_ptr_array_index (message_uids, ii);
 
-               message = camel_folder_get_message_sync (
-                       folder, uid, cancellable, error);
+               em_utils_get_real_folder_and_message_uid (folder, uid, &real_folder, NULL, &real_message_uid);
+
+               use_folder = real_folder ? real_folder : folder;
+               use_message_uid = real_message_uid ? real_message_uid : uid;
+               message = camel_folder_get_message_sync (use_folder, use_message_uid, cancellable, error);
 
                if (message == NULL) {
+                       g_clear_object (&real_folder);
+                       g_free (real_message_uid);
                        success = FALSE;
                        break;
                }
 
-               success = mail_folder_strip_message (
-                       folder, message, uid, cancellable, error);
+               success = mail_folder_strip_message (use_folder, message, use_message_uid, cancellable, 
error);
 
                percent = ((ii + 1) * 100) / message_uids->len;
                camel_operation_progress (cancellable, percent);
 
-               g_object_unref (message);
+               g_clear_object (&real_folder);
+               g_clear_object (&message);
+               g_free (real_message_uid);
        }
 
        camel_operation_pop_message (cancellable);
diff --git a/libemail-engine/e-mail-utils.c b/libemail-engine/e-mail-utils.c
index 30fedd1..862ec00 100644
--- a/libemail-engine/e-mail-utils.c
+++ b/libemail-engine/e-mail-utils.c
@@ -760,3 +760,55 @@ em_utils_expand_groups (CamelInternetAddress *addresses)
                }
        }
 }
+
+void
+em_utils_get_real_folder_and_message_uid (CamelFolder *folder,
+                                         const gchar *uid,
+                                         CamelFolder **out_real_folder,
+                                         gchar **folder_uri,
+                                         gchar **message_uid)
+{
+       g_return_if_fail (folder != NULL);
+       g_return_if_fail (uid != NULL);
+
+       if (out_real_folder)
+               *out_real_folder = NULL;
+
+       if (CAMEL_IS_VEE_FOLDER (folder)) {
+               CamelMessageInfo *mi;
+
+               mi = camel_folder_get_message_info (folder, uid);
+               if (mi) {
+                       CamelFolder *real_folder;
+                       gchar *real_uid = NULL;
+
+                       real_folder = camel_vee_folder_get_location (
+                               CAMEL_VEE_FOLDER (folder),
+                               (CamelVeeMessageInfo *) mi,
+                               &real_uid);
+
+                       if (real_folder) {
+                               if (folder_uri)
+                                       *folder_uri = e_mail_folder_uri_from_folder (real_folder);
+                               if (message_uid)
+                                       *message_uid = real_uid;
+                               else
+                                       g_free (real_uid);
+
+                               camel_message_info_unref (mi);
+
+                               if (out_real_folder)
+                                       *out_real_folder = g_object_ref (real_folder);
+
+                               return;
+                       }
+
+                       camel_message_info_unref (mi);
+               }
+       }
+
+       if (folder_uri)
+               *folder_uri = e_mail_folder_uri_from_folder (folder);
+       if (message_uid)
+               *message_uid = g_strdup (uid);
+}
diff --git a/libemail-engine/e-mail-utils.h b/libemail-engine/e-mail-utils.h
index bf95beb..95796d3 100644
--- a/libemail-engine/e-mail-utils.h
+++ b/libemail-engine/e-mail-utils.h
@@ -78,5 +78,11 @@ gboolean     em_utils_is_local_delivery_mbox_file
                                                (CamelService *service);
 
 void           em_utils_expand_groups          (CamelInternetAddress *addresses);
+void           em_utils_get_real_folder_and_message_uid
+                                               (CamelFolder *folder,
+                                                const gchar *uid,
+                                                CamelFolder **out_real_folder,
+                                                gchar **folder_uri,
+                                                gchar **message_uid);
 
 #endif /* E_MAIL_UTILS_H */
diff --git a/mail/em-composer-utils.c b/mail/em-composer-utils.c
index 2a68541..5eb1cd9 100644
--- a/mail/em-composer-utils.c
+++ b/mail/em-composer-utils.c
@@ -1964,58 +1964,6 @@ emu_update_composers_security (EMsgComposer *composer,
        }
 }
 
-static void
-em_utils_get_real_folder_and_message_uid (CamelFolder *folder,
-                                         const gchar *uid,
-                                         CamelFolder **out_real_folder,
-                                         gchar **folder_uri,
-                                         gchar **message_uid)
-{
-       g_return_if_fail (folder != NULL);
-       g_return_if_fail (uid != NULL);
-
-       if (out_real_folder)
-               *out_real_folder = NULL;
-
-       if (CAMEL_IS_VEE_FOLDER (folder)) {
-               CamelMessageInfo *mi;
-
-               mi = camel_folder_get_message_info (folder, uid);
-               if (mi) {
-                       CamelFolder *real_folder;
-                       gchar *real_uid = NULL;
-
-                       real_folder = camel_vee_folder_get_location (
-                               CAMEL_VEE_FOLDER (folder),
-                               (CamelVeeMessageInfo *) mi,
-                               &real_uid);
-
-                       if (real_folder) {
-                               if (folder_uri)
-                                       *folder_uri = e_mail_folder_uri_from_folder (real_folder);
-                               if (message_uid)
-                                       *message_uid = real_uid;
-                               else
-                                       g_free (real_uid);
-
-                               camel_message_info_unref (mi);
-
-                               if (out_real_folder)
-                                       *out_real_folder = g_object_ref (real_folder);
-
-                               return;
-                       }
-
-                       camel_message_info_unref (mi);
-               }
-       }
-
-       if (folder_uri)
-               *folder_uri = e_mail_folder_uri_from_folder (folder);
-       if (message_uid)
-               *message_uid = g_strdup (uid);
-}
-
 void
 em_utils_get_real_folder_uri_and_message_uid (CamelFolder *folder,
                                               const gchar *uid,


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]