From 2977fbe7c415dd4ccfb577a90853e5dbd11640ea Mon Sep 17 00:00:00 2001 From: Adenilson Cavalcanti Date: Wed, 27 Aug 2008 09:57:00 -0400 Subject: [PATCH] Reporting calendar events to opensync when doing slow sync. --- src/gcalendar.c | 35 +++++++++++++++++++++++++++++++++-- 1 file changed, 33 insertions(+), 2 deletions(-) diff --git a/src/gcalendar.c b/src/gcalendar.c index 3b263d5..c207be5 100644 --- a/src/gcalendar.c +++ b/src/gcalendar.c @@ -187,6 +187,9 @@ static void gc_get_changes(void *data, OSyncPluginInfo *info, OSyncContext *ctx) struct gc_plgdata *plgdata = data; OSyncObjTypeSink *sink = osync_plugin_info_get_sink(info); OSyncError *error = NULL; + OSyncXMLFormat *xmlformat; + OSyncData *odata = NULL; + OSyncChange *chg = NULL; int result = 0, i; char *timestamp = NULL, *msg, *raw_xml = NULL; gcal_event event; @@ -216,8 +219,31 @@ static void gc_get_changes(void *data, OSyncPluginInfo *info, OSyncContext *ctx) if ((result = xslt_transform(plgdata->xslt_ctx_gcal, raw_xml))) goto error; - /* TODO: report back events to opensync */ - plgdata->xslt_ctx_gcal->xml_str; + + raw_xml = plgdata->xslt_ctx_gcal->xml_str; + xmlformat = osync_xmlformat_parse(raw_xml, + strlen(raw_xml), + &error); + if (!xmlformat) + goto error; + + osync_xmlformat_sort(xmlformat); + odata = osync_data_new((char *)xmlformat, + osync_xmlformat_size(), + plgdata->gcal_format, &error); + if (!odata) + goto cleanup; + + if (!(chg = osync_change_new(&error))) + goto cleanup; + osync_data_set_objtype(odata, osync_objtype_sink_get_name(plgdata->gcal_sink)); + osync_change_set_data(chg, odata); + osync_data_unref(odata); + + osync_change_set_uid(chg, gcal_event_get_id(event)); + osync_change_set_changetype(chg, OSYNC_CHANGE_TYPE_ADDED); + osync_context_report_change(ctx, chg); + osync_change_unref(chg); } @@ -260,6 +286,11 @@ exit: ++counter; osync_context_report_success(ctx); return; + +cleanup: + osync_error_unref(&error); + osync_xmlformat_unref(&xmlformat); + error: ++counter; osync_context_report_error(ctx, OSYNC_ERROR_GENERIC, msg); -- 2.11.4.GIT