]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
Merged revisions 263769 via svnmerge from
authorJeff Peeler <jpeeler@digium.com>
Tue, 18 May 2010 19:27:34 +0000 (19:27 +0000)
committerJeff Peeler <jpeeler@digium.com>
Tue, 18 May 2010 19:27:34 +0000 (19:27 +0000)
https://origsvn.digium.com/svn/asterisk/branches/1.4

........
  r263769 | jpeeler | 2010-05-18 13:54:58 -0500 (Tue, 18 May 2010) | 10 lines

  Modify directory name reading to be interrupted with operator or pound escape.

  In the case of accidentally entering the wrong first three letters for the
  reading, users could be very frustrated if the name listing is very long. This
  allows interrupting the reading by pressing 0 or #. 0 will attempt to execute
  a configured operator (o) extension and # will exit and proceed in the
  dialplan.

  ABE-2200
........

git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@263807 65c4cc65-6c06-0410-ace0-fbb531ad65f3

CHANGES
apps/app_directory.c

diff --git a/CHANGES b/CHANGES
index ff60c5fc8b0ae2eaec7e08e845466b387772b709..76ff1f9ef54ae9c53ba5b6af0764b89c492e9e19 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -571,6 +571,7 @@ Applications
  * Added ConfBridge dialplan application which does conference bridges without
    DAHDI. For information on its use, please see the output of
    "core show application ConfBridge" from the CLI.
+ * app_directory now allows exiting at any time using the operator or pound key.
 
 Miscellaneous
 -------------
index 81eb36acba862ec5017a39a860c5491afa9a0189..305bcdd7b39f503c06bf7af473ef5af887eba3c7 100644 (file)
@@ -244,6 +244,19 @@ static int compare(const char *text, const char *template)
        return 0;
 }
 
+static int goto_exten(struct ast_channel *chan, const char *dialcontext, char *ext)
+{
+       if (!ast_goto_if_exists(chan, dialcontext, ext, 1) ||
+               (!ast_strlen_zero(chan->macrocontext) &&
+               !ast_goto_if_exists(chan, chan->macrocontext, ext, 1))) {
+               return 0;
+       } else {
+               ast_log(LOG_WARNING, "Can't find extension '%s' in current context.  "
+                       "Not Exiting the Directory!\n", ext);
+               return -1;
+       }
+}
+
 /* play name of mailbox owner.
  * returns:  -1 for bad or missing extension
  *           '1' for selected entry from directory
@@ -324,11 +337,17 @@ static int select_item_seq(struct ast_channel *chan, struct directory_item **ite
                                res = ast_waitfordigit(chan, 3000);
                        ast_stopstream(chan);
        
-                       if (res == '1') { /* Name selected */
+                       if (res == '0') { /* operator selected */
+                               goto_exten(chan, dialcontext, "o");
+                               return '0';
+                       } else if (res == '1') { /* Name selected */
                                return select_entry(chan, dialcontext, item, flags) ? -1 : 1;
                        } else if (res == '*') {
                                /* Skip to next match in list */
                                break;
+                       } else if (res == '#') {
+                               /* Exit reading, continue in dialplan */
+                               return res;
                        }
 
                        if (res < 0)
@@ -657,19 +676,6 @@ static void sort_items(struct directory_item **sorted, int count)
        } while (reordered);
 }
 
-static int goto_exten(struct ast_channel *chan, const char *dialcontext, char *ext)
-{
-       if (!ast_goto_if_exists(chan, dialcontext, ext, 1) ||
-               (!ast_strlen_zero(chan->macrocontext) &&
-               !ast_goto_if_exists(chan, chan->macrocontext, ext, 1))) {
-               return 0;
-       } else {
-               ast_log(LOG_WARNING, "Can't find extension '%s' in current context.  "
-                       "Not Exiting the Directory!\n", ext);
-               return -1;
-       }
-}
-
 static int do_directory(struct ast_channel *chan, struct ast_config *vmcfg, struct ast_config *ucfg, char *context, char *dialcontext, char digit, int digits, struct ast_flags *flags, char *opts[])
 {
        /* Read in the first three digits..  "digit" is the first digit, already read */
@@ -783,6 +789,8 @@ static int directory_exec(struct ast_channel *chan, const char *data)
        dirintro = ast_variable_retrieve(cfg, args.vmcontext, "directoryintro");
        if (ast_strlen_zero(dirintro))
                dirintro = ast_variable_retrieve(cfg, "general", "directoryintro");
+       /* the above prompts probably should be modified to include 0 for dialing operator
+          and # for exiting (continues in dialplan) */
 
        if (ast_test_flag(&flags, OPT_LISTBYFIRSTNAME) && ast_test_flag(&flags, OPT_LISTBYLASTNAME)) {
                if (!ast_strlen_zero(opts[OPT_ARG_EITHER])) {