diff options
-rw-r--r-- | calendar/ChangeLog | 13 | ||||
-rw-r--r-- | calendar/conduits/todo/todo-conduit.c | 32 | ||||
-rw-r--r-- | calendar/conduits/todo/todo-conduit.h | 1 | ||||
-rw-r--r-- | calendar/pcs/cal-backend.c | 2 |
4 files changed, 43 insertions, 5 deletions
diff --git a/calendar/ChangeLog b/calendar/ChangeLog index 7044593984..dca894dfc4 100644 --- a/calendar/ChangeLog +++ b/calendar/ChangeLog @@ -1,5 +1,18 @@ 2000-09-20 JP Rosevear <jpr@helixcode.com> + * conduits/todo/todo-conduit.h: Add since field to context + + * conduits/todo/todo-conduit.c (map_set_node_timet): New utility + function + (map_sax_start_element): Look for the map timestamp as well + (map_write): Write the map timestamp + (pre_sync): Use the map time stamp when looking for changed entries + + * pcs/cal-backend.c (cal_backend_log_sax_start_element): Make sure + we are in a valid timestamp + +2000-09-20 JP Rosevear <jpr@helixcode.com> + * pcs/cal-backend.c (cal_backend_log_name): Make the log file name relevant to the actual calendar file, rather than just the directory. diff --git a/calendar/conduits/todo/todo-conduit.c b/calendar/conduits/todo/todo-conduit.c index f456b6e81d..61bf8f9cab 100644 --- a/calendar/conduits/todo/todo-conduit.c +++ b/calendar/conduits/todo/todo-conduit.c @@ -149,24 +149,46 @@ map_name (EToDoConduitContext *ctxt) { char *filename; + filename = g_strdup_printf ("%s/evolution/local/Calendar/pilot-map-%d.xml", g_get_home_dir (), ctxt->cfg->pilot_id); return filename; } static void +map_set_node_timet (xmlNodePtr node, const char *name, time_t t) +{ + char *tstring; + + tstring = g_strdup_printf ("%ld", t); + xmlSetProp (node, name, tstring); +} + +static void map_sax_start_element (void *data, const xmlChar *name, const xmlChar **attrs) { EToDoConduitContext *ctxt = (EToDoConduitContext *)data; - + + if (!strcmp (name, "PilotMap")) { + while (attrs && *attrs != NULL) { + const xmlChar **val = attrs; + + val++; + if (!strcmp (*attrs, "timestamp")) + ctxt->since = (time_t)strtoul (*val, NULL, 0); + + attrs = ++val; + } + } + if (!strcmp (name, "map")) { char *uid = NULL; guint32 *pid = g_new (guint32, 1); *pid = 0; - while (*attrs != NULL) { + while (attrs && *attrs != NULL) { const xmlChar **val = attrs; val++; @@ -217,6 +239,7 @@ map_write (EToDoConduitContext *ctxt, char *filename) return -1; } doc->root = xmlNewDocNode(doc, NULL, "PilotMap", NULL); + map_set_node_timet (doc->root, "timestamp", time (NULL)); g_hash_table_foreach (ctxt->map, map_write_foreach, doc->root); @@ -585,13 +608,14 @@ pre_sync (GnomePilotConduit *conduit, handler.startElement = map_sax_start_element; filename = map_name (ctxt); - if (xmlSAXUserParseFile (&logSAXParser, ctxt, filename) < 0) + if (xmlSAXUserParseFile (&handler, ctxt, filename) < 0) return -1; g_free (filename); /* Find the added, modified and deleted items */ - changes = cal_client_get_changed_uids (ctxt->client, CALOBJ_TYPE_TODO, 0); + changes = cal_client_get_changed_uids (ctxt->client, CALOBJ_TYPE_TODO, + ctxt->since); for (l = changes; l != NULL; l = l->next) { CalObjChange *coc = l->data; diff --git a/calendar/conduits/todo/todo-conduit.h b/calendar/conduits/todo/todo-conduit.h index 9e9a02e6db..20eb9ddd2d 100644 --- a/calendar/conduits/todo/todo-conduit.h +++ b/calendar/conduits/todo/todo-conduit.h @@ -63,6 +63,7 @@ struct _EToDoConduitContext { gboolean calendar_load_tried; gboolean calendar_load_success; + time_t since; GList *uids; GList *added; diff --git a/calendar/pcs/cal-backend.c b/calendar/pcs/cal-backend.c index be92b2b031..d5609d59f1 100644 --- a/calendar/pcs/cal-backend.c +++ b/calendar/pcs/cal-backend.c @@ -595,7 +595,7 @@ cal_backend_log_sax_start_element (CalBackendParseState *state, const CHAR *name } } - if (!strcmp (name, "status")) { + if (state->in_valid_timestamp && !strcmp (name, "status")) { CalObjChange *coc = g_new0 (CalObjChange, 1); CalObjType cot = 0; |