[Tracker] Converting to utf8 while parsing Thunderbird TMS files



Hello,
This patch adds converting to utf8, while parsing TMS files if needed.
Michael Biebl had problem with u "umlaut" ü.
This patch tries to convert to utf8 if it fails, than the TMS is not indexed.

--
best
Michal Pryc
Index: tracker-email-thunderbird.c
===================================================================
--- tracker-email-thunderbird.c (revision 850)
+++ tracker-email-thunderbird.c (working copy)
@@ -203,6 +203,7 @@
        MailMessage             *mail_msg;
        gsize                   length;
        gchar                   *contents = NULL;
+       gchar                   *parse;
        GMarkupParseContext     *context;
        GError                  *error = NULL;
        TmsParserData           *parser_data;
@@ -222,25 +223,39 @@
                return mail_msg;
        }
 
+        if(g_utf8_validate(contents, -1, NULL) == FALSE) {
+                parse = g_filename_to_utf8(contents, strlen(contents), NULL, NULL, &error);
+                if(!parse) {
+                        tracker_log ("Error converting to utf8: %s\nIn file: %s\n", error->message, path);
+                        g_error_free(error);
+                        g_free(contents);
+                        return mail_msg;
+                }
+                g_free(contents);
+        } else {
+                parse = g_strdup(contents);
+                g_free(contents);
+        } 
+
        context = g_markup_parse_context_new(&tms_file_parser, G_MARKUP_TREAT_CDATA_AS_TEXT,
                                        parser_data, free_parser_data );
-
-        if (!g_markup_parse_context_parse(context, contents, length, NULL)) {
+               
+        if (!g_markup_parse_context_parse(context, parse, length, NULL)) {
                tracker_log ("Error parsing context with length \n");
                g_markup_parse_context_free(context);
-               g_free(contents);
+               g_free(parse);
                return mail_msg;
        }
 
        if (!g_markup_parse_context_end_parse(context, NULL)) {
                 tracker_log ("Error parsing context \n");;
                g_markup_parse_context_free(context);
-               g_free(contents);
+               g_free(parse);
                return mail_msg;
        }
 
        g_markup_parse_context_free(context);
-       g_free(contents);
+       g_free(parse);
        return mail_msg;
 }
 


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