summaryrefslogtreecommitdiff
path: root/res
diff options
context:
space:
mode:
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;