[evolution-data-server] [IMAPx] Add "use-multi-fetch" boolean option



commit 6ace0dda33ba4a604ab2ca9537e8dde2742f0eb5
Author: Milan Crha <mcrha redhat com>
Date:   Mon Feb 15 18:03:38 2016 +0100

    [IMAPx] Add "use-multi-fetch" boolean option
    
    The default is TRUE. Set it to FALSE, to disable message download
    in chunks, which some servers dislike.
    
    Related to a downstream bug report:
    https://bugzilla.redhat.com/show_bug.cgi?id=1306846

 camel/providers/imapx/camel-imapx-server.c   |    5 ++-
 camel/providers/imapx/camel-imapx-settings.c |   68 ++++++++++++--------------
 camel/providers/imapx/camel-imapx-settings.h |    6 +-
 docs/reference/camel/camel-sections.txt      |    4 +-
 4 files changed, 40 insertions(+), 43 deletions(-)
---
diff --git a/camel/providers/imapx/camel-imapx-server.c b/camel/providers/imapx/camel-imapx-server.c
index 2da489a..569d9ad 100644
--- a/camel/providers/imapx/camel-imapx-server.c
+++ b/camel/providers/imapx/camel-imapx-server.c
@@ -3961,6 +3961,7 @@ camel_imapx_server_get_message_sync (CamelIMAPXServer *is,
 {
        CamelMessageInfo *mi;
        CamelStream *result_stream = NULL;
+       CamelIMAPXSettings *settings;
        GIOStream *cache_stream;
        gsize data_size;
        gboolean use_multi_fetch;
@@ -3997,8 +3998,10 @@ camel_imapx_server_get_message_sync (CamelIMAPXServer *is,
                return NULL;
        }
 
+       settings = camel_imapx_server_ref_settings (is);
        data_size = ((CamelMessageInfoBase *) mi)->size;
-       use_multi_fetch = data_size > MULTI_SIZE;
+       use_multi_fetch = data_size > MULTI_SIZE && camel_imapx_settings_get_use_multi_fetch (settings);
+       g_object_unref (settings);
 
        g_warn_if_fail (is->priv->get_message_stream == NULL);
 
diff --git a/camel/providers/imapx/camel-imapx-settings.c b/camel/providers/imapx/camel-imapx-settings.c
index 3540296..956e33a 100644
--- a/camel/providers/imapx/camel-imapx-settings.c
+++ b/camel/providers/imapx/camel-imapx-settings.c
@@ -31,9 +31,9 @@ struct _CamelIMAPXSettingsPrivate {
        gchar *real_trash_path;
        gchar *shell_command;
 
-       guint batch_fetch_count;
        guint concurrent_connections;
 
+       gboolean use_multi_fetch;
        gboolean check_all;
        gboolean check_subscribed;
        gboolean filter_all;
@@ -55,7 +55,7 @@ struct _CamelIMAPXSettingsPrivate {
 enum {
        PROP_0,
        PROP_AUTH_MECHANISM,
-       PROP_BATCH_FETCH_COUNT,
+       PROP_USE_MULTI_FETCH,
        PROP_CHECK_ALL,
        PROP_CHECK_SUBSCRIBED,
        PROP_CONCURRENT_CONNECTIONS,
@@ -102,10 +102,10 @@ imapx_settings_set_property (GObject *object,
                                g_value_get_string (value));
                        return;
 
-               case PROP_BATCH_FETCH_COUNT:
-                       camel_imapx_settings_set_batch_fetch_count (
+               case PROP_USE_MULTI_FETCH:
+                       camel_imapx_settings_set_use_multi_fetch (
                                CAMEL_IMAPX_SETTINGS (object),
-                               g_value_get_uint (value));
+                               g_value_get_boolean (value));
                        return;
 
                case PROP_CHECK_ALL:
@@ -270,10 +270,10 @@ imapx_settings_get_property (GObject *object,
                                CAMEL_NETWORK_SETTINGS (object)));
                        return;
 
-               case PROP_BATCH_FETCH_COUNT:
-                       g_value_set_uint (
+               case PROP_USE_MULTI_FETCH:
+                       g_value_set_boolean (
                                value,
-                               camel_imapx_settings_get_batch_fetch_count (
+                               camel_imapx_settings_get_use_multi_fetch (
                                CAMEL_IMAPX_SETTINGS (object)));
                        return;
 
@@ -487,14 +487,12 @@ camel_imapx_settings_class_init (CamelIMAPXSettingsClass *class)
 
        g_object_class_install_property (
                object_class,
-               PROP_BATCH_FETCH_COUNT,
-               g_param_spec_uint (
-                       "batch-fetch-count",
-                       "Batch Fetch Count",
-                       "Number of envelopes to fetch at once",
-                       0,
-                       G_MAXUINT,
-                       500,
+               PROP_USE_MULTI_FETCH,
+               g_param_spec_boolean (
+                       "use-multi-fetch",
+                       "Use Multi Fetch",
+                       "Whether allow downloading of large messages in chunks",
+                       TRUE,
                        G_PARAM_READWRITE |
                        G_PARAM_CONSTRUCT |
                        G_PARAM_STATIC_STRINGS));
@@ -776,50 +774,46 @@ camel_imapx_settings_init (CamelIMAPXSettings *settings)
 }
 
 /**
- * camel_imapx_settings_get_batch_fetch_count:
+ * camel_imapx_settings_get_use_multi_fetch:
  * @settings: a #CamelIMAPXSettings
  *
- * Returns the number of message envelopes to fetch at once.
- *
- * This is a tunable performance parameter and probably should not be
- * exposed in a graphical user interface.
+ * Returns whether large messages can be downloaded in chunks.
+ * The default is %TRUE, but some server can be slower when
+ * the messages are downloaded in parts, rather than in one call.
  *
- * Returns: number of message envelopes to fetch at once
+ * Returns: whether large messages can be downloaded in chunks
  *
- * Since: 3.2
+ * Since: 3.20
  **/
 guint
-camel_imapx_settings_get_batch_fetch_count (CamelIMAPXSettings *settings)
+camel_imapx_settings_get_use_multi_fetch (CamelIMAPXSettings *settings)
 {
        g_return_val_if_fail (CAMEL_IS_IMAPX_SETTINGS (settings), 0);
 
-       return settings->priv->batch_fetch_count;
+       return settings->priv->use_multi_fetch;
 }
 
 /**
- * camel_imapx_settings_set_batch_fetch_count:
+ * camel_imapx_settings_set_use_multi_fetch:
  * @settings: a #CamelIMAPXSettings
- * @batch_fetch_count: number of message envelopes to fetch at once
+ * @use_multi_fetch: whether can download large messages in chunks
  *
- * Sets the number of message envelopes to fetch at once.
+ * Sets whether can download large messages in chunks.
  *
- * This is a tunable performance parameter and probably should not be
- * exposed in a graphical user interface.
- *
- * Since: 3.2
+ * Since: 3.20
  **/
 void
-camel_imapx_settings_set_batch_fetch_count (CamelIMAPXSettings *settings,
-                                            guint batch_fetch_count)
+camel_imapx_settings_set_use_multi_fetch (CamelIMAPXSettings *settings,
+                                         guint use_multi_fetch)
 {
        g_return_if_fail (CAMEL_IS_IMAPX_SETTINGS (settings));
 
-       if (settings->priv->batch_fetch_count == batch_fetch_count)
+       if (settings->priv->use_multi_fetch == use_multi_fetch)
                return;
 
-       settings->priv->batch_fetch_count = batch_fetch_count;
+       settings->priv->use_multi_fetch = use_multi_fetch;
 
-       g_object_notify (G_OBJECT (settings), "batch-fetch-count");
+       g_object_notify (G_OBJECT (settings), "use-multi-fetch");
 }
 
 /**
diff --git a/camel/providers/imapx/camel-imapx-settings.h b/camel/providers/imapx/camel-imapx-settings.h
index c2626c9..f1e402e 100644
--- a/camel/providers/imapx/camel-imapx-settings.h
+++ b/camel/providers/imapx/camel-imapx-settings.h
@@ -55,11 +55,11 @@ struct _CamelIMAPXSettingsClass {
 };
 
 GType          camel_imapx_settings_get_type   (void) G_GNUC_CONST;
-guint          camel_imapx_settings_get_batch_fetch_count
+guint          camel_imapx_settings_get_use_multi_fetch
                                                (CamelIMAPXSettings *settings);
-void           camel_imapx_settings_set_batch_fetch_count
+void           camel_imapx_settings_set_use_multi_fetch
                                                (CamelIMAPXSettings *settings,
-                                                guint batch_fetch_count);
+                                                guint use_multi_fetch);
 gboolean       camel_imapx_settings_get_check_all
                                                (CamelIMAPXSettings *settings);
 void           camel_imapx_settings_set_check_all
diff --git a/docs/reference/camel/camel-sections.txt b/docs/reference/camel/camel-sections.txt
index bd04033..b870454 100644
--- a/docs/reference/camel/camel-sections.txt
+++ b/docs/reference/camel/camel-sections.txt
@@ -3737,8 +3737,8 @@ imapx_connect_to_server
 <FILE>camel-imapx-settings</FILE>
 <TITLE>CamelIMAPXSettings</TITLE>
 CamelIMAPXSettings
-camel_imapx_settings_get_batch_fetch_count
-camel_imapx_settings_set_batch_fetch_count
+camel_imapx_settings_get_use_multi_fetch
+camel_imapx_settings_set_use_multi_fetch
 camel_imapx_settings_get_check_all
 camel_imapx_settings_set_check_all
 camel_imapx_settings_get_check_subscribed


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