[asterisk-commits] mmichelson: trunk r109621 - in /trunk: ./ apps/ configs/

SVN commits to the Asterisk project asterisk-commits at lists.digium.com
Tue Mar 18 13:58:43 CDT 2008


Author: mmichelson
Date: Tue Mar 18 13:58:42 2008
New Revision: 109621

URL: http://svn.digium.com/view/asterisk?view=rev&rev=109621
Log:
Add option 'randomperiodicannounce' to queues.conf. Setting this will
allow the list of periodic announcments specified to be played in a random
order instead of being played sequentially.

(closes issue #6681)
Reported by: alt_phil
Tested by: putnopvut


Modified:
    trunk/CHANGES
    trunk/apps/app_queue.c
    trunk/configs/queues.conf.sample

Modified: trunk/CHANGES
URL: http://svn.digium.com/view/asterisk/trunk/CHANGES?view=diff&rev=109621&r1=109620&r2=109621
==============================================================================
--- trunk/CHANGES (original)
+++ trunk/CHANGES Tue Mar 18 13:58:42 2008
@@ -339,6 +339,9 @@
   * Added a new parameter for member definition, called state_interface. This may be
     used so that a member may be called via one interface but have a different interface's
     device state reported.
+  * New configuration option: randomperiodicannounce. If a list of periodic announcements is
+    specified by the periodic-announce option, then one will be chosen randomly when it is time
+	to play a periodic announcment
 
 MeetMe Changes
 --------------

Modified: trunk/apps/app_queue.c
URL: http://svn.digium.com/view/asterisk/trunk/apps/app_queue.c?view=diff&rev=109621&r1=109620&r2=109621
==============================================================================
--- trunk/apps/app_queue.c (original)
+++ trunk/apps/app_queue.c Tue Mar 18 13:58:42 2008
@@ -466,6 +466,8 @@
 	int announcefrequency;              /*!< How often to announce their position */
 	int minannouncefrequency;           /*!< The minimum number of seconds between position announcements (def. 15) */
 	int periodicannouncefrequency;      /*!< How often to play periodic announcement */
+	int numperiodicannounce;            /*!< The number of periodic announcements configured */
+	int randomperiodicannounce;         /*!< Are periodic announcments randomly chosen */
 	int roundingseconds;                /*!< How many seconds do we round to? */
 	int holdtime;                       /*!< Current avg holdtime, based on recursive boxcar filter */
 	int callscompleted;                 /*!< Number of queue calls completed */
@@ -935,6 +937,8 @@
 	q->weight = 0;
 	q->timeoutrestart = 0;
 	q->periodicannouncefrequency = 0;
+	q->randomperiodicannounce = 0;
+	q->numperiodicannounce = 0;
 	if (!q->members) {
 		if (q->strategy == QUEUE_STRATEGY_LINEAR)
 			/* linear strategy depends on order, so we have to place all members in a single bucket */
@@ -1237,11 +1241,15 @@
 				if (i == MAX_PERIODIC_ANNOUNCEMENTS)
 					break;
 			}
+			q->numperiodicannounce = i;
 		} else {
 			ast_str_set(&q->sound_periodicannounce[0], 0, "%s", val);
+			q->numperiodicannounce = 1;
 		}
 	} else if (!strcasecmp(param, "periodic-announce-frequency")) {
 		q->periodicannouncefrequency = atoi(val);
+	} else if (!strcasecmp(param, "random-periodic-announce")) {
+		q->randomperiodicannounce = ast_true(val);
 	} else if (!strcasecmp(param, "retry")) {
 		q->retry = atoi(val);
 		if (q->retry <= 0)
@@ -2388,10 +2396,10 @@
 		ast_moh_stop(qe->chan);
 
 	ast_verb(3, "Playing periodic announcement\n");
-
-	/* Check to make sure we have a sound file. If not, reset to the first sound file */
-	if (qe->last_periodic_announce_sound >= MAX_PERIODIC_ANNOUNCEMENTS || 
-		!qe->parent->sound_periodicannounce[qe->last_periodic_announce_sound] ||
+	
+	if (qe->parent->randomperiodicannounce) {
+		qe->last_periodic_announce_sound = ((unsigned long) ast_random()) % qe->parent->numperiodicannounce;
+	} else if (qe->last_periodic_announce_sound >= qe->parent->numperiodicannounce || 
 		ast_strlen_zero(qe->parent->sound_periodicannounce[qe->last_periodic_announce_sound]->str)) {
 		qe->last_periodic_announce_sound = 0;
 	}
@@ -2414,7 +2422,9 @@
 	qe->last_periodic_announce_time = now;
 
 	/* Update the current periodic announcement to the next announcement */
-	qe->last_periodic_announce_sound++;
+	if (!qe->parent->randomperiodicannounce) {
+		qe->last_periodic_announce_sound++;
+	}
 	
 	return res;
 }

Modified: trunk/configs/queues.conf.sample
URL: http://svn.digium.com/view/asterisk/trunk/configs/queues.conf.sample?view=diff&rev=109621&r1=109620&r2=109621
==============================================================================
--- trunk/configs/queues.conf.sample (original)
+++ trunk/configs/queues.conf.sample Tue Mar 18 13:58:42 2008
@@ -210,6 +210,10 @@
 ;
 ;periodic-announce-frequency=60
 ;
+; Should the periodic announcements be played in a random order? Default is no.
+;
+;random-periodic-announce=no
+;
 ; Should we include estimated hold time in position announcements?
 ; Either yes, no, or only once.
 ; Hold time will be announced as the estimated time.




More information about the asterisk-commits mailing list