[evolution-ews] Bug #657807 - "Save as draft" saving duplicate drafts



commit 8dfdfd2bf6e33a73bacea05d3c1aa36d86efb3fb
Author: Milan Crha <mcrha redhat com>
Date:   Tue Aug 20 20:52:22 2013 +0200

    Bug #657807 - "Save as draft" saving duplicate drafts

 src/camel/camel-ews-folder.c  |   16 +++++++++++-----
 src/camel/camel-ews-summary.c |   11 ++++++++---
 src/camel/camel-ews-summary.h |    1 +
 3 files changed, 20 insertions(+), 8 deletions(-)
---
diff --git a/src/camel/camel-ews-folder.c b/src/camel/camel-ews-folder.c
index 16c47c0..b51f824 100644
--- a/src/camel/camel-ews-folder.c
+++ b/src/camel/camel-ews-folder.c
@@ -1636,8 +1636,8 @@ ews_append_message_sync (CamelFolder *folder,
        e_ews_folder_id_free (fid);
        g_free (folder_id);
 
-       /* FIXME: Do we have to add it to the summary info ourselves?
-        * Hopefully, since we need to store the changekey with it... */
+       camel_ews_summary_add_message (folder->summary, itemid, info, message);
+
        if (appended_uid)
                *appended_uid = itemid;
        else
@@ -1857,6 +1857,15 @@ static void
 ews_folder_dispose (GObject *object)
 {
        CamelEwsFolder *ews_folder = CAMEL_EWS_FOLDER (object);
+       CamelFolderSummary *summary;
+
+       summary = CAMEL_FOLDER (ews_folder)->summary;
+       if (summary) {
+               g_signal_handlers_disconnect_by_func (CAMEL_FOLDER (ews_folder)->summary, G_CALLBACK 
(ews_folder_count_notify_cb), ews_folder);
+
+               /* save changes, if there are any unsaved */
+               camel_folder_summary_save_to_db (summary, NULL);
+       }
 
        if (ews_folder->cache != NULL) {
                g_object_unref (ews_folder->cache);
@@ -1868,9 +1877,6 @@ ews_folder_dispose (GObject *object)
                ews_folder->search = NULL;
        }
 
-       if (CAMEL_FOLDER (ews_folder)->summary)
-               g_signal_handlers_disconnect_by_func (CAMEL_FOLDER (ews_folder)->summary, G_CALLBACK 
(ews_folder_count_notify_cb), ews_folder);
-
        /* Chain up to parent's dispose() method. */
        G_OBJECT_CLASS (camel_ews_folder_parent_class)->dispose (object);
 }
diff --git a/src/camel/camel-ews-summary.c b/src/camel/camel-ews-summary.c
index ae51f33..1bb7b2d 100644
--- a/src/camel/camel-ews-summary.c
+++ b/src/camel/camel-ews-summary.c
@@ -274,17 +274,20 @@ ews_info_set_flags (CamelMessageInfo *info,
 void
 camel_ews_summary_add_message (CamelFolderSummary *summary,
                                const gchar *uid,
+                              CamelMessageInfo *info,
                                CamelMimeMessage *message)
 {
        CamelEwsMessageInfo *mi;
-       CamelMessageInfo *info;
        const CamelFlag *flag;
        const CamelTag *tag;
 
-       info = camel_folder_summary_get (summary, uid);
+       g_return_if_fail (uid != NULL);
+       g_return_if_fail (info != NULL);
+       g_return_if_fail (message != NULL);
 
        /* Create summary entry */
        mi = (CamelEwsMessageInfo *) camel_folder_summary_info_new_from_message (summary, message, NULL);
+       g_return_if_fail (mi != NULL);
 
        /* Copy flags 'n' tags */
        mi->info.flags = camel_message_info_flags (info);
@@ -294,6 +297,7 @@ camel_ews_summary_add_message (CamelFolderSummary *summary,
                camel_message_info_set_user_flag ((CamelMessageInfo *) mi, flag->name, TRUE);
                flag = flag->next;
        }
+
        tag = camel_message_info_user_tags (info);
        while (tag) {
                camel_message_info_set_user_tag ((CamelMessageInfo *) mi, tag->name, tag->value);
@@ -304,7 +308,8 @@ camel_ews_summary_add_message (CamelFolderSummary *summary,
        mi->info.uid = camel_pstring_strdup (uid);
 
        camel_folder_summary_add (summary, (CamelMessageInfo *) mi);
-       camel_message_info_free (info);
+       camel_folder_summary_touch (summary);
+       camel_folder_summary_save_to_db (summary, NULL);
 }
 
 static gboolean
diff --git a/src/camel/camel-ews-summary.h b/src/camel/camel-ews-summary.h
index 78a1407..e69eed6 100644
--- a/src/camel/camel-ews-summary.h
+++ b/src/camel/camel-ews-summary.h
@@ -91,6 +91,7 @@ gboolean
                                         CamelFlag *server_user_flags);
 void   camel_ews_summary_add_message   (CamelFolderSummary *summary,
                                         const gchar *uid,
+                                        CamelMessageInfo *info,
                                         CamelMimeMessage *message);
 void   ews_summary_clear               (CamelFolderSummary *summary,
                                         gboolean uncache);


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]