[evolution] Bug 440661 - vFolder "Status is Junk" doesn't show Junk mails
- From: Milan Crha <mcrha src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [evolution] Bug 440661 - vFolder "Status is Junk" doesn't show Junk mails
- Date: Tue, 3 Mar 2015 09:49:52 +0000 (UTC)
commit 80706ff2e80aece4699171564545f0a2cb5e509f
Author: Milan Crha <mcrha redhat com>
Date: Tue Mar 3 10:48:59 2015 +0100
Bug 440661 - vFolder "Status is Junk" doesn't show Junk mails
mail/message-list.c | 48 ++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 48 insertions(+), 0 deletions(-)
---
diff --git a/mail/message-list.c b/mail/message-list.c
index 4e12cca..a4645b7 100644
--- a/mail/message-list.c
+++ b/mail/message-list.c
@@ -3768,6 +3768,42 @@ clear_tree (MessageList *message_list,
}
static gboolean
+message_list_folder_filters_system_flag (const gchar *expr,
+ const gchar *flag)
+{
+ const gchar *pos;
+
+ if (!expr || !*expr)
+ return FALSE;
+
+ g_return_val_if_fail (flag && *flag, FALSE);
+
+ while (pos = strstr (expr, flag), pos) {
+ /* This is searching for something like 'system-flag "' + flag + '"'
+ in the expression, without fully parsing it. */
+ if (pos > expr && pos[-1] == '\"' && pos[strlen(flag)] == '\"') {
+ const gchar *system_flag = "system-flag";
+ gint ii = 2, jj = strlen (system_flag) - 1;
+
+ while (pos - ii >= expr && g_ascii_isspace (pos[-ii]))
+ ii++;
+
+ while (pos - ii >= expr && jj >= 0 && system_flag[jj] == pos[-ii]) {
+ ii++;
+ jj--;
+ }
+
+ if (jj == -1)
+ return TRUE;
+ }
+
+ expr = pos + 1;
+ }
+
+ return FALSE;
+}
+
+static gboolean
folder_store_supports_vjunk_folder (CamelFolder *folder)
{
CamelStore *store;
@@ -3806,6 +3842,12 @@ message_list_get_hide_junk (MessageList *message_list,
if (folder->folder_flags & CAMEL_FOLDER_IS_TRASH)
return FALSE;
+ if (CAMEL_IS_VEE_FOLDER (folder)) {
+ const gchar *expr = camel_vee_folder_get_expression (CAMEL_VEE_FOLDER (folder));
+ if (message_list_folder_filters_system_flag (expr, "Junk"))
+ return FALSE;
+ }
+
return TRUE;
}
@@ -3829,6 +3871,12 @@ message_list_get_hide_deleted (MessageList *message_list,
((store->flags & CAMEL_STORE_VTRASH) == 0) ||
((folder->folder_flags & CAMEL_FOLDER_IS_TRASH) == 0);
+ if (non_trash_folder && CAMEL_IS_VEE_FOLDER (folder)) {
+ const gchar *expr = camel_vee_folder_get_expression (CAMEL_VEE_FOLDER (folder));
+ if (message_list_folder_filters_system_flag (expr, "Deleted"))
+ return FALSE;
+ }
+
return non_trash_folder;
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]