app_queue: Add announce-position-only-up option
authorSean Bright <sean.bright@gmail.com>
Wed, 26 Jul 2017 14:27:00 +0000 (10:27 -0400)
committerGeorge Joseph <gjoseph@digium.com>
Tue, 1 Aug 2017 21:42:37 +0000 (15:42 -0600)
Setting this option will cause the Queue application to only announce
the caller's position if it has improved since the last time that we
announced it.

Change-Id: I173a124121422209485b043e2bf784f54242fce6

CHANGES
apps/app_queue.c
configs/samples/queues.conf.sample

diff --git a/CHANGES b/CHANGES
index 1721ed1..fb54ca6 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -17,6 +17,11 @@ app_queue
  * PAUSEALL/UNPAUSEALL now sets the pause reason in the queue_log if it has
    been defined.
 
+ * A new option, "announce-position-only-up," has been added that, when set to
+   yes, causes position announcements to only be played when the caller's
+   queue position has improved since the last time that we annouced their
+   position. This default is no.
+
 ------------------------------------------------------------------------------
 --- Functionality changes from Asterisk 14.6.0 to Asterisk 14.7.0 ------------
 ------------------------------------------------------------------------------
index 762119e..f297dad 100644 (file)
@@ -1683,6 +1683,7 @@ struct call_queue {
        unsigned int timeoutrestart:1;
        unsigned int announceholdtime:2;
        unsigned int announceposition:3;
+       unsigned int announceposition_only_up:1; /*!< Only announce position if it has improved */
        int strategy:4;
        unsigned int realtime:1;
        unsigned int found:1;
@@ -2722,6 +2723,7 @@ static void init_queue(struct call_queue *q)
        q->announcefrequency = 0;
        q->minannouncefrequency = DEFAULT_MIN_ANNOUNCE_FREQUENCY;
        q->announceholdtime = 1;
+       q->announceposition_only_up = 0;
        q->announcepositionlimit = 10; /* Default 10 positions */
        q->announceposition = ANNOUNCEPOSITION_YES; /* Default yes */
        q->roundingseconds = 0; /* Default - don't announce seconds */
@@ -3171,6 +3173,8 @@ static void queue_set_param(struct call_queue *q, const char *param, const char
                } else {
                        q->announceposition = ANNOUNCEPOSITION_NO;
                }
+       } else if (!strcasecmp(param, "announce-position-only-up")) {
+               q->announceposition_only_up = ast_true(val);
        } else if (!strcasecmp(param, "announce-position-limit")) {
                q->announcepositionlimit = atoi(val);
        } else if (!strcasecmp(param, "periodic-announce")) {
@@ -3911,6 +3915,11 @@ static int say_position(struct queue_ent *qe, int ringing)
                return 0;
        }
 
+       /* Only announce if the caller's queue position has improved since last time */
+       if (qe->parent->announceposition_only_up && qe->last_pos_said <= qe->pos) {
+               return 0;
+       }
+
        if (ringing) {
                ast_indicate(qe->chan,-1);
        } else {
index b34a8d8..3e7cbd8 100644 (file)
@@ -345,6 +345,11 @@ monitor-type = MixMonitor
 ;
 ; announce-round-seconds = 10
 ;
+; Only announce the caller's position if it has improved since the last announcement.
+; The default value is no.
+;
+; announce-position-only-up = yes
+;
 ; Use these sound files in making position/holdtime announcements.  The
 ; defaults are as listed below -- change only if you need to.
 ;