[evolution-data-server/gnome-3-6] Bug #694223 - The "message-location" search never matches on IMAP+



commit d64269932c0824164f8b52d5bee325e412962a4a
Author: Milan Crha <mcrha redhat com>
Date:   Thu Feb 21 12:55:09 2013 +0100

    Bug #694223 - The "message-location" search never matches on IMAP+

 camel/camel-folder-search.c |   37 ++++++++++++++++++++++++++++++++-----
 1 files changed, 32 insertions(+), 5 deletions(-)
---
diff --git a/camel/camel-folder-search.c b/camel/camel-folder-search.c
index 0c78be1..4c63bd2 100644
--- a/camel/camel-folder-search.c
+++ b/camel/camel-folder-search.c
@@ -1929,6 +1929,36 @@ read_uid_callback (gpointer ref,
        return 0;
 }
 
+/* this is copied from Evolution's libemail-engine/e-mail-folder-utils.c */
+static gchar *
+mail_folder_uri_build (CamelStore *store,
+                      const gchar *folder_name)
+{
+       const gchar *uid;
+       gchar *encoded_name;
+       gchar *encoded_uid;
+       gchar *uri;
+
+       g_return_val_if_fail (CAMEL_IS_STORE (store), NULL);
+       g_return_val_if_fail (folder_name != NULL, NULL);
+
+       /* Skip the leading slash, if present. */
+       if (*folder_name == '/')
+               folder_name++;
+
+       uid = camel_service_get_uid (CAMEL_SERVICE (store));
+
+       encoded_uid = camel_url_encode (uid, ":;@/");
+       encoded_name = camel_url_encode (folder_name, "#");
+
+       uri = g_strdup_printf ("folder://%s/%s", encoded_uid, encoded_name);
+
+       g_free (encoded_uid);
+       g_free (encoded_name);
+
+       return uri;
+}
+
 static CamelSExpResult *
 search_message_location (struct _CamelSExp *f,
                          gint argc,
@@ -1942,17 +1972,14 @@ search_message_location (struct _CamelSExp *f,
                if (argv[0]->value.string && search->folder) {
                        CamelStore *store;
                        const gchar *name;
-                       const gchar *uid;
                        gchar *uri;
 
-                       /* FIXME Folder URI formats are Evolution-specific
-                        *       knowledge and doesn't belong here! */
                        store = camel_folder_get_parent_store (search->folder);
                        name = camel_folder_get_full_name (search->folder);
-                       uid = camel_service_get_uid (CAMEL_SERVICE (store));
+                       uri = mail_folder_uri_build (store, name);
 
-                       uri = g_strdup_printf ("folder://%s/%s", uid, name);
                        same = g_str_equal (uri, argv[0]->value.string);
+
                        g_free (uri);
                }
        }


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