summaryrefslogtreecommitdiff
path: root/apps
diff options
context:
space:
mode:
authorSean Bright <sean.bright@gmail.com>2017-07-26 10:27:00 -0400
committerGeorge Joseph <gjoseph@digium.com>2017-08-01 15:39:25 -0600
commit1078d4f7f6cb0e68f135f96ebb43c2ea4c0f0905 (patch)
treecdd0b11f268e0ee1a2a446a0d9e8da2c0303a7bd /apps
parent63224d5d9ceef0c97b72127751029b59094c2334 (diff)
app_queue: Add announce-position-only-up option
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
Diffstat (limited to 'apps')
-rw-r--r--apps/app_queue.c9
1 files changed, 9 insertions, 0 deletions
diff --git a/apps/app_queue.c b/apps/app_queue.c
index 762119e94..f297dad8d 100644
--- a/apps/app_queue.c
+++ b/apps/app_queue.c
@@ -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 {