[evolution] I#1208 - Keep the space in the filenames upon saving



commit 224b46f4c973e37fee7fcd38487ebc9f82bd4931
Author: Milan Crha <mcrha redhat com>
Date:   Thu Nov 5 15:08:16 2020 +0100

    I#1208 - Keep the space in the filenames upon saving
    
    Closes https://gitlab.gnome.org/GNOME/evolution/-/issues/1208

 data/org.gnome.evolution.shell.gschema.xml.in |  5 +++++
 src/addressbook/gui/widgets/eab-gui-util.c    |  2 +-
 src/calendar/gui/e-comp-editor.c              |  2 +-
 src/e-util/e-attachment-store.c               |  2 +-
 src/e-util/e-attachment.c                     |  2 +-
 src/e-util/e-misc-utils.c                     | 32 +++++++++++++++++++++++++++
 src/e-util/e-misc-utils.h                     |  1 +
 src/e-util/e-web-view.c                       |  2 +-
 src/e-util/gal-view-instance.c                |  3 ++-
 src/libemail-engine/mail-config.c             |  2 +-
 src/libemail-engine/mail-folder-cache.c       |  4 ++--
 src/mail/e-mail-backend.c                     |  2 +-
 src/mail/e-mail-display.c                     |  2 +-
 src/mail/e-mail-paned-view.c                  |  4 ++--
 src/mail/e-mail-reader-utils.c                |  2 +-
 src/mail/em-utils.c                           |  4 ++--
 src/plugins/mail-to-task/mail-to-task.c       |  2 +-
 src/shell/e-migrate-base-dirs.c               |  4 ++--
 src/shell/e-shell-utils.c                     |  2 +-
 19 files changed, 59 insertions(+), 20 deletions(-)
---
diff --git a/data/org.gnome.evolution.shell.gschema.xml.in b/data/org.gnome.evolution.shell.gschema.xml.in
index 2512a02169..dd1291e7a4 100644
--- a/data/org.gnome.evolution.shell.gschema.xml.in
+++ b/data/org.gnome.evolution.shell.gschema.xml.in
@@ -135,6 +135,11 @@
       <_summary>Minimum font size to be used by WebKitGTK</_summary>
       <_description>The minimum font size in pixels used to display text in WebKitGTK. This setting controls 
the absolute smallest size. Values other than 0 can potentially break page layouts. Negative values are 
treated as 0.</_description>
     </key>
+    <key name="filename-illegal-chars" type="s">
+      <default>'\'&quot;&amp;`();|&lt;&gt;$%{}!'</default>
+      <_summary>Set of additional illegal characters in the filename</_summary>
+      <_description>When generating file names from custom strings some non-printable or reserved characters 
are replaced with an underscore. Here's a set of additional characters to be replaced.</_description>
+    </key>
     <child name="window" schema="org.gnome.evolution.window"/>
   </schema>
 </schemalist>
diff --git a/src/addressbook/gui/widgets/eab-gui-util.c b/src/addressbook/gui/widgets/eab-gui-util.c
index 8698ccf4e4..6d41d4b401 100644
--- a/src/addressbook/gui/widgets/eab-gui-util.c
+++ b/src/addressbook/gui/widgets/eab-gui-util.c
@@ -268,7 +268,7 @@ make_safe_filename (gchar *name)
        else
                safe = g_strdup (name);
 
-       e_filename_make_safe (safe);
+       e_util_make_safe_filename (safe);
 
        return safe;
 }
diff --git a/src/calendar/gui/e-comp-editor.c b/src/calendar/gui/e-comp-editor.c
index 6978bbb822..98cc498dc9 100644
--- a/src/calendar/gui/e-comp-editor.c
+++ b/src/calendar/gui/e-comp-editor.c
@@ -642,7 +642,7 @@ ece_save_component_attachments_sync (ECalClient *cal_client,
        g_return_val_if_fail (I_CAL_IS_COMPONENT (component), FALSE);
 
        tmp = g_strdup (i_cal_component_get_uid (component));
-       e_filename_make_safe (tmp);
+       e_util_make_safe_filename (tmp);
        filename_prefix = g_strconcat (tmp, "-", NULL);
        g_free (tmp);
 
diff --git a/src/e-util/e-attachment-store.c b/src/e-util/e-attachment-store.c
index 234622aa54..3a2b512679 100644
--- a/src/e-util/e-attachment-store.c
+++ b/src/e-util/e-attachment-store.c
@@ -914,7 +914,7 @@ e_attachment_store_run_save_dialog (EAttachmentStore *store,
                        name = _("attachment.dat");
 
                allocated = g_strdup (name);
-               e_filename_make_safe (allocated);
+               e_util_make_safe_filename (allocated);
 
                gtk_file_chooser_set_current_name (file_chooser, allocated);
 
diff --git a/src/e-util/e-attachment.c b/src/e-util/e-attachment.c
index 00e08a9f0e..20723936ba 100644
--- a/src/e-util/e-attachment.c
+++ b/src/e-util/e-attachment.c
@@ -2974,7 +2974,7 @@ attachment_save_new_candidate (SaveContext *save_context)
                display_name = _("attachment.dat");
 
        allocated = g_strdup (display_name);
-       e_filename_make_safe (allocated);
+       e_util_make_safe_filename (allocated);
 
        basename = get_new_name_with_count (allocated, save_context->count);
 
diff --git a/src/e-util/e-misc-utils.c b/src/e-util/e-misc-utils.c
index cb62f32ae6..4f62b39065 100644
--- a/src/e-util/e-misc-utils.c
+++ b/src/e-util/e-misc-utils.c
@@ -4655,3 +4655,35 @@ e_util_ensure_scrolled_window_height (GtkScrolledWindow *scrolled_window)
 
        gtk_scrolled_window_set_min_content_height (scrolled_window, require_scw_height);
 }
+
+void
+e_util_make_safe_filename (gchar *filename)
+{
+       const gchar *unsafe_chars = "/\\";
+       GSettings *settings;
+       gchar *pp, *ts, *illegal_chars;
+       gunichar cc;
+
+       g_return_if_fail (filename != NULL);
+
+       settings = e_util_ref_settings ("org.gnome.evolution.shell");
+       illegal_chars = g_settings_get_string (settings, "filename-illegal-chars");
+       g_clear_object (&settings);
+
+       pp = filename;
+
+       while (pp && *pp) {
+               cc = g_utf8_get_char (pp);
+               ts = pp;
+               pp = g_utf8_next_char (pp);
+
+               if (!g_unichar_isprint (cc) ||
+                   (cc < 0xff && (strchr (unsafe_chars, cc & 0xff) ||
+                    (illegal_chars && *illegal_chars && strchr (illegal_chars, cc & 0xff))))) {
+                       while (ts < pp)
+                               *ts++ = '_';
+               }
+       }
+
+       g_free (illegal_chars);
+}
diff --git a/src/e-util/e-misc-utils.h b/src/e-util/e-misc-utils.h
index 3a98e87051..41683262e6 100644
--- a/src/e-util/e-misc-utils.h
+++ b/src/e-util/e-misc-utils.h
@@ -341,6 +341,7 @@ const ESupportedLocales *
 
 void           e_util_ensure_scrolled_window_height
                                                (GtkScrolledWindow *scrolled_window);
+void           e_util_make_safe_filename       (gchar *filename);
 
 G_END_DECLS
 
diff --git a/src/e-util/e-web-view.c b/src/e-util/e-web-view.c
index 6911b1fb0d..eebe00018a 100644
--- a/src/e-util/e-web-view.c
+++ b/src/e-util/e-web-view.c
@@ -2637,7 +2637,7 @@ e_web_view_suggest_filename (EWebView *web_view,
        filename = class->suggest_filename (web_view, uri);
 
        if (filename != NULL)
-               e_filename_make_safe (filename);
+               e_util_make_safe_filename (filename);
 
        return filename;
 }
diff --git a/src/e-util/gal-view-instance.c b/src/e-util/gal-view-instance.c
index 03b957b8c9..bf0469a95d 100644
--- a/src/e-util/gal-view-instance.c
+++ b/src/e-util/gal-view-instance.c
@@ -38,6 +38,7 @@
 #include <libedataserver/libedataserver.h>
 
 #include "e-unicode.h"
+#include "e-misc-utils.h"
 #include "e-xml-utils.h"
 #include "gal-view-instance-save-as-dialog.h"
 
@@ -363,7 +364,7 @@ gal_view_instance_construct (GalViewInstance *instance,
                instance->instance_id = g_strdup ("");
 
        safe_id = g_strdup (instance->instance_id);
-       e_filename_make_safe (safe_id);
+       e_util_make_safe_filename (safe_id);
 
        user_directory =
                gal_view_collection_get_user_directory (instance->collection);
diff --git a/src/libemail-engine/mail-config.c b/src/libemail-engine/mail-config.c
index 9b9c3bc147..32913af642 100644
--- a/src/libemail-engine/mail-config.c
+++ b/src/libemail-engine/mail-config.c
@@ -207,7 +207,7 @@ mail_config_folder_to_cachename (CamelFolder *folder,
        g_free (basename);
 
        folder_uri = e_mail_folder_uri_from_folder (folder);
-       e_filename_make_safe (folder_uri);
+       e_util_make_safe_filename (folder_uri);
        basename = g_strdup_printf ("%s%s", prefix, folder_uri);
        filename = g_build_filename (config_dir, "folders", basename, NULL);
        g_free (basename);
diff --git a/src/libemail-engine/mail-folder-cache.c b/src/libemail-engine/mail-folder-cache.c
index 653164537c..4e7b7dda4d 100644
--- a/src/libemail-engine/mail-folder-cache.c
+++ b/src/libemail-engine/mail-folder-cache.c
@@ -1392,9 +1392,9 @@ rename_folders (MailFolderCache *cache,
        /* rename the meta-data we maintain ourselves */
        config_dir = mail_session_get_config_dir ();
        olduri = e_mail_folder_uri_build (store_info->store, old);
-       e_filename_make_safe (olduri);
+       e_util_make_safe_filename (olduri);
        newuri = e_mail_folder_uri_build (store_info->store, fi->full_name);
-       e_filename_make_safe (newuri);
+       e_util_make_safe_filename (newuri);
        oldfile = g_strdup_printf ("%s/custom_view-%s.xml", config_dir, olduri);
        newfile = g_strdup_printf ("%s/custom_view-%s.xml", config_dir, newuri);
        if (g_rename (oldfile, newfile) == -1 && errno != ENOENT) {
diff --git a/src/mail/e-mail-backend.c b/src/mail/e-mail-backend.c
index 6e70bf94c4..a70ba6189f 100644
--- a/src/mail/e-mail-backend.c
+++ b/src/mail/e-mail-backend.c
@@ -98,7 +98,7 @@ mail_backend_uri_to_evname (const gchar *uri,
        data_dir = mail_session_get_data_dir ();
 
        safe = g_strdup (uri);
-       e_filename_make_safe (safe);
+       e_util_make_safe_filename (safe);
        basename = g_strdup_printf ("%s%s.xml", prefix, safe);
        filename = g_build_filename (data_dir, basename, NULL);
        g_free (basename);
diff --git a/src/mail/e-mail-display.c b/src/mail/e-mail-display.c
index 6d5ebfd36b..57821f9cfa 100644
--- a/src/mail/e-mail-display.c
+++ b/src/mail/e-mail-display.c
@@ -1965,7 +1965,7 @@ mail_display_save_part_for_drop (CamelMimePart *mime_part,
                part_filename = "mail-part";
 
        tmp = g_strdup (part_filename);
-       e_filename_make_safe (tmp);
+       e_util_make_safe_filename (tmp);
 
        filename = g_build_filename (path, tmp, NULL);
        g_free (tmp);
diff --git a/src/mail/e-mail-paned-view.c b/src/mail/e-mail-paned-view.c
index afdc780e3f..f3a1b9cdc4 100644
--- a/src/mail/e-mail-paned-view.c
+++ b/src/mail/e-mail-paned-view.c
@@ -979,7 +979,7 @@ empv_create_view_id (CamelFolder *folder)
        g_return_val_if_fail (folder_uri != NULL, NULL);
 
        /* to be able to migrate previously saved views */
-       e_filename_make_safe (folder_uri);
+       e_util_make_safe_filename (folder_uri);
 
        /* use MD5 checksum of the folder URI, to not depend on its length */
        checksum = g_checksum_new (G_CHECKSUM_MD5);
@@ -1083,7 +1083,7 @@ mail_paned_view_update_view_instance (EMailView *view)
        g_clear_object (&priv->view_instance);
 
        view_id = empv_create_view_id (folder);
-       e_filename_make_safe (view_id);
+       e_util_make_safe_filename (view_id);
 
        folder_cache = e_mail_session_get_folder_cache (e_mail_backend_get_session (e_mail_reader_get_backend 
(reader)));
 
diff --git a/src/mail/e-mail-reader-utils.c b/src/mail/e-mail-reader-utils.c
index 37cc415b2e..90ac4d9d0d 100644
--- a/src/mail/e-mail-reader-utils.c
+++ b/src/mail/e-mail-reader-utils.c
@@ -1589,7 +1589,7 @@ mail_reader_print_parse_message_cb (GObject *source_object,
                CAMEL_FOLDER (async_context->folder),
                e_mail_part_list_get_message_uid (part_list),
                NULL);
-       e_filename_make_safe (export_basename);
+       e_util_make_safe_filename (export_basename);
        e_mail_printer_set_export_filename (printer, export_basename);
        g_free (export_basename);
 
diff --git a/src/mail/em-utils.c b/src/mail/em-utils.c
index 2ee4f8c6fd..71d8526e34 100644
--- a/src/mail/em-utils.c
+++ b/src/mail/em-utils.c
@@ -1017,7 +1017,7 @@ em_utils_selection_set_urilist (GtkSelectionData *data,
                        basename = em_utils_build_export_basename (
                                folder, uids->pdata[0], NULL);
                }
-               e_filename_make_safe (basename);
+               e_util_make_safe_filename (basename);
                filename = g_build_filename (tmpdir, basename, NULL);
                g_free (basename);
 
@@ -1066,7 +1066,7 @@ em_utils_selection_set_urilist (GtkSelectionData *data,
 
                        basename = em_utils_build_export_basename (
                                folder, uids->pdata[ii], ".pdf");
-                       e_filename_make_safe (basename);
+                       e_util_make_safe_filename (basename);
                        filename = g_build_filename (tmpdir, basename, NULL);
                        g_free (basename);
 
diff --git a/src/plugins/mail-to-task/mail-to-task.c b/src/plugins/mail-to-task/mail-to-task.c
index 9685aade1d..ea223738f6 100644
--- a/src/plugins/mail-to-task/mail-to-task.c
+++ b/src/plugins/mail-to-task/mail-to-task.c
@@ -433,7 +433,7 @@ set_attachments (ECalClient *client,
        g_return_if_fail (comp_uid != NULL);
 
        tmp = g_strdup (comp_uid);
-       e_filename_make_safe (tmp);
+       e_util_make_safe_filename (tmp);
        filename_prefix = g_strconcat (tmp, "-", NULL);
        g_free (tmp);
 
diff --git a/src/shell/e-migrate-base-dirs.c b/src/shell/e-migrate-base-dirs.c
index 6a9913dd56..37560820f6 100644
--- a/src/shell/e-migrate-base-dirs.c
+++ b/src/shell/e-migrate-base-dirs.c
@@ -147,9 +147,9 @@ shell_xdg_migrate_rename_files (const gchar *src_directory,
 
        home_dir = g_get_home_dir ();
        old_base_dir = g_build_filename (home_dir, ".evolution", NULL);
-       e_filename_make_safe (old_base_dir);
+       e_util_make_safe_filename (old_base_dir);
        new_base_dir = g_strdup (e_get_user_data_dir ());
-       e_filename_make_safe (new_base_dir);
+       e_util_make_safe_filename (new_base_dir);
 
        while ((basename = g_dir_read_name (dir)) != NULL) {
                GString *buffer;
diff --git a/src/shell/e-shell-utils.c b/src/shell/e-shell-utils.c
index 34f18ef76c..6fef91b405 100644
--- a/src/shell/e-shell-utils.c
+++ b/src/shell/e-shell-utils.c
@@ -141,7 +141,7 @@ e_shell_run_save_dialog (EShell *shell,
                gchar *current_name;
 
                current_name = g_strdup (suggestion);
-               e_filename_make_safe (current_name);
+               e_util_make_safe_filename (current_name);
                gtk_file_chooser_set_current_name (file_chooser, current_name);
                g_free (current_name);
        }


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