[Asterisk-code-review] res calendar: Add support for fetching calendars when reloading (asterisk[master])

Anonymous Coward asteriskteam at digium.com
Tue Oct 11 19:22:24 CDT 2016


Anonymous Coward #1000019 has submitted this change and it was merged.

Change subject: res_calendar: Add support for fetching calendars when reloading
......................................................................


res_calendar: Add support for fetching calendars when reloading

We use a lot res_calendar, we are very happy with that, especially
because you use libical, the almost alone opensource library that
supports really ical format with all types of recurrency.

Nevertheless, some features are missed for our business use cases.

This first patch adds a new option in calendar.conf:
fetch_again_at_reload. Be my guest for a better name.

If it's true, when you'll launch "module reload res_calendar.so",
Asterisk will download again the calendar.

The business use case is that we have a WebUI with a scheduler planner,
we know when the calendars are modified.

For now, we need to define 1 minute of timeout to have a chance that
our user doesn't wait too long between the modification and the real
test.  But it generates a lot of useless HTTP traffic.


ASTERISK-26422 #close

Change-Id: I384b02ebfa42b142bbbd5b7221458c7f4dee7077
---
M configs/samples/calendar.conf.sample
M include/asterisk/calendar.h
M res/res_calendar.c
3 files changed, 7 insertions(+), 1 deletion(-)

Approvals:
  Mark Michelson: Looks good to me, approved
  Anonymous Coward #1000019: Verified
  Joshua Colp: Looks good to me, but someone else must approve



diff --git a/configs/samples/calendar.conf.sample b/configs/samples/calendar.conf.sample
index 82b8702..d87b3b2 100644
--- a/configs/samples/calendar.conf.sample
+++ b/configs/samples/calendar.conf.sample
@@ -6,6 +6,8 @@
 ;refresh = 15             ; refresh calendar every n minutes
 ;timeframe = 60           ; number of minutes of calendar data to pull for each refresh period
 ;                         ; should always be >= refresh
+;fetch_again_at_reload = no ; to reload the calendar content when the module is reloaded
+;
 ;
 ; You can set up res_calendar to execute a call upon an upcoming busy status
 ; The following fields are available from the ${CALENDAR_EVENT(<field>)} dialplan function:
diff --git a/include/asterisk/calendar.h b/include/asterisk/calendar.h
index da4af01..e9dcd88 100644
--- a/include/asterisk/calendar.h
+++ b/include/asterisk/calendar.h
@@ -129,6 +129,7 @@
 	int autoreminder;    /*!< If set, override any calendar_tech specific notification times and use this time (in mins) */
 	int notify_waittime; /*!< Maxiumum time to allow for a notification attempt */
 	int refresh;         /*!< When to refresh the calendar events */
+	int fetch_again_at_reload; /*!< To reload the calendar content when the module is reloaded */
 	int timeframe;       /*!< Span (in mins) of calendar data to pull with each request */
 	pthread_t thread;    /*!< The thread that the calendar is loaded/updated in */
 	ast_cond_t unload;
diff --git a/res/res_calendar.c b/res/res_calendar.c
index 6f6f711..029eceb 100644
--- a/res/res_calendar.c
+++ b/res/res_calendar.c
@@ -436,6 +436,7 @@
 	cal->refresh = 3600;
 	cal->timeframe = 60;
 	cal->notify_waittime = 30000;
+	cal->fetch_again_at_reload = 0;
 
 	for (v = ast_variable_browse(cfg, cat); v; v = v->next) {
 		if (!strcasecmp(v->name, "autoreminder")) {
@@ -457,6 +458,8 @@
 			ast_string_field_set(cal, notify_appdata, v->value);
 		} else if (!strcasecmp(v->name, "refresh")) {
 			cal->refresh = atoi(v->value);
+		} else if (!strcasecmp(v->name, "fetch_again_at_reload")) {
+			cal->fetch_again_at_reload = ast_true(v->value);
 		} else if (!strcasecmp(v->name, "timeframe")) {
 			cal->timeframe = atoi(v->value);
 		} else if (!strcasecmp(v->name, "setvar")) {
@@ -482,7 +485,7 @@
 		}
 	}
 
-	if (new_calendar) {
+	if (new_calendar || cal->fetch_again_at_reload) {
 		cal->thread = AST_PTHREADT_NULL;
 		ast_cond_init(&cal->unload, NULL);
 		ao2_link(calendars, cal);

-- 
To view, visit https://gerrit.asterisk.org/3998
To unsubscribe, visit https://gerrit.asterisk.org/settings

Gerrit-MessageType: merged
Gerrit-Change-Id: I384b02ebfa42b142bbbd5b7221458c7f4dee7077
Gerrit-PatchSet: 3
Gerrit-Project: asterisk
Gerrit-Branch: master
Gerrit-Owner: Ludovic Gasc (Eyepea) <gmludo at gmail.com>
Gerrit-Reviewer: Anonymous Coward #1000019
Gerrit-Reviewer: Joshua Colp <jcolp at digium.com>
Gerrit-Reviewer: Mark Michelson <mmichelson at digium.com>
Gerrit-Reviewer: Matt Jordan <mjordan at digium.com>



More information about the asterisk-code-review mailing list