[evolution-ews/gnome-3-4] Bug #653631 - Empty trash doesn't work (no trash folder returned)
- From: Milan Crha <mcrha src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [evolution-ews/gnome-3-4] Bug #653631 - Empty trash doesn't work (no trash folder returned)
- Date: Thu, 26 Apr 2012 06:44:40 +0000 (UTC)
commit 25775214e27ffd6b812b0283c08d498571d19f98
Author: Milan Crha <mcrha redhat com>
Date: Thu Apr 26 08:43:49 2012 +0200
Bug #653631 - Empty trash doesn't work (no trash folder returned)
src/camel/camel-ews-store-summary.c | 38 +++++++++++++++++++++++++++++++++++
src/camel/camel-ews-store-summary.h | 4 +++
src/camel/camel-ews-store.c | 21 ++++++++++++++++++-
3 files changed, 62 insertions(+), 1 deletions(-)
---
diff --git a/src/camel/camel-ews-store-summary.c b/src/camel/camel-ews-store-summary.c
index 83a8490..999162a 100644
--- a/src/camel/camel-ews-store-summary.c
+++ b/src/camel/camel-ews-store-summary.c
@@ -724,6 +724,9 @@ camel_ews_store_summary_get_folder_id_from_name (CamelEwsStoreSummary *ews_summa
{
gchar *folder_id;
+ g_return_val_if_fail (ews_summary != NULL, NULL);
+ g_return_val_if_fail (folder_name != NULL, NULL);
+
S_LOCK (ews_summary);
folder_id = g_hash_table_lookup (ews_summary->priv->fname_id_hash, folder_name);
@@ -735,6 +738,41 @@ camel_ews_store_summary_get_folder_id_from_name (CamelEwsStoreSummary *ews_summa
return folder_id;
}
+gchar *
+camel_ews_store_summary_get_folder_id_from_folder_type (CamelEwsStoreSummary *ews_summary,
+ guint64 folder_type)
+{
+ gchar *folder_id = NULL;
+ GSList *folders, *l;
+
+ g_return_val_if_fail (ews_summary != NULL, NULL);
+ g_return_val_if_fail ((folder_type & CAMEL_FOLDER_TYPE_MASK) != 0, NULL);
+
+ folder_type = folder_type & CAMEL_FOLDER_TYPE_MASK;
+
+ S_LOCK (ews_summary);
+
+ folders = camel_ews_store_summary_get_folders (ews_summary, NULL);
+
+ for (l = folders; l != NULL; l = g_slist_next (l)) {
+ gchar *id = l->data;
+ guint64 folder_flags;
+
+ folder_flags = camel_ews_store_summary_get_folder_flags (ews_summary, id, NULL);
+ if ((folder_flags & CAMEL_FOLDER_TYPE_MASK) == folder_type) {
+ folder_id = id;
+ l->data = NULL;
+ break;
+ }
+ }
+
+ g_slist_free_full (folders, g_free);
+
+ S_UNLOCK (ews_summary);
+
+ return folder_id;
+}
+
gboolean
camel_ews_store_summary_has_folder (CamelEwsStoreSummary *ews_summary,
const gchar *folder_id)
diff --git a/src/camel/camel-ews-store-summary.h b/src/camel/camel-ews-store-summary.h
index b048b4b..3bbc1c8 100644
--- a/src/camel/camel-ews-store-summary.h
+++ b/src/camel/camel-ews-store-summary.h
@@ -151,6 +151,10 @@ gchar * camel_ews_store_summary_get_folder_id_from_name
(CamelEwsStoreSummary *ews_summary,
const gchar *folder_name);
+gchar * camel_ews_store_summary_get_folder_id_from_folder_type
+ (CamelEwsStoreSummary *ews_summary,
+ guint64 folder_type);
+
gboolean camel_ews_store_summary_has_folder
(CamelEwsStoreSummary *ews_summary,
const gchar *id);
diff --git a/src/camel/camel-ews-store.c b/src/camel/camel-ews-store.c
index 5708a9e..02034aa 100644
--- a/src/camel/camel-ews-store.c
+++ b/src/camel/camel-ews-store.c
@@ -1021,7 +1021,26 @@ ews_get_trash_folder_sync (CamelStore *store,
GCancellable *cancellable,
GError **error)
{
- return NULL;
+ CamelEwsStore *ews_store;
+ CamelFolder *trash = NULL;
+ gchar *folder_id, *folder_name;
+
+ g_return_val_if_fail (CAMEL_IS_EWS_STORE (store), NULL);
+
+ ews_store = CAMEL_EWS_STORE (store);
+ folder_id = camel_ews_store_summary_get_folder_id_from_folder_type (ews_store->summary, CAMEL_FOLDER_TYPE_TRASH);
+
+ if (!folder_id)
+ return NULL;
+
+ folder_name = camel_ews_store_summary_get_folder_full_name (ews_store->summary, folder_id, NULL);
+
+ trash = ews_get_folder_sync (store, folder_name, 0, cancellable, error);
+
+ g_free (folder_name);
+ g_free (folder_id);
+
+ return trash;
}
static gboolean
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]