diff options
-rw-r--r-- | camel/ChangeLog | 7 | ||||
-rw-r--r-- | camel/providers/imap/camel-imap-store.c | 35 |
2 files changed, 30 insertions, 12 deletions
diff --git a/camel/ChangeLog b/camel/ChangeLog index 0f7299b4a2..79ee0a6c6b 100644 --- a/camel/ChangeLog +++ b/camel/ChangeLog @@ -4,6 +4,13 @@ Duplicated the very much hack in imap_store_refresh_folders() to avoid a deadlock in #27959. A decent fix has to wait for a rewrite. + (get_folder_online): Move folders to a subdirectory of + storage_path, rather than in it. Bye bye everyones settings. See + 24947. + (get_folder_offline): And here too. + (delete_folder): And here too. + (rename_folder): and here too. + (get_folder_info_offline): And here too. I love code reuse. 2002-07-23 Jeffrey Stedfast <fejj@ximian.com> diff --git a/camel/providers/imap/camel-imap-store.c b/camel/providers/imap/camel-imap-store.c index 2065b53007..a8455b4619 100644 --- a/camel/providers/imap/camel-imap-store.c +++ b/camel/providers/imap/camel-imap-store.c @@ -1310,7 +1310,7 @@ get_folder_online (CamelStore *store, const char *folder_name, CamelImapStore *imap_store = CAMEL_IMAP_STORE (store); CamelImapResponse *response; CamelFolder *new_folder; - char *folder_dir; + char *folder_dir, *storage_path; if (!camel_imap_store_connected (imap_store, ex)) return NULL; @@ -1345,8 +1345,10 @@ get_folder_online (CamelStore *store, const char *folder_name, return NULL; } } - - folder_dir = e_path_to_physical (imap_store->storage_path, folder_name); + + storage_path = g_strdup_printf("%s/folders", imap_store->storage_path); + folder_dir = e_path_to_physical (storage_path, folder_name); + g_free(storage_path); new_folder = camel_imap_folder_new (store, folder_name, folder_dir, ex); g_free (folder_dir); if (new_folder) { @@ -1378,7 +1380,7 @@ get_folder_offline (CamelStore *store, const char *folder_name, { CamelImapStore *imap_store = CAMEL_IMAP_STORE (store); CamelFolder *new_folder; - char *folder_dir; + char *folder_dir, *storage_path; if (!imap_store->connected && !camel_service_connect (CAMEL_SERVICE (store), ex)) @@ -1387,7 +1389,9 @@ get_folder_offline (CamelStore *store, const char *folder_name, if (!g_strcasecmp (folder_name, "INBOX")) folder_name = "INBOX"; - folder_dir = e_path_to_physical (imap_store->storage_path, folder_name); + storage_path = g_strdup_printf("%s/folders", imap_store->storage_path); + folder_dir = e_path_to_physical (storage_path, folder_name); + g_free(storage_path); if (!folder_dir || access (folder_dir, F_OK) != 0) { g_free (folder_dir); camel_exception_setv (ex, CAMEL_EXCEPTION_STORE_NO_FOLDER, @@ -1434,13 +1438,15 @@ delete_folder (CamelStore *store, const char *folder_name, CamelException *ex) CamelImapMessageCache *cache; char *summary_file; char *journal_file; - char *folder_dir; + char *folder_dir, *storage_path; CamelFolderInfo *fi; const char *name; camel_imap_response_free (imap_store, response); - folder_dir = e_path_to_physical (imap_store->storage_path, folder_name); + storage_path = g_strdup_printf("%s/folders", imap_store->storage_path); + folder_dir = e_path_to_physical (storage_path, folder_name); + g_free(storage_path); if (access (folder_dir, F_OK) != 0) { g_free (folder_dir); return; @@ -1540,7 +1546,7 @@ rename_folder (CamelStore *store, const char *old_name, const char *new_name, Ca { CamelImapStore *imap_store = CAMEL_IMAP_STORE (store); CamelImapResponse *response; - char *oldpath, *newpath; + char *oldpath, *newpath, *storage_path; CamelFolderInfo *fi; guint32 flags; @@ -1593,9 +1599,11 @@ rename_folder (CamelStore *store, const char *old_name, const char *new_name, Ca camel_store_free_folder_info (store, fi); - oldpath = e_path_to_physical (imap_store->storage_path, old_name); - newpath = e_path_to_physical (imap_store->storage_path, new_name); - + storage_path = g_strdup_printf("%s/folders", imap_store->storage_path); + oldpath = e_path_to_physical (storage_path, old_name); + newpath = e_path_to_physical (storage_path, new_name); + g_free(storage_path); + /* So do we care if this didn't work? Its just a cache? */ if (rename (oldpath, newpath) == -1) { g_warning ("Could not rename message cache '%s' to '%s': %s: cache reset", @@ -2067,6 +2075,7 @@ get_folder_info_offline (CamelStore *store, const char *top, CamelImapStore *imap_store = CAMEL_IMAP_STORE (store); CamelFolderInfo *fi; GPtrArray *folders; + char *storage_path; if (!imap_store->connected && !camel_service_connect (CAMEL_SERVICE (store), ex)) @@ -2084,7 +2093,8 @@ get_folder_info_offline (CamelStore *store, const char *top, /* A kludge to avoid having to pass a struct to the callback */ g_ptr_array_add (folders, imap_store); - if (!e_path_find_folders (imap_store->storage_path, get_one_folder_offline, folders)) { + storage_path = g_strdup_printf("%s/folders", imap_store->storage_path); + if (!e_path_find_folders (storage_path, get_one_folder_offline, folders)) { camel_disco_store_check_online (CAMEL_DISCO_STORE (imap_store), ex); fi = NULL; } else { @@ -2092,6 +2102,7 @@ get_folder_info_offline (CamelStore *store, const char *top, fi = camel_folder_info_build (folders, "", imap_store->dir_sep, TRUE); } + g_free(storage_path); g_ptr_array_free (folders, TRUE); return fi; |