aboutsummaryrefslogtreecommitdiffstats
path: root/mail/mail-folder-cache.c
diff options
context:
space:
mode:
Diffstat (limited to 'mail/mail-folder-cache.c')
-rw-r--r--mail/mail-folder-cache.c18
1 files changed, 15 insertions, 3 deletions
diff --git a/mail/mail-folder-cache.c b/mail/mail-folder-cache.c
index 750f9ab30d..285f1d1230 100644
--- a/mail/mail-folder-cache.c
+++ b/mail/mail-folder-cache.c
@@ -932,24 +932,34 @@ mail_note_store(CamelStore *store, CamelOperation *op,
struct _find_info {
const char *uri;
struct _folder_info *fi;
+ CamelURL *url;
};
/* look up on each storeinfo using proper hash function for that stores uri's */
static void storeinfo_find_folder_info(CamelStore *store, struct _store_info *si, struct _find_info *fi)
{
- if (fi->fi == NULL)
- fi->fi = g_hash_table_lookup(si->folders_uri, fi->uri);
+ if (fi->fi == NULL) {
+ if (((CamelService *)store)->provider->url_equal(fi->url, ((CamelService *)store)->url)) {
+ char *path = fi->url->fragment?fi->url->fragment:fi->url->path;
+
+ if (path[0] == '/')
+ path++;
+ fi->fi = g_hash_table_lookup(si->folders, path);
+ }
+ }
}
/* returns TRUE if the uri is available, folderp is set to a
reffed folder if the folder has also already been opened */
int mail_note_get_folder_from_uri(const char *uri, CamelFolder **folderp)
{
- struct _find_info fi = { uri, NULL };
+ struct _find_info fi = { uri, NULL, NULL };
if (stores == NULL)
return FALSE;
+ fi.url = camel_url_new(uri, NULL);
+
LOCK(info_lock);
g_hash_table_foreach(stores, (GHFunc)storeinfo_find_folder_info, &fi);
if (folderp) {
@@ -962,5 +972,7 @@ int mail_note_get_folder_from_uri(const char *uri, CamelFolder **folderp)
}
UNLOCK(info_lock);
+ camel_url_free(fi.url);
+
return fi.fi != NULL;
}