diff options
-rw-r--r-- | plugins/itip-formatter/itip-formatter.c | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/plugins/itip-formatter/itip-formatter.c b/plugins/itip-formatter/itip-formatter.c index 6eebfdee92..c2f64a1a17 100644 --- a/plugins/itip-formatter/itip-formatter.c +++ b/plugins/itip-formatter/itip-formatter.c @@ -38,6 +38,7 @@ #include <camel/camel-multipart.h> #include <camel/camel-service.h> #include <camel/camel-store.h> +#include <camel/camel-db.h> #include <libecal/e-cal.h> #include <libecal/e-cal-time-util.h> #include <libedataserverui/e-source-selector.h> @@ -1876,6 +1877,7 @@ view_response_cb (GtkWidget *widget, ItipViewResponse response, gpointer data) camel_message_info_free (mi); if (tag) { int i = 0, count; + GSList *list = NULL; count = camel_folder_summary_count (pitip->folder->summary); for (i = 0; i < count; i++) { @@ -1884,12 +1886,18 @@ view_response_cb (GtkWidget *widget, ItipViewResponse response, gpointer data) continue; camel_message_info_ref (mi); if ( camel_message_info_user_tag (mi, "recurrence-key") && g_str_equal (camel_message_info_user_tag (mi, "recurrence-key"), tag)) { + camel_folder_summary_remove_uid_fast (pitip->folder->summary, (char *)(mi->uid)); + camel_folder_change_info_remove_uid (changes, (char *) mi->uid); + list = g_slist_prepend (list, (gpointer) mi->uid); - camel_folder_summary_remove_uid(pitip->folder->summary, (char *)(mi->uid)); - camel_folder_change_info_remove_uid (changes, (char *)(mi->uid)); + /* step back once to have the right index */ + count--; + i--; } camel_message_info_free (mi); } + camel_db_delete_uids (pitip->folder->parent_store->cdb_w, pitip->folder->full_name, list, NULL); + g_slist_free (list); } } else { /* Either not a recurring appointment or "apply-to-all" is not selected. So just delete this instance alone */ |