aboutsummaryrefslogtreecommitdiffstats
path: root/camel/camel-vee-store.c
diff options
context:
space:
mode:
author7 <NotZed@Ximian.com>2001-10-27 14:00:34 +0800
committerMichael Zucci <zucchi@src.gnome.org>2001-10-27 14:00:34 +0800
commitc4d87ba45ad016d5a6607df96ed27ba02910e2e6 (patch)
tree5a48e3bbf61529642f7d0159642a69d8e8c57146 /camel/camel-vee-store.c
parentf4bb7b53dd93f67afb214a465828fe0cc3295f79 (diff)
downloadgsoc2013-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.c34
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);
+}