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.
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)
{
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);
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);
}
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);
}
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);
}
+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
/* 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,