[evolution-data-server] Bug 772947 - Global junk test option doesn't respect account settings
- From: Milan Crha <mcrha src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [evolution-data-server] Bug 772947 - Global junk test option doesn't respect account settings
- Date: Thu, 10 Nov 2016 13:20:42 +0000 (UTC)
commit 517204d3e39a8c9385f523a280870e6b67727e1d
Author: Milan Crha <mcrha redhat com>
Date: Thu Nov 10 14:20:52 2016 +0100
Bug 772947 - Global junk test option doesn't respect account settings
src/camel/camel-folder.c | 2 +-
src/camel/camel-local-settings.c | 135 ++++++++++++++++++++++
src/camel/camel-local-settings.h | 10 ++
src/camel/camel-session.c | 13 ++-
src/camel/camel-session.h | 2 +
src/camel/providers/local/camel-local-folder.c | 10 ++
src/camel/providers/local/camel-local-provider.c | 13 ++
src/camel/providers/nntp/camel-nntp-folder.c | 6 +-
src/camel/providers/nntp/camel-nntp-provider.c | 2 +
src/camel/providers/nntp/camel-nntp-settings.c | 68 +++++++++++
src/camel/providers/nntp/camel-nntp-settings.h | 5 +
11 files changed, 260 insertions(+), 6 deletions(-)
---
diff --git a/src/camel/camel-folder.c b/src/camel/camel-folder.c
index 460da61..87bb683 100644
--- a/src/camel/camel-folder.c
+++ b/src/camel/camel-folder.c
@@ -1144,7 +1144,7 @@ folder_changed (CamelFolder *folder,
driver = camel_session_get_filter_driver (
session,
(camel_folder_get_flags (folder) & CAMEL_FOLDER_FILTER_RECENT)
- ? "incoming" : "junktest", NULL);
+ ? "incoming" : "junktest", folder, NULL);
if (driver) {
recents = g_ptr_array_new ();
diff --git a/src/camel/camel-local-settings.c b/src/camel/camel-local-settings.c
index 800d64b..023cb5d 100644
--- a/src/camel/camel-local-settings.c
+++ b/src/camel/camel-local-settings.c
@@ -26,10 +26,14 @@
struct _CamelLocalSettingsPrivate {
GMutex property_lock;
gchar *path;
+ gboolean filter_all;
+ gboolean filter_junk;
};
enum {
PROP_0,
+ PROP_FILTER_ALL,
+ PROP_FILTER_JUNK,
PROP_PATH
};
@@ -45,6 +49,18 @@ local_settings_set_property (GObject *object,
GParamSpec *pspec)
{
switch (property_id) {
+ case PROP_FILTER_ALL:
+ camel_local_settings_set_filter_all (
+ CAMEL_LOCAL_SETTINGS (object),
+ g_value_get_boolean (value));
+ return;
+
+ case PROP_FILTER_JUNK:
+ camel_local_settings_set_filter_junk (
+ CAMEL_LOCAL_SETTINGS (object),
+ g_value_get_boolean (value));
+ return;
+
case PROP_PATH:
camel_local_settings_set_path (
CAMEL_LOCAL_SETTINGS (object),
@@ -62,6 +78,20 @@ local_settings_get_property (GObject *object,
GParamSpec *pspec)
{
switch (property_id) {
+ case PROP_FILTER_ALL:
+ g_value_set_boolean (
+ value,
+ camel_local_settings_get_filter_all (
+ CAMEL_LOCAL_SETTINGS (object)));
+ return;
+
+ case PROP_FILTER_JUNK:
+ g_value_set_boolean (
+ value,
+ camel_local_settings_get_filter_junk (
+ CAMEL_LOCAL_SETTINGS (object)));
+ return;
+
case PROP_PATH:
g_value_take_string (
value,
@@ -111,6 +141,30 @@ camel_local_settings_class_init (CamelLocalSettingsClass *class)
G_PARAM_READWRITE |
G_PARAM_CONSTRUCT |
G_PARAM_STATIC_STRINGS));
+
+ g_object_class_install_property (
+ object_class,
+ PROP_FILTER_ALL,
+ g_param_spec_boolean (
+ "filter-all",
+ "Filter All",
+ "Whether to apply filters in all folders",
+ FALSE,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT |
+ G_PARAM_STATIC_STRINGS));
+
+ g_object_class_install_property (
+ object_class,
+ PROP_FILTER_JUNK,
+ g_param_spec_boolean (
+ "filter-junk",
+ "Filter Junk",
+ "Whether to check new messages for junk",
+ TRUE,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT |
+ G_PARAM_STATIC_STRINGS));
}
static void
@@ -218,3 +272,84 @@ camel_local_settings_set_path (CamelLocalSettings *settings,
g_object_notify (G_OBJECT (settings), "path");
}
+/**
+ * camel_local_settings_get_filter_all:
+ * @settings: a #CamelLocalSettings
+ *
+ * Returns whether apply filters in all folders.
+ *
+ * Returns: whether to apply filters in all folders
+ *
+ * Since: 3.24
+ **/
+gboolean
+camel_local_settings_get_filter_all (CamelLocalSettings *settings)
+{
+ g_return_val_if_fail (CAMEL_IS_LOCAL_SETTINGS (settings), FALSE);
+
+ return settings->priv->filter_all;
+}
+
+/**
+ * camel_local_settings_set_filter_all:
+ * @settings: a #CamelLocalSettings
+ * @filter_all: whether to apply filters in all folders
+ *
+ * Sets whether to apply filters in all folders.
+ *
+ * Since: 3.24
+ **/
+void
+camel_local_settings_set_filter_all (CamelLocalSettings *settings,
+ gboolean filter_all)
+{
+ g_return_if_fail (CAMEL_IS_LOCAL_SETTINGS (settings));
+
+ if (settings->priv->filter_all == filter_all)
+ return;
+
+ settings->priv->filter_all = filter_all;
+
+ g_object_notify (G_OBJECT (settings), "filter-all");
+}
+
+/**
+ * camel_local_settings_get_filter_junk:
+ * @settings: a #CamelLocalSettings
+ *
+ * Returns whether to check new messages for junk.
+ *
+ * Returns: whether to check new messages for junk
+ *
+ * Since: 3.24
+ **/
+gboolean
+camel_local_settings_get_filter_junk (CamelLocalSettings *settings)
+{
+ g_return_val_if_fail (CAMEL_IS_LOCAL_SETTINGS (settings), FALSE);
+
+ return settings->priv->filter_junk;
+}
+
+/**
+ * camel_local_settings_set_filter_junk:
+ * @settings: a #CamelLocalSettings
+ * @filter_junk: whether to check new messages for junk
+ *
+ * Sets whether to check new messages for junk.
+ *
+ * Since: 3.24
+ **/
+void
+camel_local_settings_set_filter_junk (CamelLocalSettings *settings,
+ gboolean filter_junk)
+{
+ g_return_if_fail (CAMEL_IS_LOCAL_SETTINGS (settings));
+
+ if (settings->priv->filter_junk == filter_junk)
+ return;
+
+ settings->priv->filter_junk = filter_junk;
+
+ g_object_notify (G_OBJECT (settings), "filter-junk");
+}
diff --git a/src/camel/camel-local-settings.h b/src/camel/camel-local-settings.h
index 6775928..ea5b76c 100644
--- a/src/camel/camel-local-settings.h
+++ b/src/camel/camel-local-settings.h
@@ -76,6 +76,16 @@ const gchar * camel_local_settings_get_path (CamelLocalSettings *settings);
gchar * camel_local_settings_dup_path (CamelLocalSettings *settings);
void camel_local_settings_set_path (CamelLocalSettings *settings,
const gchar *path);
+gboolean camel_local_settings_get_filter_all
+ (CamelLocalSettings *settings);
+void camel_local_settings_set_filter_all
+ (CamelLocalSettings *settings,
+ gboolean filter_all);
+gboolean camel_local_settings_get_filter_junk
+ (CamelLocalSettings *settings);
+void camel_local_settings_set_filter_junk
+ (CamelLocalSettings *settings,
+ gboolean filter_junk);
G_END_DECLS
diff --git a/src/camel/camel-session.c b/src/camel/camel-session.c
index c7d76b9..0029f3c 100644
--- a/src/camel/camel-session.c
+++ b/src/camel/camel-session.c
@@ -1361,14 +1361,19 @@ camel_session_set_online (CamelSession *session,
* camel_session_get_filter_driver:
* @session: a #CamelSession
* @type: the type of filter (eg, "incoming")
+ * @for_folder: (nullable): an optional #CamelFolder, for which the filter driver will run, or %NULL
* @error: return location for a #GError, or %NULL
*
- * Returns:(transfer none): a filter driver, loaded with applicable rules
+ * The optional @for_folder can be used to determine which filters
+ * to add and which not.
+ *
+ * Returns: (transfer none): a filter driver, loaded with applicable rules
**/
CamelFilterDriver *
camel_session_get_filter_driver (CamelSession *session,
- const gchar *type,
- GError **error)
+ const gchar *type,
+ CamelFolder *for_folder,
+ GError **error)
{
CamelSessionClass *class;
CamelFilterDriver *driver;
@@ -1379,7 +1384,7 @@ camel_session_get_filter_driver (CamelSession *session,
class = CAMEL_SESSION_GET_CLASS (session);
g_return_val_if_fail (class->get_filter_driver != NULL, NULL);
- driver = class->get_filter_driver (session, type, error);
+ driver = class->get_filter_driver (session, type, for_folder, error);
CAMEL_CHECK_GERROR (session, get_filter_driver, driver != NULL, error);
return driver;
diff --git a/src/camel/camel-session.h b/src/camel/camel-session.h
index 1745ac6..cdf8184 100644
--- a/src/camel/camel-session.h
+++ b/src/camel/camel-session.h
@@ -115,6 +115,7 @@ struct _CamelSessionClass {
CamelFilterDriver *
(*get_filter_driver) (CamelSession *session,
const gchar *type,
+ CamelFolder *for_folder,
GError **error);
gboolean (*lookup_addressbook) (CamelSession *session,
const gchar *name);
@@ -200,6 +201,7 @@ void camel_session_set_online (CamelSession *session,
CamelFilterDriver *
camel_session_get_filter_driver (CamelSession *session,
const gchar *type,
+ CamelFolder *for_folder,
GError **error);
CamelJunkFilter *
camel_session_get_junk_filter (CamelSession *session);
diff --git a/src/camel/providers/local/camel-local-folder.c b/src/camel/providers/local/camel-local-folder.c
index 1b451aa..e978aa1 100644
--- a/src/camel/providers/local/camel-local-folder.c
+++ b/src/camel/providers/local/camel-local-folder.c
@@ -544,6 +544,7 @@ camel_local_folder_construct (CamelLocalFolder *lf,
CamelStore *parent_store;
const gchar *full_name;
gboolean need_summary_check;
+ gboolean filter_all = FALSE, filter_junk = TRUE;
folder = CAMEL_FOLDER (lf);
full_name = camel_folder_get_full_name (folder);
@@ -555,12 +556,21 @@ camel_local_folder_construct (CamelLocalFolder *lf,
local_settings = CAMEL_LOCAL_SETTINGS (settings);
lf->base_path = camel_local_settings_dup_path (local_settings);
+ filter_all = camel_local_settings_get_filter_all (local_settings);
+ filter_junk = camel_local_settings_get_filter_junk (local_settings);
g_object_unref (settings);
ls = CAMEL_LOCAL_STORE (parent_store);
need_summary_check = camel_local_store_get_need_summary_check (ls);
+ filter_junk = filter_junk || camel_local_store_is_main_store (CAMEL_LOCAL_STORE (parent_store));
+ if (filter_all || filter_junk) {
+ camel_folder_set_flags (folder, camel_folder_get_flags (folder) |
+ (filter_all ? CAMEL_FOLDER_FILTER_RECENT : 0) |
+ (filter_junk ? CAMEL_FOLDER_FILTER_JUNK : 0));
+ }
+
lf->folder_path = camel_local_store_get_full_path (ls, full_name);
lf->index_path = camel_local_store_get_meta_path (ls, full_name, ".ibex");
statepath = camel_local_store_get_meta_path (ls, full_name, ".cmeta");
diff --git a/src/camel/providers/local/camel-local-provider.c
b/src/camel/providers/local/camel-local-provider.c
index 0613dd0..af18e7c 100644
--- a/src/camel/providers/local/camel-local-provider.c
+++ b/src/camel/providers/local/camel-local-provider.c
@@ -35,6 +35,10 @@
static CamelProviderConfEntry mh_conf_entries[] = {
{ CAMEL_PROVIDER_CONF_SECTION_START, "general", NULL, N_("Options") },
+ { CAMEL_PROVIDER_CONF_CHECKBOX, "filter-all", NULL,
+ N_("Apply _filters to new messages in all folders"), "1" },
+ { CAMEL_PROVIDER_CONF_CHECKBOX, "filter-junk", NULL,
+ N_("Check new messages for _Junk contents"), "1" },
{ CAMEL_PROVIDER_CONF_CHECKBOX, "use-dot-folders", NULL,
N_("_Use the '.folders' folder summary file (exmh)"), "0" },
{ CAMEL_PROVIDER_CONF_SECTION_END },
@@ -56,6 +60,11 @@ static CamelProvider mh_provider = {
#endif
static CamelProviderConfEntry mbox_conf_entries[] = {
+ { CAMEL_PROVIDER_CONF_SECTION_START, "general", NULL, N_("Options") },
+ { CAMEL_PROVIDER_CONF_CHECKBOX, "filter-all", NULL,
+ N_("Apply _filters to new messages"), "1" },
+ { CAMEL_PROVIDER_CONF_CHECKBOX, "filter-junk", NULL,
+ N_("Check new messages for _Junk contents"), "1" },
{ CAMEL_PROVIDER_CONF_END }
};
@@ -75,6 +84,8 @@ static CamelProviderConfEntry maildir_conf_entries[] = {
{ CAMEL_PROVIDER_CONF_SECTION_START, "general", NULL, N_("Options") },
{ CAMEL_PROVIDER_CONF_CHECKBOX, "filter-inbox", NULL,
N_("_Apply filters to new messages in Inbox"), "0" },
+ { CAMEL_PROVIDER_CONF_CHECKBOX, "filter-junk", NULL,
+ N_("Check new messages for _Junk contents"), "1" },
{ CAMEL_PROVIDER_CONF_SECTION_END },
{ CAMEL_PROVIDER_CONF_END }
};
@@ -97,6 +108,8 @@ static CamelProviderConfEntry spool_conf_entries[] = {
{ CAMEL_PROVIDER_CONF_SECTION_START, "general", NULL, N_("Options") },
{ CAMEL_PROVIDER_CONF_CHECKBOX, "filter-inbox", NULL,
N_("_Apply filters to new messages in Inbox"), "0" },
+ { CAMEL_PROVIDER_CONF_CHECKBOX, "filter-junk", NULL,
+ N_("Check new messages for _Junk contents"), "1" },
{ CAMEL_PROVIDER_CONF_CHECKBOX, "use-xstatus-headers", NULL, N_("_Store status headers in
Elm/Pine/Mutt format"), "0" },
{ CAMEL_PROVIDER_CONF_SECTION_END },
{ CAMEL_PROVIDER_CONF_END }
diff --git a/src/camel/providers/nntp/camel-nntp-folder.c b/src/camel/providers/nntp/camel-nntp-folder.c
index 8ff03a1..5453586 100644
--- a/src/camel/providers/nntp/camel-nntp-folder.c
+++ b/src/camel/providers/nntp/camel-nntp-folder.c
@@ -783,7 +783,7 @@ camel_nntp_folder_new (CamelStore *parent,
CamelStoreInfo *si;
const gchar *user_cache_dir;
gboolean subscribed = TRUE;
- gboolean filter_all;
+ gboolean filter_all = FALSE, filter_junk = TRUE;
service = CAMEL_SERVICE (parent);
user_cache_dir = camel_service_get_user_cache_dir (service);
@@ -793,6 +793,7 @@ camel_nntp_folder_new (CamelStore *parent,
g_object_get (
settings,
"filter-all", &filter_all,
+ "filter-junk", &filter_junk,
NULL);
g_object_unref (settings);
@@ -818,6 +819,9 @@ camel_nntp_folder_new (CamelStore *parent,
if (filter_all || nntp_folder_get_apply_filters (nntp_folder))
camel_folder_set_flags (folder, camel_folder_get_flags (folder) | CAMEL_FOLDER_FILTER_RECENT);
+ if (filter_junk)
+ camel_folder_set_flags (folder, camel_folder_get_flags (folder) | CAMEL_FOLDER_FILTER_JUNK);
+
camel_folder_summary_load (camel_folder_get_folder_summary (folder), NULL);
nntp_store = CAMEL_NNTP_STORE (parent);
diff --git a/src/camel/providers/nntp/camel-nntp-provider.c b/src/camel/providers/nntp/camel-nntp-provider.c
index a2382a1..4f88ede 100644
--- a/src/camel/providers/nntp/camel-nntp-provider.c
+++ b/src/camel/providers/nntp/camel-nntp-provider.c
@@ -36,6 +36,8 @@ static CamelProviderConfEntry nntp_conf_entries[] = {
{ CAMEL_PROVIDER_CONF_SECTION_START, "general", NULL, N_("Options") },
{ CAMEL_PROVIDER_CONF_CHECKBOX, "filter-all", NULL,
N_("Apply _filters to new messages in all folders"), "0" },
+ { CAMEL_PROVIDER_CONF_CHECKBOX, "filter-junk", NULL,
+ N_("Check new messages for _Junk contents"), "0" },
{ CAMEL_PROVIDER_CONF_SECTION_END },
{ CAMEL_PROVIDER_CONF_SECTION_START, "folders", NULL,
N_("Folders") },
diff --git a/src/camel/providers/nntp/camel-nntp-settings.c b/src/camel/providers/nntp/camel-nntp-settings.c
index 94feefb..921ed2c 100644
--- a/src/camel/providers/nntp/camel-nntp-settings.c
+++ b/src/camel/providers/nntp/camel-nntp-settings.c
@@ -23,6 +23,7 @@
struct _CamelNNTPSettingsPrivate {
gboolean filter_all;
+ gboolean filter_junk;
gboolean folder_hierarchy_relative;
gboolean short_folder_names;
};
@@ -31,6 +32,7 @@ enum {
PROP_0,
PROP_AUTH_MECHANISM,
PROP_FILTER_ALL,
+ PROP_FILTER_JUNK,
PROP_FOLDER_HIERARCHY_RELATIVE,
PROP_HOST,
PROP_PORT,
@@ -65,6 +67,12 @@ nntp_settings_set_property (GObject *object,
g_value_get_boolean (value));
return;
+ case PROP_FILTER_JUNK:
+ camel_nntp_settings_set_filter_junk (
+ CAMEL_NNTP_SETTINGS (object),
+ g_value_get_boolean (value));
+ return;
+
case PROP_FOLDER_HIERARCHY_RELATIVE:
camel_nntp_settings_set_folder_hierarchy_relative (
CAMEL_NNTP_SETTINGS (object),
@@ -126,6 +134,13 @@ nntp_settings_get_property (GObject *object,
CAMEL_NNTP_SETTINGS (object)));
return;
+ case PROP_FILTER_JUNK:
+ g_value_set_boolean (
+ value,
+ camel_nntp_settings_get_filter_junk (
+ CAMEL_NNTP_SETTINGS (object)));
+ return;
+
case PROP_FOLDER_HIERARCHY_RELATIVE:
g_value_set_boolean (
value,
@@ -248,6 +263,18 @@ camel_nntp_settings_class_init (CamelNNTPSettingsClass *class)
G_PARAM_READWRITE |
G_PARAM_CONSTRUCT |
G_PARAM_STATIC_STRINGS));
+
+ g_object_class_install_property (
+ object_class,
+ PROP_FILTER_JUNK,
+ g_param_spec_boolean (
+ "filter-junk",
+ "Filter Junk",
+ "Whether to check new messages for junk",
+ TRUE,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT |
+ G_PARAM_STATIC_STRINGS));
}
static void
@@ -298,6 +325,47 @@ camel_nntp_settings_set_filter_all (CamelNNTPSettings *settings,
}
/**
+ * camel_nntp_settings_get_filter_junk:
+ * @settings: a #CamelNNTPSettings
+ *
+ * Returns whether to check new messages for junk.
+ *
+ * Returns: whether to check new messages for junk
+ *
+ * Since: 3.24
+ **/
+gboolean
+camel_nntp_settings_get_filter_junk (CamelNNTPSettings *settings)
+{
+ g_return_val_if_fail (CAMEL_IS_NNTP_SETTINGS (settings), FALSE);
+
+ return settings->priv->filter_junk;
+}
+
+/**
+ * camel_nntp_settings_set_filter_junk:
+ * @settings: a #CamelNNTPSettings
+ * @filter_junk: whether to check new messages for junk
+ *
+ * Sets whether to check new messages for junk.
+ *
+ * Since: 3.24
+ **/
+void
+camel_nntp_settings_set_filter_junk (CamelNNTPSettings *settings,
+ gboolean filter_junk)
+{
+ g_return_if_fail (CAMEL_IS_NNTP_SETTINGS (settings));
+
+ if (settings->priv->filter_junk == filter_junk)
+ return;
+
+ settings->priv->filter_junk = filter_junk;
+
+ g_object_notify (G_OBJECT (settings), "filter-junk");
+}
+
+/**
* camel_nntp_settings_get_folder_hierarchy_relative:
* @settings: a #CamelNNTPSettings
*
diff --git a/src/camel/providers/nntp/camel-nntp-settings.h b/src/camel/providers/nntp/camel-nntp-settings.h
index 74b198e..8aa5233 100644
--- a/src/camel/providers/nntp/camel-nntp-settings.h
+++ b/src/camel/providers/nntp/camel-nntp-settings.h
@@ -64,6 +64,11 @@ gboolean camel_nntp_settings_get_filter_all
void camel_nntp_settings_set_filter_all
(CamelNNTPSettings *settings,
gboolean filter_all);
+gboolean camel_nntp_settings_get_filter_junk
+ (CamelNNTPSettings *settings);
+void camel_nntp_settings_set_filter_junk
+ (CamelNNTPSettings *settings,
+ gboolean filter_junk);
gboolean camel_nntp_settings_get_folder_hierarchy_relative
(CamelNNTPSettings *settings);
void camel_nntp_settings_set_folder_hierarchy_relative
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]