[evolution] Bug 770083 - Support removing attachments inside a search folder
- From: Milan Crha <mcrha src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [evolution] Bug 770083 - Support removing attachments inside a search folder
- Date: Fri, 19 Aug 2016 10:17:08 +0000 (UTC)
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]