diff options
-rw-r--r-- | ChangeLog | 4 | ||||
-rw-r--r-- | calendar/ChangeLog | 20 | ||||
-rw-r--r-- | calendar/conduits/calendar/calendar-conduit.c | 124 | ||||
-rw-r--r-- | calendar/conduits/todo/todo-conduit.c | 125 | ||||
-rw-r--r-- | calendar/pcs/cal-backend.c | 14 | ||||
-rw-r--r-- | configure.in | 2 |
6 files changed, 149 insertions, 140 deletions
@@ -1,3 +1,7 @@ +2000-10-11 JP Rosevear <jpr@helixcode.com> + + * configure.in: Fix bonobo error message + 2000-10-11 Jesse Pavel <jpavel@helixcode.com> * data/evolution.keys: Added support for the text/calendar and diff --git a/calendar/ChangeLog b/calendar/ChangeLog index 972e23cec4..954bcea954 100644 --- a/calendar/ChangeLog +++ b/calendar/ChangeLog @@ -1,3 +1,22 @@ +2000-10-11 JP Rosevear <jpr@helixcode.com> + + * pcs/cal-backend.c (cal_backend_log_entry): Take CalObjType + as a param because its impossible to determine after a delete. + (cal_backend_remove_object): Calculate CalObjType and pass + it to cal_backend_log_entry + (cal_backend_update_object): ditto + + * conduits/todo/todo-conduit.c (local_record_from_comp): Kill + unused variables. + (add_archive_record): Don't kill the sync if this happens + (update_record): Kill old function + (replace_record): New function to handle replace_record signal + (conduit_get_gpilot_conduit): Listen for replace record signal + (add_record): Always add a new record, never replace + (replace_record): Always replace an existing record + + * conduits/calendar/calendar-conduit.c: Same as above + 2000-10-10 Jesse Pavel <jpavel@helixcode.com> * gui/e-itip-control.c: set a default size for the control. @@ -91,7 +110,6 @@ * conduits/todo/calendar-conduit.h: same as above ->>>>>>> 1.609 2000-10-09 JP Rosevear <jpr@helixcode.com> * conduits/*: Adjust to using gnome-pilot-sync-abs conduit which diff --git a/calendar/conduits/calendar/calendar-conduit.c b/calendar/conduits/calendar/calendar-conduit.c index 2a694187ef..aad146d03f 100644 --- a/calendar/conduits/calendar/calendar-conduit.c +++ b/calendar/conduits/calendar/calendar-conduit.c @@ -465,12 +465,16 @@ local_record_from_uid (ECalLocalRecord *local, if (status == CAL_CLIENT_GET_SUCCESS) { local_record_from_comp (local, comp, ctxt); + } else if (status == CAL_CLIENT_GET_NOT_FOUND) { + comp = cal_component_new (); + cal_component_set_new_vtype (comp, CAL_COMPONENT_EVENT); + cal_component_set_uid (comp, uid); + local_record_from_comp (local, comp, ctxt); } else { INFO ("Object did not exist"); } } - static CalComponent * comp_from_remote_record (GnomePilotConduitSyncAbs *conduit, GnomePilotRecord *remote, @@ -498,7 +502,7 @@ comp_from_remote_record (GnomePilotConduitSyncAbs *conduit, } LOG (" comp_from_remote_record: " - "merging remote %s into local %s\n", + "creating from remote %s and comp %s\n", print_remote (remote), cal_component_get_as_string (comp)); cal_component_set_last_modified (comp, &now); @@ -580,62 +584,6 @@ check_for_slow_setting (GnomePilotConduit *c, ECalConduitContext *ctxt) } } -static gint -update_record (GnomePilotConduitSyncAbs *conduit, - GnomePilotRecord *remote, - ECalConduitContext *ctxt) -{ - CalComponent *comp; - CalClientGetStatus status; - struct Appointment appt; - const char *uid; - - LOG ("update_record\n"); - - g_return_val_if_fail (remote != NULL, -1); - - memset (&appt, 0, sizeof (struct Appointment)); - unpack_Appointment (&appt, remote->record, remote->length); - - uid = g_hash_table_lookup (ctxt->pid_map, &remote->ID); - - if (uid) - status = cal_client_get_object (ctxt->client, uid, &comp); - else - status = CAL_CLIENT_LOAD_ERROR; - - if (status != CAL_CLIENT_GET_SUCCESS) { - LOG (" new record being created\n"); - comp = comp_from_remote_record (conduit, remote, NULL); - } else { - CalComponent *new_comp; - - LOG (" record found\n"); - - new_comp = comp_from_remote_record (conduit, remote, comp); - gtk_object_unref (GTK_OBJECT (comp)); - comp = new_comp; - } - - update_comp (conduit, comp, ctxt); - - if (!uid) { - guint32 *pid = g_new (guint32, 1); - char *new_uid; - - *pid = remote->ID; - cal_component_get_uid (comp, &uid); - new_uid = g_strdup (uid); - g_hash_table_insert (ctxt->pid_map, pid, new_uid); - g_hash_table_insert (ctxt->pid_map, new_uid, pid); - } - - gtk_object_unref (GTK_OBJECT (comp)); - free_Appointment (&appt); - - return 0; -} - /* Pilot syncing callbacks */ static gint pre_sync (GnomePilotConduit *conduit, @@ -761,11 +709,16 @@ set_pilot_id (GnomePilotConduitSyncAbs *conduit, ECalConduitContext *ctxt) { const char *uid; + char *new_uid; guint32 *pid = g_new (guint32, 1); + + LOG ("set_pilot_id: setting to %d\n", ID); cal_component_get_uid (local->comp, &uid); *pid = ID; - g_hash_table_insert (ctxt->pid_map, pid, g_strdup (uid)); + new_uid = g_strdup (uid); + g_hash_table_insert (ctxt->pid_map, pid, new_uid); + g_hash_table_insert (ctxt->uid_map, new_uid, pid); return 0; } @@ -897,9 +850,9 @@ compare (GnomePilotConduitSyncAbs *conduit, retval = 1; if (retval == 0) - LOG (" match.\n"); + LOG (" equal"); else - LOG (" did not match"); + LOG (" not equal"); g_free (local_pilot); @@ -911,15 +864,26 @@ add_record (GnomePilotConduitSyncAbs *conduit, GnomePilotRecord *remote, ECalConduitContext *ctxt) { - int ret; - + CalComponent *comp; + const char *uid; + char *new_uid; + guint32 *pid = g_new (guint32, 1); + int retval = 0; + g_return_val_if_fail (remote != NULL, -1); LOG ("add_record: adding %s to desktop\n", print_remote (remote)); - ret = update_record (conduit, remote, ctxt); + comp = comp_from_remote_record (conduit, remote, NULL); + update_comp (conduit, comp, ctxt); + + *pid = remote->ID; + cal_component_get_uid (comp, &uid); + new_uid = g_strdup (uid); + g_hash_table_insert (ctxt->pid_map, pid, new_uid); + g_hash_table_insert (ctxt->uid_map, new_uid, pid); - return ret; + return retval; } static gint @@ -928,13 +892,39 @@ add_archive_record (GnomePilotConduitSyncAbs *conduit, GnomePilotRecord *remote, ECalConduitContext *ctxt) { + int retval = 0; + g_return_val_if_fail (remote != NULL, -1); g_return_val_if_fail (local != NULL, -1); LOG ("add_archive_record: doing nothing with %s\n", print_local (local)); - return -1; + return retval; +} + +static gint +replace_record (GnomePilotConduitSyncAbs *conduit, + ECalLocalRecord *local, + GnomePilotRecord *remote, + ECalConduitContext *ctxt) +{ + CalComponent *new_comp; + int retval = 0; + + g_return_val_if_fail (remote != NULL, -1); + + LOG ("replace_record: replace %s with %s\n", + print_local (local), print_remote (remote)); + + new_comp = comp_from_remote_record (conduit, remote, local->comp); + gtk_object_unref (GTK_OBJECT (local->comp)); + local->comp = new_comp; + update_comp (conduit, local->comp, ctxt); + + gtk_object_unref (GTK_OBJECT (new_comp)); + + return retval; } static gint @@ -1098,6 +1088,8 @@ conduit_get_gpilot_conduit (guint32 pilot_id) gtk_signal_connect (retval, "add_record", (GtkSignalFunc) add_record, ctxt); /* gtk_signal_connect (retval, "add_archive_record", (GtkSignalFunc) add_archive_record, ctxt); */ + gtk_signal_connect (retval, "replace_record", (GtkSignalFunc) replace_record, ctxt); + gtk_signal_connect (retval, "delete_record", (GtkSignalFunc) delete_record, ctxt); /* gtk_signal_connect (retval, "delete_archive_record", (GtkSignalFunc) delete_archive_record, ctxt); */ diff --git a/calendar/conduits/todo/todo-conduit.c b/calendar/conduits/todo/todo-conduit.c index 525d85de51..90ce255210 100644 --- a/calendar/conduits/todo/todo-conduit.c +++ b/calendar/conduits/todo/todo-conduit.c @@ -399,8 +399,6 @@ local_record_from_comp (EToDoLocalRecord *local, CalComponent *comp, EToDoCondui CalComponentDateTime due; time_t due_time; CalComponentClassification classif; - unsigned long *pilot_id; - unsigned long *pilot_status; LOG ("local_record_from_comp\n"); @@ -478,6 +476,11 @@ local_record_from_uid (EToDoLocalRecord *local, if (status == CAL_CLIENT_GET_SUCCESS) { local_record_from_comp (local, comp, ctxt); + } else if (status == CAL_CLIENT_GET_NOT_FOUND) { + comp = cal_component_new (); + cal_component_set_new_vtype (comp, CAL_COMPONENT_TODO); + cal_component_set_uid (comp, uid); + local_record_from_comp (local, comp, ctxt); } else { INFO ("Object did not exist"); } @@ -512,7 +515,7 @@ comp_from_remote_record (GnomePilotConduitSyncAbs *conduit, } LOG (" comp_from_remote_record: " - "merging remote %s into local %s\n", + "creating from remote %s and comp %s\n", print_remote (remote), cal_component_get_as_string (comp)); cal_component_set_last_modified (comp, &now); @@ -593,62 +596,6 @@ check_for_slow_setting (GnomePilotConduit *c, EToDoConduitContext *ctxt) } } -static gint -update_record (GnomePilotConduitSyncAbs *conduit, - GnomePilotRecord *remote, - EToDoConduitContext *ctxt) -{ - CalComponent *comp; - CalClientGetStatus status; - struct ToDo todo; - const char *uid; - - LOG ("update_record\n"); - - g_return_val_if_fail (remote != NULL, -1); - - memset (&todo, 0, sizeof (struct ToDo)); - unpack_ToDo (&todo, remote->record, remote->length); - - uid = g_hash_table_lookup (ctxt->pid_map, &remote->ID); - - if (uid) - status = cal_client_get_object (ctxt->client, uid, &comp); - else - status = CAL_CLIENT_LOAD_ERROR; - - if (status != CAL_CLIENT_GET_SUCCESS) { - LOG (" new record being created\n"); - comp = comp_from_remote_record (conduit, remote, NULL); - } else { - CalComponent *new_comp; - - LOG (" record found\n"); - - new_comp = comp_from_remote_record (conduit, remote, comp); - gtk_object_unref (GTK_OBJECT (comp)); - comp = new_comp; - } - - update_comp (conduit, comp, ctxt); - - if (!uid) { - guint32 *pid = g_new (guint32, 1); - char *new_uid; - - *pid = remote->ID; - cal_component_get_uid (comp, &uid); - new_uid = g_strdup (uid); - g_hash_table_insert (ctxt->pid_map, pid, new_uid); - g_hash_table_insert (ctxt->pid_map, new_uid, pid); - } - - gtk_object_unref (GTK_OBJECT (comp)); - free_ToDo(&todo); - - return 0; -} - /* Pilot syncing callbacks */ static gint pre_sync (GnomePilotConduit *conduit, @@ -774,11 +721,16 @@ set_pilot_id (GnomePilotConduitSyncAbs *conduit, EToDoConduitContext *ctxt) { const char *uid; + char *new_uid; guint32 *pid = g_new (guint32, 1); + + LOG ("set_pilot_id: setting to %d\n", ID); cal_component_get_uid (local->comp, &uid); *pid = ID; - g_hash_table_insert (ctxt->pid_map, pid, g_strdup (uid)); + new_uid = g_strdup (uid); + g_hash_table_insert (ctxt->pid_map, pid, new_uid); + g_hash_table_insert (ctxt->uid_map, new_uid, pid); return 0; } @@ -910,9 +862,9 @@ compare (GnomePilotConduitSyncAbs *conduit, retval = 1; if (retval == 0) - LOG (" match.\n"); + LOG (" equal"); else - LOG (" did not match"); + LOG (" not equal"); g_free (local_pilot); @@ -924,15 +876,26 @@ add_record (GnomePilotConduitSyncAbs *conduit, GnomePilotRecord *remote, EToDoConduitContext *ctxt) { - int ret; - + CalComponent *comp; + const char *uid; + char *new_uid; + guint32 *pid = g_new (guint32, 1); + int retval = 0; + g_return_val_if_fail (remote != NULL, -1); LOG ("add_record: adding %s to desktop\n", print_remote (remote)); - ret = update_record (conduit, remote, ctxt); + comp = comp_from_remote_record (conduit, remote, NULL); + update_comp (conduit, comp, ctxt); + + *pid = remote->ID; + cal_component_get_uid (comp, &uid); + new_uid = g_strdup (uid); + g_hash_table_insert (ctxt->pid_map, pid, new_uid); + g_hash_table_insert (ctxt->uid_map, new_uid, pid); - return ret; + return retval; } static gint @@ -941,13 +904,39 @@ add_archive_record (GnomePilotConduitSyncAbs *conduit, GnomePilotRecord *remote, EToDoConduitContext *ctxt) { + int retval = 0; + g_return_val_if_fail (remote != NULL, -1); g_return_val_if_fail (local != NULL, -1); LOG ("add_archive_record: doing nothing with %s\n", print_local (local)); - return -1; + return retval; +} + +static gint +replace_record (GnomePilotConduitSyncAbs *conduit, + EToDoLocalRecord *local, + GnomePilotRecord *remote, + EToDoConduitContext *ctxt) +{ + CalComponent *new_comp; + int retval = 0; + + g_return_val_if_fail (remote != NULL, -1); + + LOG ("replace_record: replace %s with %s\n", + print_local (local), print_remote (remote)); + + new_comp = comp_from_remote_record (conduit, remote, local->comp); + gtk_object_unref (GTK_OBJECT (local->comp)); + local->comp = new_comp; + update_comp (conduit, local->comp, ctxt); + + gtk_object_unref (GTK_OBJECT (new_comp)); + + return retval; } static gint @@ -1111,6 +1100,8 @@ conduit_get_gpilot_conduit (guint32 pilot_id) gtk_signal_connect (retval, "add_record", (GtkSignalFunc) add_record, ctxt); /* gtk_signal_connect (retval, "add_archive_record", (GtkSignalFunc) add_archive_record, ctxt); */ + gtk_signal_connect (retval, "replace_record", (GtkSignalFunc) replace_record, ctxt); + gtk_signal_connect (retval, "delete_record", (GtkSignalFunc) delete_record, ctxt); /* gtk_signal_connect (retval, "delete_archive_record", (GtkSignalFunc) delete_archive_record, ctxt); */ diff --git a/calendar/pcs/cal-backend.c b/calendar/pcs/cal-backend.c index f07b975413..89049d5f8c 100644 --- a/calendar/pcs/cal-backend.c +++ b/calendar/pcs/cal-backend.c @@ -466,14 +466,14 @@ cal_backend_set_node_timet (xmlNodePtr node, const char *name, time_t t) } static void -cal_backend_log_entry (CalBackend *backend, const char *uid, +cal_backend_log_entry (CalBackend *backend, + const char *uid, + CalObjType cot, CalBackendLogEntryType type) { CalBackendLogEntry *entry = g_new0 (CalBackendLogEntry, 1); - CalObjType cot; g_assert (CLASS (backend)->get_type_by_uid != NULL); - cot = (* CLASS (backend)->get_type_by_uid) (backend, uid); /* Only log todos and events */ if (cot != CALOBJ_TYPE_EVENT && cot != CALOBJ_TYPE_TODO) @@ -691,6 +691,7 @@ cal_backend_get_log_entries (CalBackend *backend, CalObjType type, time_t since) gboolean cal_backend_update_object (CalBackend *backend, const char *uid, const char *calobj) { + CalObjType cot; gboolean result; g_return_val_if_fail (backend != NULL, FALSE); @@ -699,10 +700,11 @@ cal_backend_update_object (CalBackend *backend, const char *uid, const char *cal g_return_val_if_fail (calobj != NULL, FALSE); g_assert (CLASS (backend)->update_object != NULL); + cot = (* CLASS (backend)->get_type_by_uid) (backend, uid); result = (* CLASS (backend)->update_object) (backend, uid, calobj); if (result) - cal_backend_log_entry (backend, uid, CAL_BACKEND_UPDATED); + cal_backend_log_entry (backend, uid, cot, CAL_BACKEND_UPDATED); return result; } @@ -721,6 +723,7 @@ cal_backend_update_object (CalBackend *backend, const char *uid, const char *cal gboolean cal_backend_remove_object (CalBackend *backend, const char *uid) { + CalObjType cot; gboolean result; g_return_val_if_fail (backend != NULL, FALSE); @@ -728,10 +731,11 @@ cal_backend_remove_object (CalBackend *backend, const char *uid) g_return_val_if_fail (uid != NULL, FALSE); g_assert (CLASS (backend)->remove_object != NULL); + cot = (* CLASS (backend)->get_type_by_uid) (backend, uid); result = (* CLASS (backend)->remove_object) (backend, uid); if (result) - cal_backend_log_entry (backend, uid, CAL_BACKEND_REMOVED); + cal_backend_log_entry (backend, uid, cot, CAL_BACKEND_REMOVED); return result; } diff --git a/configure.in b/configure.in index 5537b4ceb3..3b0286520c 100644 --- a/configure.in +++ b/configure.in @@ -226,7 +226,7 @@ fi if $bonobo_ok; then AC_MSG_RESULT($vers found) else - AC_MSG_ERROR(Bonobo newer than 0.18 is required to compile Evolution) + AC_MSG_ERROR(Bonobo 0.20 or newer is required to compile Evolution) fi dnl ****************************** |