[asterisk-commits] alecdavis: branch 1.6.2 r251820 - in /branches/1.6.2: ./ apps/app_directory.c

SVN commits to the Asterisk project asterisk-commits at lists.digium.com
Thu Mar 11 01:48:19 CST 2010


Author: alecdavis
Date: Thu Mar 11 01:48:14 2010
New Revision: 251820

URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=251820
Log:
Merged revisions 251779 via svnmerge from 
https://origsvn.digium.com/svn/asterisk/trunk

........
  r251779 | alecdavis | 2010-03-11 20:03:51 +1300 (Thu, 11 Mar 2010) | 14 lines
  
  Add supporting code for app-directory pause option.
  
  Since 1.6.1 CLI help reports that option p(n) 'initial pause' is available.
  Supporting code was never implemented.
  
  (closes issue #16751)
  Reported by: alecdavis
  Patches: 
        directory_pause.trunk.diff.txt uploaded by alecdavis (license 585)
  Tested by: alecdavis
  
  Review: https://reviewboard.asterisk.org/r/481/
........

Modified:
    branches/1.6.2/   (props changed)
    branches/1.6.2/apps/app_directory.c

Propchange: branches/1.6.2/
------------------------------------------------------------------------------
Binary property 'trunk-merged' - no diff available.

Modified: branches/1.6.2/apps/app_directory.c
URL: http://svnview.digium.com/svn/asterisk/branches/1.6.2/apps/app_directory.c?view=diff&rev=251820&r1=251819&r2=251820
==============================================================================
--- branches/1.6.2/apps/app_directory.c (original)
+++ branches/1.6.2/apps/app_directory.c Thu Mar 11 01:48:14 2010
@@ -284,17 +284,35 @@
 	return 0;
 }
 
-static int select_item_seq(struct ast_channel *chan, struct directory_item **items, int count, const char *dialcontext, struct ast_flags *flags)
+static int select_item_pause(struct ast_channel *chan, struct ast_flags *flags, char *opts[])
+{
+	int res = 0, opt_pause = 0;
+
+	if (ast_test_flag(flags, OPT_PAUSE) && !ast_strlen_zero(opts[OPT_ARG_PAUSE])) {
+		opt_pause = atoi(opts[OPT_ARG_PAUSE]);
+		if (opt_pause > 3000) {
+			opt_pause = 3000;
+		}
+		res = ast_waitfordigit(chan, opt_pause);
+	}
+	return res;
+}
+
+static int select_item_seq(struct ast_channel *chan, struct directory_item **items, int count, const char *dialcontext, struct ast_flags *flags, char *opts[])
 {
 	struct directory_item *item, **ptr;
 	int i, res, loop;
 
+	/* option p(n): cellphone pause option */
+	/* allow early press of selection key */
+	res = select_item_pause(chan, flags, opts);
+
 	for (ptr = items, i = 0; i < count; i++, ptr++) {
 		item = *ptr;
 
 		for (loop = 3 ; loop > 0; loop--) {
-			res = play_mailbox_owner(chan, item->context, item->exten, item->name, flags);
-
+			if (!res)
+				res = play_mailbox_owner(chan, item->context, item->exten, item->name, flags);
 			if (!res)
 				res = ast_stream_and_wait(chan, "dir-instr", AST_DIGIT_ANY);
 			if (!res)
@@ -313,17 +331,21 @@
 
 			res = 0;
 		}
+		res = 0;
 	}
 
 	/* Nothing was selected */
 	return 0;
 }
 
-static int select_item_menu(struct ast_channel *chan, struct directory_item **items, int count, const char *dialcontext, struct ast_flags *flags)
+static int select_item_menu(struct ast_channel *chan, struct directory_item **items, int count, const char *dialcontext, struct ast_flags *flags, char *opts[])
 {
 	struct directory_item **block, *item;
 	int i, limit, res = 0;
 	char buf[9];
+
+	/* option p(n): cellphone pause option */
+	select_item_pause(chan, flags, opts);
 
 	for (block = items; count; block += limit, count -= limit) {
 		limit = count;
@@ -643,7 +665,7 @@
 	}
 }
 
-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)
+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 */
 	int res = 0;
@@ -700,10 +722,10 @@
 
 	if (ast_test_flag(flags, OPT_SELECTFROMMENU)) {
 		/* Offer multiple entries at the same time */
-		res = select_item_menu(chan, sorted, count, dialcontext, flags);
+		res = select_item_menu(chan, sorted, count, dialcontext, flags, opts);
 	} else {
 		/* Offer entries one by one */
-		res = select_item_seq(chan, sorted, count, dialcontext, flags);
+		res = select_item_seq(chan, sorted, count, dialcontext, flags, opts);
 	}
 
 	if (!res) {
@@ -819,7 +841,7 @@
 		if (res <= 0)
 			break;
 
-		res = do_directory(chan, cfg, ucfg, args.vmcontext, args.dialcontext, res, digit, &flags);
+		res = do_directory(chan, cfg, ucfg, args.vmcontext, args.dialcontext, res, digit, &flags, opts);
 		if (res)
 			break;
 




More information about the asterisk-commits mailing list