[evolution] eds-I#372 - SMTP: Add option to not re-encode message on upload



commit 1a891f6ef76a274a6b76881440ac69d5fe3cc57d
Author: Milan Crha <mcrha redhat com>
Date:   Mon Jan 24 18:09:21 2022 +0100

    eds-I#372 - SMTP: Add option to not re-encode message on upload
    
    Related to https://gitlab.gnome.org/GNOME/evolution-data-server/-/issues/372

 src/mail/e-mail-config-provider-page.c             | 224 ++++++++++-----------
 src/mail/e-mail-config-provider-page.h             |   6 +
 .../mail-config/e-mail-config-smtp-backend.c       |   3 +
 3 files changed, 115 insertions(+), 118 deletions(-)
---
diff --git a/src/mail/e-mail-config-provider-page.c b/src/mail/e-mail-config-provider-page.c
index d65f37db7d..bcb9cd0ee8 100644
--- a/src/mail/e-mail-config-provider-page.c
+++ b/src/mail/e-mail-config-provider-page.c
@@ -56,12 +56,10 @@ G_DEFINE_TYPE_WITH_CODE (
                e_mail_config_provider_page_interface_init))
 
 static void
-mail_config_provider_page_handle_dependency (EMailConfigProviderPage *page,
+mail_config_provider_page_handle_dependency (CamelSettings *settings,
                                              CamelProviderConfEntry *entry,
                                              GtkWidget *widget)
 {
-       EMailConfigServiceBackend *backend;
-       CamelSettings *settings;
        GBindingFlags binding_flags = G_BINDING_SYNC_CREATE;
        const gchar *depname = entry->depname;
        gint margin;
@@ -74,9 +72,6 @@ mail_config_provider_page_handle_dependency (EMailConfigProviderPage *page,
                depname++;
        }
 
-       backend = e_mail_config_provider_page_get_backend (page);
-       settings = e_mail_config_service_backend_get_settings (backend);
-
        e_binding_bind_property (
                settings, depname,
                widget, "sensitive",
@@ -88,20 +83,16 @@ mail_config_provider_page_handle_dependency (EMailConfigProviderPage *page,
 }
 
 static void
-mail_config_provider_page_add_section (EMailConfigProviderPage *page,
-                                      GtkBox *main_box,
-                                       CamelProviderConfEntry *entry)
+mail_config_provider_page_add_section (GtkBox *main_box,
+                                      CamelProvider *provider,
+                                      CamelProviderConfEntry *entry,
+                                      gboolean skip_first_section_name)
 {
-       EMailConfigServiceBackend *backend;
-       CamelProvider *provider;
        GtkWidget *widget;
        gchar *markup;
 
        g_return_if_fail (entry->text != NULL);
 
-       backend = e_mail_config_provider_page_get_backend (page);
-       provider = e_mail_config_service_backend_get_provider (backend);
-
        markup = g_markup_printf_escaped ("<b>%s</b>", entry->text);
 
        widget = gtk_label_new (markup);
@@ -111,26 +102,21 @@ mail_config_provider_page_add_section (EMailConfigProviderPage *page,
        gtk_widget_show (widget);
 
        /* Skip the top margin if this is the first entry. */
-       if (entry != provider->extra_conf)
+       if (entry != provider->extra_conf || !skip_first_section_name)
                gtk_widget_set_margin_top (widget, 6);
 
        g_free (markup);
 }
 
 static void
-mail_config_provider_page_add_checkbox (EMailConfigProviderPage *page,
-                                       GtkBox *main_box,
-                                        CamelProviderConfEntry *entry)
+mail_config_provider_page_add_checkbox (GtkBox *main_box,
+                                       CamelSettings *settings,
+                                       CamelProviderConfEntry *entry)
 {
-       EMailConfigServiceBackend *backend;
-       CamelSettings *settings;
        GtkWidget *widget;
 
        g_return_if_fail (entry->text != NULL);
 
-       backend = e_mail_config_provider_page_get_backend (page);
-       settings = e_mail_config_service_backend_get_settings (backend);
-
        widget = gtk_check_button_new_with_mnemonic (entry->text);
        gtk_widget_set_margin_left (widget, STANDARD_MARGIN);
        gtk_box_pack_start (main_box, widget, FALSE, FALSE, 0);
@@ -142,16 +128,14 @@ mail_config_provider_page_add_checkbox (EMailConfigProviderPage *page,
                G_BINDING_BIDIRECTIONAL |
                G_BINDING_SYNC_CREATE);
 
-       mail_config_provider_page_handle_dependency (page, entry, widget);
+       mail_config_provider_page_handle_dependency (settings, entry, widget);
 }
 
 static void
-mail_config_provider_page_add_checkspin (EMailConfigProviderPage *page,
-                                        GtkBox *main_box,
-                                         CamelProviderConfEntry *entry)
+mail_config_provider_page_add_checkspin (GtkBox *main_box,
+                                        CamelSettings *settings,
+                                        CamelProviderConfEntry *entry)
 {
-       EMailConfigServiceBackend *backend;
-       CamelSettings *settings;
        GObjectClass *class;
        GParamSpec *pspec;
        GParamSpec *use_pspec;
@@ -163,9 +147,6 @@ mail_config_provider_page_add_checkspin (EMailConfigProviderPage *page,
 
        g_return_if_fail (entry->text != NULL);
 
-       backend = e_mail_config_provider_page_get_backend (page);
-       settings = e_mail_config_service_backend_get_settings (backend);
-
        /* The entry->name property (e.g. "foo") should be numeric for the
         * spin button.  If a "use" boolean property exists (e.g. "use-foo")
         * then a checkbox is also shown. */
@@ -316,25 +297,20 @@ mail_config_provider_page_add_checkspin (EMailConfigProviderPage *page,
                gtk_widget_show (label);
        }
 
-       mail_config_provider_page_handle_dependency (page, entry, hbox);
+       mail_config_provider_page_handle_dependency (settings, entry, hbox);
 }
 
 static void
-mail_config_provider_page_add_entry (EMailConfigProviderPage *page,
-                                    GtkBox *main_box,
-                                     CamelProviderConfEntry *entry)
+mail_config_provider_page_add_entry (GtkBox *main_box,
+                                    CamelSettings *settings,
+                                    CamelProviderConfEntry *entry)
 {
-       EMailConfigServiceBackend *backend;
-       CamelSettings *settings;
        GtkWidget *hbox;
        GtkWidget *input;
        GtkWidget *label;
 
        g_return_if_fail (entry->text != NULL);
 
-       backend = e_mail_config_provider_page_get_backend (page);
-       settings = e_mail_config_service_backend_get_settings (backend);
-
        hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0);
        gtk_box_set_spacing (GTK_BOX (hbox), 6);
        gtk_widget_set_margin_left (hbox, STANDARD_MARGIN);
@@ -362,12 +338,12 @@ mail_config_provider_page_add_entry (EMailConfigProviderPage *page,
                label, "sensitive",
                G_BINDING_SYNC_CREATE);
 
-       mail_config_provider_page_handle_dependency (page, entry, hbox);
+       mail_config_provider_page_handle_dependency (settings, entry, hbox);
 }
 
 static void
-mail_config_provider_page_add_label (EMailConfigProviderPage *page,
-                                    GtkBox *main_box,
+mail_config_provider_page_add_label (GtkBox *main_box,
+                                    CamelSettings *settings,
                                     CamelProviderConfEntry *entry)
 {
        GtkWidget *hbox;
@@ -386,17 +362,15 @@ mail_config_provider_page_add_label (EMailConfigProviderPage *page,
        gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0);
        gtk_widget_show (label);
 
-       mail_config_provider_page_handle_dependency (page, entry, hbox);
+       mail_config_provider_page_handle_dependency (settings, entry, hbox);
 }
 
 static void
-mail_config_provider_page_add_options (EMailConfigProviderPage *page,
-                                      GtkBox *main_box,
+mail_config_provider_page_add_options (GtkBox *main_box,
+                                      CamelProvider *provider,
+                                      CamelSettings *settings,
                                        CamelProviderConfEntry *entry)
 {
-       EMailConfigServiceBackend *backend;
-       CamelProvider *provider;
-       CamelSettings *settings;
        GtkCellRenderer *renderer;
        GtkListStore *store;
        GtkWidget *hbox;
@@ -415,10 +389,6 @@ mail_config_provider_page_add_options (EMailConfigProviderPage *page,
        g_return_if_fail (entry->text != NULL);
        g_return_if_fail (entry->value != NULL);
 
-       backend = e_mail_config_provider_page_get_backend (page);
-       provider = e_mail_config_service_backend_get_provider (backend);
-       settings = e_mail_config_service_backend_get_settings (backend);
-
        hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0);
        gtk_box_set_spacing (GTK_BOX (hbox), 6);
        gtk_widget_set_margin_left (hbox, STANDARD_MARGIN);
@@ -475,12 +445,12 @@ mail_config_provider_page_add_options (EMailConfigProviderPage *page,
        gtk_cell_layout_set_attributes (
                GTK_CELL_LAYOUT (combo), renderer, "text", 1, NULL);
 
-       mail_config_provider_page_handle_dependency (page, entry, hbox);
+       mail_config_provider_page_handle_dependency (settings, entry, hbox);
 }
 
 static void
-mail_config_provider_page_add_placeholder (EMailConfigProviderPage *page,
-                                          GtkBox *main_box,
+mail_config_provider_page_add_placeholder (GtkBox *main_box,
+                                          CamelSettings *settings,
                                           CamelProviderConfEntry *entry)
 {
        GtkWidget *hbox;
@@ -497,7 +467,82 @@ mail_config_provider_page_add_placeholder (EMailConfigProviderPage *page,
        gtk_box_pack_start (main_box, hbox, FALSE, FALSE, 0);
        gtk_widget_show (hbox);
 
-       mail_config_provider_page_handle_dependency (page, entry, hbox);
+       mail_config_provider_page_handle_dependency (settings, entry, hbox);
+}
+
+void
+e_mail_config_provider_add_widgets (CamelProvider *provider,
+                                   CamelSettings *settings,
+                                   GtkBox *main_box,
+                                   gboolean skip_first_section_name)
+{
+       CamelProviderConfEntry *entries;
+       gboolean first_section = skip_first_section_name;
+       gint ii;
+
+       if (!provider || !provider->extra_conf)
+               return;
+
+       g_return_if_fail (CAMEL_IS_SETTINGS (settings));
+       g_return_if_fail (GTK_IS_BOX (main_box));
+
+       /* Note the "text" member of each CamelProviderConfEntry is
+        * already localized, so we can use it directly in widgets. */
+
+       entries = provider->extra_conf;
+
+       /* Loop until we see CAMEL_PROVIDER_CONF_END. */
+       for (ii = 0; entries[ii].type != CAMEL_PROVIDER_CONF_END; ii++) {
+
+               /* Skip entries with no name. */
+               if (entries[ii].name == NULL)
+                       continue;
+
+               switch (entries[ii].type) {
+                       case CAMEL_PROVIDER_CONF_SECTION_START:
+                               /* Skip the first section start. */
+                               if (first_section) {
+                                       first_section = FALSE;
+                                       continue;
+                               }
+                               mail_config_provider_page_add_section (
+                                       main_box, provider, &entries[ii], skip_first_section_name);
+                               break;
+
+                       case CAMEL_PROVIDER_CONF_CHECKBOX:
+                               mail_config_provider_page_add_checkbox (
+                                       main_box, settings, &entries[ii]);
+                               break;
+
+                       case CAMEL_PROVIDER_CONF_CHECKSPIN:
+                               mail_config_provider_page_add_checkspin (
+                                       main_box, settings, &entries[ii]);
+                               break;
+
+                       case CAMEL_PROVIDER_CONF_ENTRY:
+                               mail_config_provider_page_add_entry (
+                                       main_box, settings, &entries[ii]);
+                               break;
+
+                       case CAMEL_PROVIDER_CONF_LABEL:
+                               mail_config_provider_page_add_label (
+                                       main_box, settings, &entries[ii]);
+                               break;
+
+                       case CAMEL_PROVIDER_CONF_OPTIONS:
+                               mail_config_provider_page_add_options (
+                                       main_box, provider, settings, &entries[ii]);
+                               break;
+
+                       case CAMEL_PROVIDER_CONF_PLACEHOLDER:
+                               mail_config_provider_page_add_placeholder (
+                                       main_box, settings, &entries[ii]);
+                               break;
+
+                       default:
+                               break;  /* skip it */
+               }
+       }
 }
 
 static void
@@ -505,17 +550,15 @@ mail_config_provider_page_add_widgets (EMailConfigProviderPage *page,
                                       GtkBox *main_box)
 {
        EMailConfigServiceBackend *backend;
-       CamelProviderConfEntry *entries;
        CamelProvider *provider;
+       CamelSettings *settings;
        GtkWidget *container;
        GtkWidget *widget;
        ESource *source;
        ESourceExtension *extension;
-       gboolean first_section = TRUE;
        const gchar *extension_name;
        const gchar *text;
        gchar *markup;
-       gint ii;
 
        /* XXX We begin the page with our own section header and refresh
         *     interval setting, and then skip the CamelProvider's first
@@ -529,6 +572,7 @@ mail_config_provider_page_add_widgets (EMailConfigProviderPage *page,
 
        backend = e_mail_config_provider_page_get_backend (page);
        source = e_mail_config_service_backend_get_source (backend);
+       settings = e_mail_config_service_backend_get_settings (backend);
        provider = e_mail_config_service_backend_get_provider (backend);
        g_return_if_fail (provider != NULL);
 
@@ -584,63 +628,7 @@ mail_config_provider_page_add_widgets (EMailConfigProviderPage *page,
        gtk_box_pack_start (GTK_BOX (container), widget, FALSE, FALSE, 0);
        gtk_widget_show (widget);
 
-       /* Note the "text" member of each CamelProviderConfEntry is
-        * already localized, so we can use it directly in widgets. */
-
-       entries = provider->extra_conf;
-
-       /* Loop until we see CAMEL_PROVIDER_CONF_END. */
-       for (ii = 0; entries[ii].type != CAMEL_PROVIDER_CONF_END; ii++) {
-
-               /* Skip entries with no name. */
-               if (entries[ii].name == NULL)
-                       continue;
-
-               switch (entries[ii].type) {
-                       case CAMEL_PROVIDER_CONF_SECTION_START:
-                               /* Skip the first section start. */
-                               if (first_section) {
-                                       first_section = FALSE;
-                                       continue;
-                               }
-                               mail_config_provider_page_add_section (
-                                       page, main_box, &entries[ii]);
-                               break;
-
-                       case CAMEL_PROVIDER_CONF_CHECKBOX:
-                               mail_config_provider_page_add_checkbox (
-                                       page, main_box, &entries[ii]);
-                               break;
-
-                       case CAMEL_PROVIDER_CONF_CHECKSPIN:
-                               mail_config_provider_page_add_checkspin (
-                                       page, main_box, &entries[ii]);
-                               break;
-
-                       case CAMEL_PROVIDER_CONF_ENTRY:
-                               mail_config_provider_page_add_entry (
-                                       page, main_box, &entries[ii]);
-                               break;
-
-                       case CAMEL_PROVIDER_CONF_LABEL:
-                               mail_config_provider_page_add_label (
-                                       page, main_box, &entries[ii]);
-                               break;
-
-                       case CAMEL_PROVIDER_CONF_OPTIONS:
-                               mail_config_provider_page_add_options (
-                                       page, main_box, &entries[ii]);
-                               break;
-
-                       case CAMEL_PROVIDER_CONF_PLACEHOLDER:
-                               mail_config_provider_page_add_placeholder (
-                                       page, main_box, &entries[ii]);
-                               break;
-
-                       default:
-                               break;  /* skip it */
-               }
-       }
+       e_mail_config_provider_add_widgets (provider, settings, main_box, TRUE);
 }
 
 static void
diff --git a/src/mail/e-mail-config-provider-page.h b/src/mail/e-mail-config-provider-page.h
index 6cf3e94e2b..76aa052241 100644
--- a/src/mail/e-mail-config-provider-page.h
+++ b/src/mail/e-mail-config-provider-page.h
@@ -79,6 +79,12 @@ GtkBox *     e_mail_config_provider_page_get_placeholder
                                        (EMailConfigProviderPage *page,
                                         const gchar *name);
 
+void           e_mail_config_provider_add_widgets
+                                       (CamelProvider *provider,
+                                        CamelSettings *settings,
+                                        GtkBox *main_box,
+                                        gboolean skip_first_section_name);
+
 G_END_DECLS
 
 #endif /* E_MAIL_CONFIG_PROVIDER_PAGE_H */
diff --git a/src/modules/mail-config/e-mail-config-smtp-backend.c 
b/src/modules/mail-config/e-mail-config-smtp-backend.c
index 9419ecb03d..9d22caf386 100644
--- a/src/modules/mail-config/e-mail-config-smtp-backend.c
+++ b/src/modules/mail-config/e-mail-config-smtp-backend.c
@@ -24,6 +24,7 @@
 
 #include <mail/e-mail-config-auth-check.h>
 #include <mail/e-mail-config-page.h>
+#include <mail/e-mail-config-provider-page.h>
 #include <mail/e-mail-config-service-page.h>
 
 #include "e-mail-config-smtp-backend.h"
@@ -332,6 +333,8 @@ mail_config_smtp_backend_insert_widgets (EMailConfigServiceBackend *backend,
        priv->forget_password_button = widget; /* do not reference */
        gtk_widget_hide (widget);
 
+       e_mail_config_provider_add_widgets (provider, settings, parent, FALSE);
+
        g_signal_connect (priv->forget_password_button, "clicked",
                G_CALLBACK (smtp_backend_forget_password_cb), backend);
 


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