diff --git a/CHANGES b/CHANGES index cbde563536..011ce8e702 100644 --- a/CHANGES +++ b/CHANGES @@ -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 fc1b238dd8..8a3756225c 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. - + time, in seconds since Jan 1, 1970. May be negative. Defaults to now. - + timezone, see /usr/share/zoneinfo for a list. Defaults to machine default. - + a format the time is to be said in. See voicemail.conf. Defaults to ABdY "digits/at" IMp + + + + + Uses some of the sound files stored in /var/lib/asterisk/sounds 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; + } + } - if (chan->_state != AST_STATE_UP) + ast_get_time_t(ast_strlen_zero(args.timeval) ? NULL : args.timeval, &unixtime, time(NULL), NULL); + + 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 4b03251011..e7817b3777 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"