diff options
Diffstat (limited to 'calendar/pcs/cal-backend-file.c')
-rw-r--r-- | calendar/pcs/cal-backend-file.c | 49 |
1 files changed, 28 insertions, 21 deletions
diff --git a/calendar/pcs/cal-backend-file.c b/calendar/pcs/cal-backend-file.c index 6747280f38..c60c0c118a 100644 --- a/calendar/pcs/cal-backend-file.c +++ b/calendar/pcs/cal-backend-file.c @@ -440,7 +440,7 @@ check_dup_uid (CalBackendFile *cbfile, CalComponent *comp) * that we don't lose them. */ static void -add_component (CalBackendFile *cbfile, CalComponent *comp) +add_component (CalBackendFile *cbfile, CalComponent *comp, gboolean add_to_toplevel) { CalBackendFilePrivate *priv; GList **list; @@ -474,20 +474,42 @@ add_component (CalBackendFile *cbfile, CalComponent *comp) g_hash_table_insert (priv->comp_uid_hash, (char *) uid, comp); *list = g_list_prepend (*list, comp); + + /* Put the object in the toplevel component if required */ + + if (add_to_toplevel) { + icalcomponent *icalcomp; + + icalcomp = cal_component_get_icalcomponent (comp); + g_assert (icalcomp != NULL); + + icalcomponent_add_component (priv->icalcomp, icalcomp); + } } /* Removes a component from the backend's hash and lists. Does not perform - * notification on the clients. + * notification on the clients. Also removes the component from the toplevel + * icalcomponent. */ static void remove_component (CalBackendFile *cbfile, CalComponent *comp) { CalBackendFilePrivate *priv; + icalcomponent *icalcomp; const char *uid; GList **list, *l; priv = cbfile->priv; + /* Remove the icalcomp from the toplevel */ + + icalcomp = cal_component_get_icalcomponent (comp); + g_assert (icalcomp != NULL); + + icalcomponent_remove_component (priv->icalcomp, icalcomp); + + /* Remove it from our mapping */ + cal_component_get_uid (comp, &uid); g_hash_table_remove (priv->comp_uid_hash, uid); @@ -548,7 +570,7 @@ scan_vcalendar (CalBackendFile *cbfile) if (!cal_component_set_icalcomponent (comp, icalcomp)) continue; - add_component (cbfile, comp); + add_component (cbfile, comp, FALSE); } } @@ -950,7 +972,7 @@ cal_backend_file_update_object (CalBackend *backend, const char *uid, const char { CalBackendFile *cbfile; CalBackendFilePrivate *priv; - icalcomponent *icalcomp, *icalcomp2; + icalcomponent *icalcomp; icalcomponent_kind kind; CalComponent *old_comp; CalComponent *comp; @@ -1001,19 +1023,10 @@ cal_backend_file_update_object (CalBackend *backend, const char *uid, const char old_comp = lookup_component (cbfile, uid); - if (old_comp) { - /* Remove it from our calendar component */ - icalcomp2 = cal_component_get_icalcomponent (old_comp); - icalcomponent_remove_component (priv->icalcomp, icalcomp2); - + if (old_comp) remove_component (cbfile, old_comp); - } - - /* Add it to our calendar component */ - icalcomp2 = cal_component_get_icalcomponent (comp); - icalcomponent_add_component (priv->icalcomp, icalcomp2); - add_component (cbfile, comp); + add_component (cbfile, comp, TRUE); #if 0 /* FIXME */ new_ico->pilot_status = ICAL_PILOT_SYNC_MOD; @@ -1034,7 +1047,6 @@ cal_backend_file_remove_object (CalBackend *backend, const char *uid) CalBackendFile *cbfile; CalBackendFilePrivate *priv; CalComponent *comp; - icalcomponent *icalcomp; cbfile = CAL_BACKEND_FILE (backend); priv = cbfile->priv; @@ -1047,12 +1059,7 @@ cal_backend_file_remove_object (CalBackend *backend, const char *uid) if (!comp) return FALSE; - /* Remove it from our calendar component */ - icalcomp = cal_component_get_icalcomponent (comp); - icalcomponent_remove_component (priv->icalcomp, icalcomp); - remove_component (cbfile, comp); - mark_dirty (cbfile); /* FIXME: do the notification asynchronously */ |