diff options
author | Milan Crha <mcrha@redhat.com> | 2013-02-21 12:55:09 +0100 |
---|---|---|
committer | Milan Crha <mcrha@redhat.com> | 2013-02-21 12:55:09 +0100 |
commit | d64269932c0824164f8b52d5bee325e412962a4a (patch) | |
tree | a4b7a41c6433119cdf9070b97c61fdd96c37fdfe | |
parent | b3cfe67e57ff259cc410210eacbe7a99a87a9413 (diff) | |
download | evolution-data-server-d64269932c0824164f8b52d5bee325e412962a4a.tar.gz |
Bug #694223 - The "message-location" search never matches on IMAP+
-rw-r--r-- | 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 0c78be1dc..4c63bd2ae 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); } } |