summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMilan Crha <mcrha@redhat.com>2013-02-21 12:55:09 +0100
committerMilan Crha <mcrha@redhat.com>2013-02-21 12:55:09 +0100
commitd64269932c0824164f8b52d5bee325e412962a4a (patch)
treea4b7a41c6433119cdf9070b97c61fdd96c37fdfe
parentb3cfe67e57ff259cc410210eacbe7a99a87a9413 (diff)
downloadevolution-data-server-d64269932c0824164f8b52d5bee325e412962a4a.tar.gz
Bug #694223 - The "message-location" search never matches on IMAP+
-rw-r--r--camel/camel-folder-search.c37
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);
}
}