[evolution-data-server] Bug 533478 - [IMAPx] Support umlauts in user tags



commit 1bdd10707540d8f7fda4765a8c80375af0cd1e0e
Author: Milan Crha <mcrha redhat com>
Date:   Mon Aug 10 16:02:49 2015 +0200

    Bug 533478 - [IMAPx] Support umlauts in user tags

 camel/providers/imapx/camel-imapx-server.c |    8 +++++++-
 camel/providers/imapx/camel-imapx-utils.c  |   19 +++++++++++++++++--
 2 files changed, 24 insertions(+), 3 deletions(-)
---
diff --git a/camel/providers/imapx/camel-imapx-server.c b/camel/providers/imapx/camel-imapx-server.c
index 7e46f7c..77e8aae 100644
--- a/camel/providers/imapx/camel-imapx-server.c
+++ b/camel/providers/imapx/camel-imapx-server.c
@@ -5262,7 +5262,13 @@ imapx_server_sync_changes_sync (CamelIMAPXServer *is,
 
                                        if (imapx_uidset_add (&uidset, ic, camel_message_info_uid (info)) == 1
                                            || (i == c->infos->len - 1 && imapx_uidset_done (&uidset, ic))) {
-                                               camel_imapx_command_add (ic, " %tFLAGS.SILENT (%t)", on ? "+" 
: "-", c->name);
+                                               gchar *utf7;
+
+                                               utf7 = camel_utf8_utf7 (c->name);
+
+                                               camel_imapx_command_add (ic, " %tFLAGS.SILENT (%t)", on ? "+" 
: "-", utf7 ? utf7 : c->name);
+
+                                               g_free (utf7);
 
                                                success = camel_imapx_server_process_command_sync (is, ic, 
_("Error syncing changes"), cancellable, error);
 
diff --git a/camel/providers/imapx/camel-imapx-utils.c b/camel/providers/imapx/camel-imapx-utils.c
index c63de65..a9db565 100644
--- a/camel/providers/imapx/camel-imapx-utils.c
+++ b/camel/providers/imapx/camel-imapx-utils.c
@@ -153,12 +153,21 @@ imapx_parse_flags (CamelIMAPXInputStream *stream,
 
                        if (!match_found && user_flagsp != NULL) {
                                const gchar *flag_name;
+                               gchar *utf8;
 
                                flag_name = rename_label_flag (
                                        (gchar *) token,
                                        strlen ((gchar *) token), TRUE);
 
-                               camel_flag_set (user_flagsp, flag_name, TRUE);
+                               utf8 = camel_utf7_utf8 (flag_name);
+                               if (utf8 && !g_utf8_validate (utf8, -1, NULL)) {
+                                       g_free (utf8);
+                                       utf8 = NULL;
+                               }
+
+                               camel_flag_set (user_flagsp, utf8 ? utf8 : flag_name, TRUE);
+
+                               g_free (utf8);
                        }
 
                        g_free (upper);
@@ -240,6 +249,7 @@ imapx_write_flags (GString *string,
 
        while (user_flags) {
                const gchar *flag_name;
+               gchar *utf7;
 
                flag_name = rename_label_flag (
                        user_flags->name, strlen (user_flags->name), FALSE);
@@ -247,7 +257,12 @@ imapx_write_flags (GString *string,
                if (!first)
                        g_string_append_c (string, ' ');
                first = FALSE;
-               g_string_append (string, flag_name);
+
+               utf7 = camel_utf8_utf7 (flag_name);
+
+               g_string_append (string, utf7 ? utf7 : flag_name);
+
+               g_free (utf7);
 
                user_flags = user_flags->next;
        }


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