Add voicemail to say # of minutes remaining (bug #2302)
authorMark Spencer <markster@digium.com>
Sat, 30 Oct 2004 20:49:42 +0000 (20:49 +0000)
committerMark Spencer <markster@digium.com>
Sat, 30 Oct 2004 20:49:42 +0000 (20:49 +0000)
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@4130 65c4cc65-6c06-0410-ace0-fbb531ad65f3

apps/app_voicemail.c
configs/voicemail.conf.sample
sounds.txt
sounds/vm-minutes.gsm [new file with mode: 0755]

index 424306c..0d4cc37 100755 (executable)
@@ -132,6 +132,8 @@ struct ast_vm_user {
        int envelope;
        int forcename;
        int forcegreetings;
+       int sayduration;
+       int saydurationm;
        struct ast_vm_user *next;
 };
 
@@ -245,6 +247,8 @@ static int calloper;
 static int saycidinfo;
 static int svmailinfo;
 static int hearenv;
+static int saydurationinfo;
+static int saydurationminfo;
 static int skipaftercmd;
 static int forcenm;
 static int forcegrt;
@@ -285,6 +289,10 @@ static void populate_defaults(struct ast_vm_user *vmu)
                vmu->svmail = 1; 
        if (hearenv)
                vmu->envelope = 1;
+       if (saydurationinfo)
+               vmu->sayduration = 1;
+       if (saydurationminfo>0)
+               vmu->saydurationm = saydurationminfo;
        if (forcenm)
                vmu->forcename = 1;
        if (forcegrt)
@@ -299,6 +307,7 @@ static void populate_defaults(struct ast_vm_user *vmu)
 
 static void apply_option(struct ast_vm_user *vmu, const char *var, const char *value)
 {
+       int x;
        if (!strcasecmp(var, "attach")) {
                if (ast_true(value))
                        vmu->attach = 1;
@@ -337,6 +346,17 @@ static void apply_option(struct ast_vm_user *vmu, const char *var, const char *v
                        vmu->envelope = 1;
                else
                        vmu->envelope = 0;
+       } else if (!strcasecmp(var, "sayduration")){
+               if(ast_true(value))
+                       vmu->sayduration = 1;
+               else
+                       vmu->sayduration = 0;
+       } else if (!strcasecmp(var, "saydurationm")){
+               if (sscanf(value, "%d", &x) == 1) {
+                       vmu->saydurationm = x;
+               } else {
+                       ast_log(LOG_WARNING, "Invalid min duration for say duration\n");
+               }
        } else if (!strcasecmp(var, "forcename")){
                if (ast_true(value))
                        vmu->forcename = 1;
@@ -2447,7 +2467,7 @@ static int play_message_callerid(struct ast_channel *chan, struct vm_state *vms,
                }
        } else {
                /* Number unknown */
-               ast_log(LOG_DEBUG, "VM-CID: From an unknown number");
+               ast_log(LOG_DEBUG, "VM-CID: From an unknown number\n");
                if (!res)
                        /* BB: Say "from an unknown caller" as one phrase - it is already recorded by "the voice" anyhow */
                        res = wait_file2(chan, vms, "vm-unknown-caller");
@@ -2455,10 +2475,32 @@ static int play_message_callerid(struct ast_channel *chan, struct vm_state *vms,
        return res;
 }
 
+static int play_message_duration(struct ast_channel *chan, struct vm_state *vms, char *duration, int minduration)
+{
+       int res = 0;
+       int durationm;
+       int durations;
+       /* Verify that we have a duration for the message */
+       if((duration == NULL))
+               return res;
+
+       /* Convert from seconds to minutes */
+       durations=atoi(duration);
+       durationm=(durations / 60);
+
+       ast_log(LOG_DEBUG, "VM-Duration: duration is: %d seconds converted to: %d minutes\n", durations, durationm);
+
+       if((!res)&&(durationm>=minduration)) {
+               res = ast_say_number(chan, durationm, AST_DIGIT_ANY, chan->language, (char *) NULL);
+               res = wait_file2(chan, vms, "vm-minutes");
+       }
+       return res;
+}
+
 static int play_message(struct ast_channel *chan, struct ast_vm_user *vmu, struct vm_state *vms)
 {
        int res = 0;
-       char filename[256],*origtime, *cid, *context;
+       char filename[256],*origtime, *cid, *context, *duration;
        struct ast_config *msg_cfg;
 
        vms->starting = 0; 
@@ -2489,6 +2531,7 @@ static int play_message(struct ast_channel *chan, struct ast_vm_user *vmu, struc
                return 0;
 
        cid = ast_variable_retrieve(msg_cfg, "message", "callerid");
+       duration = ast_variable_retrieve(msg_cfg, "message", "duration");
 
        context = ast_variable_retrieve(msg_cfg, "message", "context");
        if (!strncasecmp("macro",context,5)) /* Macro names in contexts are useless for our needs */
@@ -2498,6 +2541,8 @@ static int play_message(struct ast_channel *chan, struct ast_vm_user *vmu, struc
                res = play_message_datetime(chan, vmu, origtime, filename);
        if ((!res)&&(vmu->saycid))
                res = play_message_callerid(chan, vms, cid, context, 0);
+        if ((!res)&&(vmu->sayduration))
+                res = play_message_duration(chan, vms, duration, vmu->saydurationm);
        /* Allow pressing '1' to skip envelope / callerid */
        if (res == '1')
                res = 0;
@@ -3952,6 +3997,8 @@ static int load_config(void)
        char *astreview;
        char *astskipcmd;
        char *asthearenv;
+       char *astsaydurationinfo;
+       char *astsaydurationminfo;
        char *silencestr;
        char *thresholdstr;
        char *fmt;
@@ -4141,6 +4188,22 @@ static int load_config(void)
                }
                hearenv = ast_true(asthearenv); 
 
+               saydurationinfo = 0;
+               if (!(astsaydurationinfo = ast_variable_retrieve(cfg, "general", "sayduration"))) {
+                       ast_log(LOG_DEBUG,"Duration info before msg enabled globally\n");
+                       astsaydurationinfo = "yes";
+               }
+               saydurationinfo = ast_true(astsaydurationinfo); 
+
+               saydurationminfo = 2;
+               if ((astsaydurationminfo = ast_variable_retrieve(cfg, "general", "saydurationm"))) {
+                       if (sscanf(astsaydurationminfo, "%d", &x) == 1) {
+                               saydurationminfo = x;
+                       } else {
+                               ast_log(LOG_WARNING, "Invalid min duration for say duration\n");
+                       }
+               }
+
                skipaftercmd = 0;
                if (!(astskipcmd = ast_variable_retrieve(cfg, "general", "nextaftercmd"))) {
                        ast_log(LOG_DEBUG,"We are not going to skip to the next msg after save/delete\n");
index cee4a41..2713a79 100755 (executable)
@@ -106,6 +106,9 @@ maxlogins=3
 ; attach=yes           ; Attach the voicemail to the notification email *NOT* the pager email
 ; saycid=yes           ; Say the caller id information before the message. If not described, 
                        ;     or set to no, it will be in the envelope
+; cidinternalcontexts=intern   ; Internal Context for Name Playback instead of extension digits when saying caller id.
+; sayduration=no       ; Turn on/off the duration information before the message. [ON by default]
+; saydurationm=2        ; Specify the minimum duration to say. Default is 2 minutes
 ; dialout=fromvm       ; Context to dial out from [option 4 from the advanced menu]
                        ;     if not listed, dialing out will not be permitted
 sendvoicemail=yes      ; Context to Send voicemail from [option 5 from the advanced menu]
@@ -138,7 +141,7 @@ central24=America/Chicago|'vm-received' q 'digits/at' H 'digits/hundred' M 'hour
 ;4200 => 9855,Mark Spencer,markster@linux-support.net,mypager@digium.com,attach=no|serveremail=myaddy@digium.com|tz=central
 ;4300 => 3456,Ben Rigas,ben@american-computer.net
 ;4310 => -5432,Sales,sales@marko.net
-;4069 => 6522,Matt Brooks,matt@marko.net,,|tz=central|attach=yes|saycid=yes|dialout=fromvm|callback=fromvm|review=yes|operator=yes|envelope=yes
+;4069 => 6522,Matt Brooks,matt@marko.net,,|tz=central|attach=yes|saycid=yes|dialout=fromvm|callback=fromvm|review=yes|operator=yes|envelope=yes|sayduration=yes|saydurationm=1
 ;4073 => 1099,Bianca Paige,bianca@biancapaige.com,,delete=1
 ;4110 => 3443,Rob Flynn,rflynn@blueridge.net
 
index ff814ad..b6fcb77 100755 (executable)
 
 %vm-goodbye.gsm%Goodbye
  
-%vm-helpexit.gsm%Pres star for help or pound to exit.
+%vm-helpexit.gsm%Press star for help or pound to exit.
 
 %vm-INBOX.gsm%new
 
+%vm-minutes.gsm%minutes
+
 %vm-incorrect-mailbox.gsm%Login incorrect.  Mailbox?
 
 %vm-incorrect.gsm%Login incorrect.
diff --git a/sounds/vm-minutes.gsm b/sounds/vm-minutes.gsm
new file mode 100755 (executable)
index 0000000..e7053f7
Binary files /dev/null and b/sounds/vm-minutes.gsm differ