** Fix for bug #545082
authorSrinivasa Ragavan <sragavan@novell.com>
Thu, 31 Jul 2008 10:33:06 +0000 (10:33 +0000)
committerSrinivasa Ragavan <sragavan@src.gnome.org>
Thu, 31 Jul 2008 10:33:06 +0000 (10:33 +0000)
2008-07-31  Srinivasa Ragavan  <sragavan@novell.com>

** 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  <sragavan@novell.com>

* camel/providers/local/camel-local-store.c: Support delete folder wrt
disk summary.

svn path=/trunk/; revision=9239

camel/ChangeLog
camel/camel-db.c
camel/camel-db.h
camel/camel-folder.c
camel/camel-store.c
camel/providers/local/ChangeLog
camel/providers/local/camel-local-store.c

index 35c4647..1900a35 100644 (file)
 
 2008-07-31  Srinivasa Ragavan  <sragavan@novell.com>
 
+       ** 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  <sragavan@novell.com>
+
        * camel/camel-db.c: Add delete folder functionality.
        * camel/camel-folder-summary.c: Added code to check if the uid exists
        in summary.
index fb0c81e..2006a87 100644 (file)
@@ -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)
 {
index 0a8542e..2f7ecac 100644 (file)
@@ -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);
index 13740ba..d50271a 100644 (file)
@@ -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);
 }
index e550015..50e0773 100644 (file)
@@ -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);
 }
index b574a43..9017ba4 100644 (file)
@@ -1,3 +1,8 @@
+2008-07-31  Srinivasa Ragavan  <sragavan@novell.com>
+
+       * camel/providers/local/camel-local-store.c: Support delete folder wrt
+       disk summary.
+
 2008-07-30  Srinivasa Ragavan  <sragavan@novell.com>
 
        * camel/providers/local/camel-local-folder.c: Move the folder lock to
index 6d33cea..b96cb90 100644 (file)
@@ -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,