diff options
author | Sean Bright <sean.bright@gmail.com> | 2017-09-13 15:08:39 -0400 |
---|---|---|
committer | Sean Bright <sean.bright@gmail.com> | 2017-09-13 15:46:43 -0400 |
commit | db785ddb92f10ab3d17736c5d0845c330e19cd6d (patch) | |
tree | 67f9c59198898b6245ff300dc69f7a1a36e1a798 /res/res_calendar.c | |
parent | 1aef4fe9df48c0fbbd344f1d2a03447d063c9ddb (diff) |
res_calendar: Various fixes
* The way that we were looking at XML elements for CalDAV was extremely
fragile, so use SAX2 for increased robustness.
* Don't complain about a 'channel' not be specified if autoreminder is
not set. Assume that if 'channel' is not set, we don't want to be
notified.
* Fix some truncated CLI output in 'calendar show calendar' and make the
'Autoreminder' description a bit more clear
ASTERISK-24588 #close
Reported by: Stefan Gofferje
ASTERISK-25523 #close
Reported by: Jesper
Change-Id: I200d11afca6a47e7d97888f286977e2e69874b2c
Diffstat (limited to 'res/res_calendar.c')
-rw-r--r-- | res/res_calendar.c | 23 |
1 files changed, 18 insertions, 5 deletions
diff --git a/res/res_calendar.c b/res/res_calendar.c index 298970a92..048f5e0ba 100644 --- a/res/res_calendar.c +++ b/res/res_calendar.c @@ -482,6 +482,13 @@ static struct ast_calendar *build_calendar(struct ast_config *cfg, const char *c } } + if (cal->autoreminder && ast_strlen_zero(cal->notify_channel)) { + ast_log(LOG_WARNING, + "You have set 'autoreminder' but not 'channel' for calendar '%s.' " + "Notifications will not occur.\n", + cal->name); + } + if (new_calendar) { cal->thread = AST_PTHREADT_NULL; ast_cond_init(&cal->unload, NULL); @@ -489,7 +496,7 @@ static struct ast_calendar *build_calendar(struct ast_config *cfg, const char *c if (ast_pthread_create(&cal->thread, NULL, cal->tech->load_calendar, cal)) { /* If we start failing to create threads, go ahead and return NULL * and the tech module will be unregistered - */ + */ ao2_unlink(calendars, cal); cal = unref_calendar(cal); } @@ -948,7 +955,7 @@ static int schedule_calendar_event(struct ast_calendar *cal, struct ast_calendar event = cmp_event ? cmp_event : old_event; ao2_lock(event); - if (!cmp_event || old_event->alarm != event->alarm) { + if (!ast_strlen_zero(cal->notify_channel) && (!cmp_event || old_event->alarm != event->alarm)) { changed = 1; if (cal->autoreminder) { alarm_notify_sched = (event->start - (60 * cal->autoreminder) - now.tv_sec) * 1000; @@ -957,7 +964,7 @@ static int schedule_calendar_event(struct ast_calendar *cal, struct ast_calendar } /* For now, send the notification if we missed it, but the meeting hasn't happened yet */ - if (event->start >= now.tv_sec) { + if (event->start >= now.tv_sec) { if (alarm_notify_sched <= 0) { alarm_notify_sched = 1; } @@ -1590,7 +1597,7 @@ static char *epoch_to_string(char *buf, size_t buflen, time_t epoch) static char *handle_show_calendar(struct ast_cli_entry *e, int cmd, struct ast_cli_args *a) { -#define FORMAT "%-17.17s : %-20.20s\n" +#define FORMAT "%-18.18s : %-20.20s\n" #define FORMAT2 "%-12.12s: %-40.60s\n" struct ao2_iterator i; struct ast_calendar *cal; @@ -1639,7 +1646,13 @@ static char *handle_show_calendar(struct ast_cli_entry *e, int cmd, struct ast_c ast_cli(a->fd, FORMAT, "Notify appdata", cal->notify_appdata); ast_cli(a->fd, "%-17.17s : %d\n", "Refresh time", cal->refresh); ast_cli(a->fd, "%-17.17s : %d\n", "Timeframe", cal->timeframe); - ast_cli(a->fd, "%-17.17s : %d\n", "Autoreminder", cal->autoreminder); + + if (cal->autoreminder) { + ast_cli(a->fd, "%-17.17s : %d minutes before event\n", "Autoreminder", cal->autoreminder); + } else { + ast_cli(a->fd, "%-17.17s : None\n", "Autoreminder"); + } + ast_cli(a->fd, "%s\n", "Events"); ast_cli(a->fd, "%s\n", "------"); |