[evolution-data-server] delete folders while syncronizing
- From: Chenthill Palanisamy <pchen src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [evolution-data-server] delete folders while syncronizing
- Date: Tue, 9 Mar 2010 08:38:15 +0000 (UTC)
commit 16cb2c60ff0f1d0cecf8ceb8ecf6a8f802d7f5e6
Author: Chenthill Palanisamy <pchenthill novell com>
Date: Tue Mar 9 14:10:08 2010 +0530
delete folders while syncronizing
camel/providers/imapx/camel-imapx-server.c | 1 +
camel/providers/imapx/camel-imapx-store.c | 78 ++++++++++++++++++++++++++-
2 files changed, 76 insertions(+), 3 deletions(-)
---
diff --git a/camel/providers/imapx/camel-imapx-server.c b/camel/providers/imapx/camel-imapx-server.c
index ac5c39b..1cdddd5 100644
--- a/camel/providers/imapx/camel-imapx-server.c
+++ b/camel/providers/imapx/camel-imapx-server.c
@@ -2285,6 +2285,7 @@ retry:
ns->sep = '/';
nsl->personal = ns;
imapx_store->summary->namespaces = nsl;
+ imapx_store->dir_sep = ns->sep;
}
if (!camel_exception_is_set (ex))
diff --git a/camel/providers/imapx/camel-imapx-store.c b/camel/providers/imapx/camel-imapx-store.c
index 0e21303..397c155 100644
--- a/camel/providers/imapx/camel-imapx-store.c
+++ b/camel/providers/imapx/camel-imapx-store.c
@@ -38,6 +38,7 @@
#include <string.h>
#include <unistd.h>
#include <errno.h>
+#include <glib/gstdio.h>
#include "camel/camel-operation.h"
@@ -49,6 +50,7 @@
#include "camel/camel-data-cache.h"
#include "camel/camel-tcp-stream.h"
#include "camel/camel-tcp-stream-raw.h"
+#include "camel/camel-db.h"
#ifdef HAVE_SSL
#include "camel/camel-tcp-stream-ssl.h"
#endif
@@ -446,6 +448,76 @@ imapx_match_pattern(CamelIMAPXStoreNamespace *ns, const gchar *pattern, const gc
return n == 0 && (p == '%' || p == 0);
}
+static void
+imapx_folder_unsubscribe_from_cache (CamelIMAPXStore *istore,
+ const gchar *folder_name, CamelException *ex)
+{
+ CamelFolderInfo *fi;
+ CamelStoreInfo *si;
+
+ si = camel_store_summary_path((CamelStoreSummary *)istore->summary, folder_name);
+ if (si) {
+ if (si->flags & CAMEL_STORE_INFO_FOLDER_SUBSCRIBED) {
+ si->flags &= ~CAMEL_STORE_INFO_FOLDER_SUBSCRIBED;
+ camel_store_summary_touch((CamelStoreSummary *)istore->summary);
+ camel_store_summary_save((CamelStoreSummary *)istore->summary);
+ }
+ camel_store_summary_info_free((CamelStoreSummary *)istore->summary, si);
+ }
+
+ /* handle rename */
+
+ fi = imapx_build_folder_info(istore, folder_name);
+ camel_object_trigger_event (CAMEL_OBJECT (istore), "folder_unsubscribed", fi);
+ camel_folder_info_free (fi);
+}
+
+static void
+imapx_delete_folder_from_cache (CamelIMAPXStore *istore, const gchar *folder_name, CamelException *ex)
+{
+ gchar *state_file;
+ gchar *folder_dir, *storage_path;
+ CamelFolderInfo *fi;
+ const gchar *name = NULL;
+
+ name = strrchr (folder_name, istore->dir_sep);
+ if (name)
+ name++;
+ else
+ name = folder_name;
+
+ storage_path = g_strdup_printf ("%s/folders", istore->storage_path);
+ folder_dir = imapx_path_to_physical (storage_path, folder_name);
+ g_free (storage_path);
+ if (g_access (folder_dir, F_OK) != 0) {
+ g_free (folder_dir);
+ goto event;
+ }
+
+ /* Delete summary and all the data */
+ state_file = g_strdup_printf ("%s/cmeta", folder_dir);
+ g_unlink (state_file);
+ g_free (state_file);
+
+ camel_db_delete_folder (((CamelStore *)istore)->cdb_w, folder_name, ex);
+ g_rmdir (folder_dir);
+
+ state_file = g_strdup_printf("%s/subfolders", folder_dir);
+ g_rmdir(state_file);
+ g_free(state_file);
+
+ g_rmdir (folder_dir);
+ g_free (folder_dir);
+
+ event:
+ camel_store_summary_remove_path((CamelStoreSummary *)istore->summary, folder_name);
+ camel_store_summary_save((CamelStoreSummary *)istore->summary);
+
+ fi = imapx_build_folder_info(istore, folder_name);
+ camel_object_trigger_event (CAMEL_OBJECT (istore), "folder_deleted", fi);
+ camel_folder_info_free (fi);
+}
+
static CamelFolderInfo *
get_folder_info_offline (CamelStore *store, const gchar *top,
guint32 flags, CamelException *ex)
@@ -765,9 +837,9 @@ sync_folders (CamelIMAPXStore *istore, const gchar *pattern, CamelException *ex)
CamelException eex;
camel_exception_init (&eex);
-
- /* Delete the folder from cache */
-
+ imapx_folder_unsubscribe_from_cache (istore,dup_folder_name, &eex);
+ imapx_delete_folder_from_cache (istore, dup_folder_name, &eex);
+
g_free (dup_folder_name);
camel_exception_clear (&eex);
} else {
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]