From 7e8b970c2982e318cd06b9e19eb2062b3d103862 Mon Sep 17 00:00:00 2001 From: Srinivasa Ragavan Date: Thu, 31 Jul 2008 10:33:06 +0000 Subject: [PATCH] ** Fix for bug #545082 2008-07-31 Srinivasa Ragavan ** Fix for bug #545082 * camel/camel-db.c: Added support apis. * camel/camel-db.h: * camel/camel-folder.c: Added support to rename folder. * camel/camel-store.c: Added code to delete folder cleanly 2008-07-31 Srinivasa Ragavan * camel/providers/local/camel-local-store.c: Support delete folder wrt disk summary. svn path=/trunk/; revision=9239 --- camel/ChangeLog | 9 +++++++++ camel/camel-db.c | 18 ++++++++++++++++++ camel/camel-db.h | 1 + camel/camel-folder.c | 7 +++++-- camel/camel-store.c | 4 +++- camel/providers/local/ChangeLog | 5 +++++ camel/providers/local/camel-local-store.c | 20 -------------------- 7 files changed, 41 insertions(+), 23 deletions(-) diff --git a/camel/ChangeLog b/camel/ChangeLog index 35c4647..1900a35 100644 --- a/camel/ChangeLog +++ b/camel/ChangeLog @@ -19,6 +19,15 @@ 2008-07-31 Srinivasa Ragavan + ** Fix for bug #545082 + + * camel/camel-db.c: Added support apis. + * camel/camel-db.h: + * camel/camel-folder.c: Added support to rename folder. + * camel/camel-store.c: Added code to delete folder cleanly + +2008-07-31 Srinivasa Ragavan + * camel/camel-db.c: Add delete folder functionality. * camel/camel-folder-summary.c: Added code to check if the uid exists in summary. diff --git a/camel/camel-db.c b/camel/camel-db.c index fb0c81e..2006a87 100644 --- a/camel/camel-db.c +++ b/camel/camel-db.c @@ -930,6 +930,24 @@ camel_db_delete_folder (CamelDB *cdb, const char *folder, CamelException *ex) return ret; } +int +camel_db_rename_folder (CamelDB *cdb, const char *old_folder, const char *new_folder, CamelException *ex) +{ + int ret; + char *cmd; + + cmd = sqlite3_mprintf ("ALTER TABLE %Q RENAME TO %Q", old_folder, new_folder); + ret = camel_db_command (cdb, cmd, ex); + sqlite3_free (cmd); + + cmd = sqlite3_mprintf ("UPDATE folders SET folder_name = %Q WHERE folder_name = %Q", new_folder, old_folder); + ret = camel_db_command (cdb, cmd, ex); + sqlite3_free (cmd); + + CAMEL_DB_RELEASE_SQLITE_MEMORY; + return ret; +} + void camel_db_camel_mir_free (CamelMIRecord *record) { diff --git a/camel/camel-db.h b/camel/camel-db.h index 0a8542e..2f7ecac 100644 --- a/camel/camel-db.h +++ b/camel/camel-db.h @@ -109,6 +109,7 @@ int camel_db_add_to_transaction (CamelDB *cdb, const char *query, CamelException int camel_db_end_transaction (CamelDB *cdb, CamelException *ex); int camel_db_abort_transaction (CamelDB *cdb, CamelException *ex); int camel_db_clear_folder_summary (CamelDB *cdb, char *folder, CamelException *ex); +int camel_db_rename_folder (CamelDB *cdb, const char *old_folder, const char *new_folder, CamelException *ex); int camel_db_delete_folder (CamelDB *cdb, const char *folder, CamelException *ex); int camel_db_delete_uid (CamelDB *cdb, const char *folder, const char *uid, CamelException *ex); diff --git a/camel/camel-folder.c b/camel/camel-folder.c index 13740ba..d50271a 100644 --- a/camel/camel-folder.c +++ b/camel/camel-folder.c @@ -1590,9 +1590,12 @@ camel_folder_delete (CamelFolder *folder) folder->folder_flags |= CAMEL_FOLDER_HAS_BEEN_DELETED; CF_CLASS (folder)->delete (folder); - + CAMEL_FOLDER_REC_UNLOCK (folder, lock); + /* Delete the references of the folder from the DB.*/ + camel_db_delete_folder (folder->cdb, folder->full_name, NULL); + camel_object_trigger_event (folder, "deleted", NULL); } @@ -1629,7 +1632,7 @@ camel_folder_rename(CamelFolder *folder, const char *new) old = g_strdup(folder->full_name); CF_CLASS (folder)->rename(folder, new); - + camel_db_rename_folder (folder->cdb, old, new, NULL); camel_object_trigger_event (folder, "renamed", old); g_free(old); } diff --git a/camel/camel-store.c b/camel/camel-store.c index e550015..50e0773 100644 --- a/camel/camel-store.c +++ b/camel/camel-store.c @@ -456,8 +456,10 @@ camel_store_delete_folder (CamelStore *store, const char *folder_name, CamelExce if (!camel_exception_is_set(&local)) cs_delete_cached_folder(store, folder_name); - else + else { camel_exception_xfer(ex, &local); + printf("excep: %s\n", camel_exception_get_description (ex)); + } CAMEL_STORE_UNLOCK(store, folder_lock); } diff --git a/camel/providers/local/ChangeLog b/camel/providers/local/ChangeLog index b574a43..9017ba4 100644 --- a/camel/providers/local/ChangeLog +++ b/camel/providers/local/ChangeLog @@ -1,3 +1,8 @@ +2008-07-31 Srinivasa Ragavan + + * camel/providers/local/camel-local-store.c: Support delete folder wrt + disk summary. + 2008-07-30 Srinivasa Ragavan * camel/providers/local/camel-local-folder.c: Move the folder lock to diff --git a/camel/providers/local/camel-local-store.c b/camel/providers/local/camel-local-store.c index 6d33cea..b96cb90 100644 --- a/camel/providers/local/camel-local-store.c +++ b/camel/providers/local/camel-local-store.c @@ -458,26 +458,6 @@ delete_folder(CamelStore *store, const char *folder_name, CamelException *ex) /* remove metadata only */ name = g_strdup_printf("%s%s", CAMEL_LOCAL_STORE(store)->toplevel_dir, folder_name); - str = g_strdup_printf("%s.ev-summary", name); - if (g_unlink(str) == -1 && errno != ENOENT) { - camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM, - _("Could not delete folder summary file '%s': %s"), - str, g_strerror (errno)); - g_free(str); - g_free (name); - return; - } - g_free(str); - str = g_strdup_printf("%s.ev-summary-meta", name); - if (g_unlink(str) == -1 && errno != ENOENT) { - camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM, - _("Could not delete folder summary file '%s': %s"), - str, g_strerror (errno)); - g_free(str); - g_free (name); - return; - } - g_free(str); str = g_strdup_printf("%s.ibex", name); if (camel_text_index_remove(str) == -1 && errno != ENOENT) { camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM, -- 2.7.4