diff options
-rw-r--r-- | CHANGES | 9 | ||||
-rw-r--r-- | apps/app_sayunixtime.c | 57 | ||||
-rw-r--r-- | include/asterisk/file.h | 1 |
3 files changed, 57 insertions, 10 deletions
@@ -45,6 +45,15 @@ Queue changes * Added queue options autopausebusy and autopauseunavail for automatically pausing a queue member when their device reports busy or congestion. +Applications +------------ + * Added 'j' option to SayUnixTime. SayUnixTime no longer auto jumps to extension + when receiving DTMF. Use the 'j' option to enable extension jumping. Also + changed arguments to SayUnixTime so that every option is truly optional even + when using multiple options (so that j option could be used without having to + manually specify timezone and format) There are other beneftis eg. format can + now be used without specifying time zone as well. + CDR postgresql driver changes ----------------------------- * Added command "cdr show pgsql status" to check connection status diff --git a/apps/app_sayunixtime.c b/apps/app_sayunixtime.c index fc1b238dd..8a3756225 100644 --- a/apps/app_sayunixtime.c +++ b/apps/app_sayunixtime.c @@ -46,16 +46,23 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$") Says a specified time in a custom format. </synopsis> <syntax> - <parameter name="unixtime"> + <parameter name="unixtime" required="false"> <para>time, in seconds since Jan 1, 1970. May be negative. Defaults to now.</para> </parameter> - <parameter name="timezone"> + <parameter name="timezone" required="false" > <para>timezone, see <directory>/usr/share/zoneinfo</directory> for a list. Defaults to machine default.</para> </parameter> - <parameter name="format"> + <parameter name="format" required="false" > <para>a format the time is to be said in. See <filename>voicemail.conf</filename>. Defaults to <literal>ABdY "digits/at" IMp</literal></para> </parameter> + <parameter name="options" required="false"> + <optionlist> + <option name="j"> + <para>Allow the calling user to dial digits to jump to that extension.</para> + </option> + </optionlist> + </parameter> </syntax> <description> <para>Uses some of the sound files stored in <directory>/var/lib/asterisk/sounds</directory> to construct a phrase @@ -90,6 +97,20 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$") ***/ +enum { + OPT_JUMP = (1 << 0), +}; + +enum { + OPT_ARG_JUMP = 0, + /* note: this entry _MUST_ be the last one in the enum */ + OPT_ARG_ARRAY_SIZE, +}; + +AST_APP_OPTIONS(sayunixtime_exec_options, BEGIN_OPTIONS + AST_APP_OPTION_ARG('j', OPT_JUMP, OPT_ARG_JUMP), +END_OPTIONS ); + static char *app_sayunixtime = "SayUnixTime"; static char *app_datetime = "DateTime"; @@ -99,26 +120,42 @@ static int sayunixtime_exec(struct ast_channel *chan, const char *data) AST_APP_ARG(timeval); AST_APP_ARG(timezone); AST_APP_ARG(format); + AST_APP_ARG(options); ); char *parse; int res = 0; time_t unixtime; - - if (!data) + /* New default behavior is do not jump on key pressed */ + const char * haltondigits = AST_DIGIT_NONE; + struct ast_flags64 opts = { 0, }; + char *opt_args[OPT_ARG_ARRAY_SIZE]; + + if (!data) { return 0; + } parse = ast_strdupa(data); AST_STANDARD_APP_ARGS(args, parse); - ast_get_time_t(args.timeval, &unixtime, time(NULL), NULL); + /* check if we had the 'j' jump flag in option list */ + if (!ast_strlen_zero(args.options)) { + ast_app_parse_options64(sayunixtime_exec_options, &opts, opt_args, args.options); + if (ast_test_flag64(&opts, OPT_JUMP)){ + haltondigits = AST_DIGIT_ANY; + } + } + + ast_get_time_t(ast_strlen_zero(args.timeval) ? NULL : args.timeval, &unixtime, time(NULL), NULL); - if (chan->_state != AST_STATE_UP) + if (chan->_state != AST_STATE_UP) { res = ast_answer(chan); + } - if (!res) - res = ast_say_date_with_format(chan, unixtime, AST_DIGIT_ANY, - chan->language, args.format, args.timezone); + if (!res) { + res = ast_say_date_with_format(chan, unixtime, haltondigits, + chan->language, ast_strlen_zero(args.format) ? NULL : args.format, ast_strlen_zero(args.timezone) ? NULL : args.timezone); + } return res; } diff --git a/include/asterisk/file.h b/include/asterisk/file.h index 4b0325101..e7817b377 100644 --- a/include/asterisk/file.h +++ b/include/asterisk/file.h @@ -44,6 +44,7 @@ struct ast_format; #define AST_MAX_FORMATS 10 /*! Convenient for waiting */ +#define AST_DIGIT_NONE "" #define AST_DIGIT_ANY "0123456789#*ABCD" #define AST_DIGIT_ANYNUM "0123456789" |