main/say.c: Support future dates with Q and q format params

The current versions do not support future dates in all say application when using the 'Q' or 'q' format parameter and says "today" for everything that is greater than today

ASTERISK-29637

Change-Id: I1fb1cef0ce3c18d87b1fc94ea309d13bc344af02
This commit is contained in:
Shloime Rosenblum 2021-09-19 16:08:38 -04:00 committed by George Joseph
parent 6a04c43035
commit f3ff893310
1 changed files with 34 additions and 3 deletions

View File

@ -4510,7 +4510,22 @@ int ast_say_date_with_format_en(struct ast_channel *chan, time_t t, const char *
/* This might be slightly off, if we transcend a leap second, but never more off than 1 second */
/* In any case, it saves not having to do ast_mktime() */
beg_today = now.tv_sec - (tmnow.tm_hour * 3600) - (tmnow.tm_min * 60) - (tmnow.tm_sec);
if (beg_today < t) {
if (beg_today + 15768000 < t) {
/* More than 6 months from now - "April nineteenth two thousand three" */
res = ast_say_date_with_format_en(chan, t, ints, lang, "BdY", tzone);
} else if (beg_today + 2628000 < t) {
/* Less than 6 months from now - "August seventh" */
res = ast_say_date_with_format_en(chan, t, ints, lang, "Bd", tzone);
} else if (beg_today + 86400 * 6 < t) {
/* Less than a month from now - "Sunday, October third" */
res = ast_say_date_with_format_en(chan, t, ints, lang, "ABd", tzone);
} else if (beg_today + 172800 < t) {
/* Within the next week */
res = ast_say_date_with_format_en(chan, t, ints, lang, "A", tzone);
} else if (beg_today + 86400 < t) {
/* Tomorrow */
res = wait_file(chan, ints, "digits/tomorrow", lang);
} else if (beg_today < t) {
/* Today */
res = wait_file(chan, ints, "digits/today", lang);
} else if (beg_today - 86400 < t) {
@ -4546,9 +4561,25 @@ int ast_say_date_with_format_en(struct ast_channel *chan, time_t t, const char *
/* This might be slightly off, if we transcend a leap second, but never more off than 1 second */
/* In any case, it saves not having to do ast_mktime() */
beg_today = now.tv_sec - (tmnow.tm_hour * 3600) - (tmnow.tm_min * 60) - (tmnow.tm_sec);
if (beg_today < t) {
if (beg_today + 15768000 < t) {
/* More than 6 months from now - "April nineteenth two thousand three" */
res = ast_say_date_with_format_en(chan, t, ints, lang, "BdY", tzone);
} else if (beg_today + 2628000 < t) {
/* Less than 6 months from now - "August seventh" */
res = ast_say_date_with_format_en(chan, t, ints, lang, "Bd", tzone);
} else if (beg_today + 86400 * 6 < t) {
/* Less than a month from now - "Sunday, October third" */
res = ast_say_date_with_format_en(chan, t, ints, lang, "ABd", tzone);
} else if (beg_today + 172800 < t) {
/* Within the next week */
res = ast_say_date_with_format_en(chan, t, ints, lang, "A", tzone);
} else if (beg_today + 86400 < t) {
/* Tomorrow */
res = wait_file(chan, ints, "digits/tomorrow", lang);
} else if (beg_today < t) {
/* Today */
} else if ((beg_today - 86400) < t) {
res = wait_file(chan, ints, "digits/today", lang);
} else if (beg_today - 86400 < t) {
/* Yesterday */
res = wait_file(chan, ints, "digits/yesterday", lang);
} else if (beg_today - 86400 * 6 < t) {