diff options
author | 7 <NotZed@Ximian.com> | 2001-10-27 14:00:34 +0800 |
---|---|---|
committer | Michael Zucci <zucchi@src.gnome.org> | 2001-10-27 14:00:34 +0800 |
commit | c4d87ba45ad016d5a6607df96ed27ba02910e2e6 (patch) | |
tree | 5a48e3bbf61529642f7d0159642a69d8e8c57146 /camel/camel-vee-store.c | |
parent | f4bb7b53dd93f67afb214a465828fe0cc3295f79 (diff) | |
download | gsoc2013-evolution-c4d87ba45ad016d5a6607df96ed27ba02910e2e6.tar.gz gsoc2013-evolution-c4d87ba45ad016d5a6607df96ed27ba02910e2e6.tar.zst gsoc2013-evolution-c4d87ba45ad016d5a6607df96ed27ba02910e2e6.zip |
Finished implementation.
2001-10-27 <NotZed@Ximian.com>
* providers/imap/camel-imap-store.c (rename_folder): Finished
implementation.
* providers/local/camel-local-folder.c (local_rename): Implement
local rename of folder objects.
2001-10-26 <NotZed@Ximian.com>
* camel-vee-folder.c (camel_vee_folder_class_init): Hook into
rename function.
(vee_rename): Implement the veefolder rename function.
(camel_vee_folder_class_init):
(folder_changed_change): Kill a warning with a cast.
* camel-vee-store.c (vee_rename_folder): Emit a folder_renamed
event properly, also call parent to do some rename stuff.
* camel-store.h: Added a CamelRenameInfo for the rename event.
* camel-folder.c (camel_folder_rename): New function to rename a
folder object.
(camel_folder_class_init): Added a renamed event.
(folder_rename): Default impl, set full_name, and set name
assuming the dir separator is '/'.
* camel-store.c (camel_store_class_init): Added folder_renamed
event.
(camel_store_rename_folder): Rename an active folder object if we
have one, and update the folder table.
(rename_folder): Make a default implementation that handles
updating the folder tree.
svn path=/trunk/; revision=14204
Diffstat (limited to 'camel/camel-vee-store.c')
-rw-r--r-- | camel/camel-vee-store.c | 34 |
1 files changed, 9 insertions, 25 deletions
diff --git a/camel/camel-vee-store.c b/camel/camel-vee-store.c index 4530c34ee2..1d9a5c61d4 100644 --- a/camel/camel-vee-store.c +++ b/camel/camel-vee-store.c @@ -27,6 +27,8 @@ #include <string.h> +#define d(x) + static CamelFolder *vee_get_folder (CamelStore *store, const char *folder_name, guint32 flags, CamelException *ex); static void vee_delete_folder(CamelStore *store, const char *folder_name, CamelException *ex); static void vee_rename_folder(CamelStore *store, const char *old, const char *new, CamelException *ex); @@ -290,7 +292,8 @@ static void vee_rename_folder(CamelStore *store, const char *old, const char *new, CamelException *ex) { CamelFolder *folder; - char *key, *oldname, *full_oldname; + + d(printf("vee rename folder '%s' '%s'\n", old, new)); if (strcmp(old, CAMEL_UNMATCHED_NAME) == 0) { camel_exception_setv(ex, CAMEL_EXCEPTION_STORE_NO_FOLDER, @@ -298,31 +301,12 @@ vee_rename_folder(CamelStore *store, const char *old, const char *new, CamelExce return; } + /* See if it exists, for vfolders, all folders are in the folders hash */ CAMEL_STORE_LOCK(store, cache_lock); - if (g_hash_table_lookup_extended(store->folders, old, (void **)&key, (void **)&folder)) { - g_hash_table_remove(store->folders, key); - g_free(key); - - /* this should really be atomic */ - oldname = folder->name; - full_oldname = folder->full_name; - key = folder->name; - folder->full_name = g_strdup(new); - key = strrchr(new, '/'); - key = key?key+1:(char *)new; - folder->name = g_strdup(key); - g_hash_table_insert(store->folders, g_strdup(new), folder); - - g_free(oldname); - g_free(full_oldname); - CAMEL_STORE_UNLOCK(store, cache_lock); - - - } else { - CAMEL_STORE_UNLOCK(store, cache_lock); - + if ((folder = g_hash_table_lookup(store->folders, old)) == NULL) { camel_exception_setv(ex, CAMEL_EXCEPTION_STORE_NO_FOLDER, - _("Cannot rename folder: %s: No such folder"), new); + _("Cannot rename folder: %s: No such folder"), old); } -} + CAMEL_STORE_UNLOCK(store, cache_lock); +} |