aboutsummaryrefslogtreecommitdiffstats
path: root/res
diff options
context:
space:
mode:
authorpitel <pitel@f38db490-d61c-443f-a65b-d21fe96a405b>2010-09-14 06:55:44 +0000
committerpitel <pitel@f38db490-d61c-443f-a65b-d21fe96a405b>2010-09-14 06:55:44 +0000
commit912245f6b92a4f88a44c07a9e91adc7c8ade1d43 (patch)
tree39d766864fe19eba8670adfcef830538f88a1444 /res
parent72de15b810bd0069d8322238817b2e015ead1e8b (diff)
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/ git-svn-id: http://svn.digium.com/svn/asterisk/branches/1.8@286617 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'res')
-rw-r--r--res/res_calendar_ews.c15
1 files changed, 10 insertions, 5 deletions
diff --git a/res/res_calendar_ews.c b/res/res_calendar_ews.c
index 840ca104e..504d156f7 100644
--- a/res/res_calendar_ews.c
+++ b/res/res_calendar_ews.c
@@ -102,6 +102,7 @@ struct ewscal_pvt {
ne_uri uri;
ne_session *session;
struct ao2_container *events;
+ unsigned int items;
};
static void ewscal_destructor(void *obj)
@@ -169,7 +170,7 @@ static int startelm(void *userdata, int parent, const char *nspace, const char *
{
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 @@ static int startelm(void *userdata, int parent, const char *nspace, const char *
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 @@ static int endelm(void *userdata, int state, const char *nspace, const char *nam
}
} 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;