[asterisk-commits] pitel: branch 1.8 r286617 - /branches/1.8/res/res_calendar_ews.c

SVN commits to the Asterisk project asterisk-commits at lists.digium.com
Tue Sep 14 01:55:49 CDT 2010


Author: pitel
Date: Tue Sep 14 01:55:44 2010
New Revision: 286617

URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=286617
Log:
Merging events for Exchange web service doesn't work as expected, resulting in only one event in calendar

The solution is to use "global" counter of events, since we do new requests for every event and calendar sync after every request. So now we do sync only after last request.

(closes issue #17877)
Review: https://reviewboard.asterisk.org/r/916/

Modified:
    branches/1.8/res/res_calendar_ews.c

Modified: branches/1.8/res/res_calendar_ews.c
URL: http://svnview.digium.com/svn/asterisk/branches/1.8/res/res_calendar_ews.c?view=diff&rev=286617&r1=286616&r2=286617
==============================================================================
--- branches/1.8/res/res_calendar_ews.c (original)
+++ branches/1.8/res/res_calendar_ews.c Tue Sep 14 01:55:44 2010
@@ -102,6 +102,7 @@
 	ne_uri uri;
 	ne_session *session;
 	struct ao2_container *events;
+	unsigned int items;
 };
 
 static void ewscal_destructor(void *obj)
@@ -169,7 +170,7 @@
 {
 	struct xml_context *ctx = userdata;
 
-	ast_debug(3, "EWS: XML: Start: %s\n", name);
+	ast_debug(5, "EWS: XML: Start: %s\n", name);
 	if (ctx->op == XML_OP_CREATE) {
 		return NE_XML_DECLINE;
 	}
@@ -187,16 +188,17 @@
 		return 1;
 	} else if (!strcmp(name, "RootFolder")) {
 		/* Get number of events */
-		int items;
+		unsigned int items;
 
 		ast_debug(3, "EWS: XML: <RootFolder>\n");
-		if (sscanf(ne_xml_get_attr(ctx->parser, atts, NULL, "TotalItemsInView"), "%d", &items) != 1) {
+		if (sscanf(ne_xml_get_attr(ctx->parser, atts, NULL, "TotalItemsInView"), "%u", &items) != 1) {
 			/* Couldn't read enything */
 			ne_xml_set_error(ctx->parser, "Could't read number of events.");
 			return NE_XML_ABORT;
 		}
 
 		ast_debug(3, "EWS: %d calendar items to load\n", items);
+		ctx->pvt->items = items;
 		if (items < 1) {
 			/* Stop processing XML if there are no events */
 			return NE_XML_DECLINE;
@@ -434,8 +436,11 @@
 		}
 	} else if (!strcmp(name, "Envelope")) {
 		/* Events end */
-		ast_debug(3, "EWS: XML: All events has been parsed, merging…\n");
-		ast_calendar_merge_events(ctx->pvt->owner, ctx->pvt->events);
+		ast_debug(3, "EWS: XML: %d of %d event(s) has been parsed…\n", ao2_container_count(ctx->pvt->events), ctx->pvt->items);
+		if (ao2_container_count(ctx->pvt->events) >= ctx->pvt->items) {
+			ast_debug(3, "EWS: XML: All events has been parsed, merging…\n");
+			ast_calendar_merge_events(ctx->pvt->owner, ctx->pvt->events);
+		}
 	}
 
 	return 0;




More information about the asterisk-commits mailing list