Add temporary greetings to voicemail (bug #2360)
authorRussell Bryant <russell@russellbryant.com>
Thu, 25 Nov 2004 06:48:26 +0000 (06:48 +0000)
committerRussell Bryant <russell@russellbryant.com>
Thu, 25 Nov 2004 06:48:26 +0000 (06:48 +0000)
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@4335 65c4cc65-6c06-0410-ace0-fbb531ad65f3

apps/app_voicemail.c
sounds.txt
sounds/vm-options.gsm
sounds/vm-rec-temp.gsm [new file with mode: 0755]
sounds/vm-tempgreeting.gsm [new file with mode: 0755]
sounds/vm-tempgreeting2.gsm [new file with mode: 0755]
sounds/vm-tempremoved.gsm [new file with mode: 0755]

index 8067011..bfe4ddb 100755 (executable)
@@ -176,6 +176,7 @@ static int advanced_options(struct ast_channel *chan, struct ast_vm_user *vmu, s
 static int dialout(struct ast_channel *chan, struct ast_vm_user *vmu, char *num, char *outgoing_context);
 static int play_record_review(struct ast_channel *chan, char *playfile, char *recordfile, int maxtime, char *fmt, int outsidecaller, struct ast_vm_user *vmu, int *duration);
 static int vm_delete(char *file);
+static int vm_tempgreeting(struct ast_channel *chan, struct ast_vm_user *vmu, struct vm_state *vms, char *fmtc);
 
 static char ext_pass_cmd[128];
 
@@ -1262,6 +1263,7 @@ static int leave_voicemail(struct ast_channel *chan, char *ext, int silent, int
        char dir[256];
        char fn[256];
        char prefile[256]="";
+       char tempfile[256]="";
        char ext_context[256] = "";
        char fmt[80];
        char *context;
@@ -1291,7 +1293,7 @@ static int leave_voicemail(struct ast_channel *chan, char *ext, int silent, int
                if (strcmp(vmu->context, "default"))
                        snprintf(ext_context, sizeof(ext_context), "%s@%s", ext, vmu->context);
                else
-                       strncpy(ext_context, vmu->context, sizeof(ext_context) - 1);
+                       strncpy(ext_context, vmu->context, sizeof(ext_context) - 1);            
                if (busy)
                        snprintf(prefile, sizeof(prefile), "voicemail/%s/%s/busy", vmu->context, ext);
                else if (unavail)
@@ -1329,8 +1331,12 @@ static int leave_voicemail(struct ast_channel *chan, char *ext, int silent, int
                        ausemacro = 1;
                }
 
+               snprintf(tempfile, sizeof(tempfile), "voicemail/%s/%s/temp", vmu->context, ext);
+
                /* Play the beginning intro if desired */
                if (!ast_strlen_zero(prefile)) {
+                       if (ast_fileexists(tempfile, NULL, NULL) > 0)
+                               strncpy(prefile, tempfile, sizeof(prefile) - 1);
                        if (ast_fileexists(prefile, NULL, NULL) > 0) {
                                if (ast_streamfile(chan, prefile, chan->language) > -1) 
                                        res = ast_waitstream(chan, ecodes);
@@ -3297,7 +3303,10 @@ static int vm_options(struct ast_channel *chan, struct ast_vm_user *vmu, struct
                        snprintf(prefile,sizeof(prefile),"voicemail/%s/%s/greet",vmu->context, vms->username);
                        cmd = play_record_review(chan,"vm-rec-name",prefile, maxgreet, fmtc, 0, vmu, &duration);
                        break;
-               case '4':
+               case '4': 
+                       cmd = vm_tempgreeting(chan, vmu, vms, fmtc);
+                       break;
+               case '5':
                        if (vmu->password[0] == '-') {
                                cmd = ast_play_and_wait(chan, "vm-no");
                                break;
@@ -3347,6 +3356,64 @@ static int vm_options(struct ast_channel *chan, struct ast_vm_user *vmu, struct
        return cmd;
 }
 
+static int vm_tempgreeting(struct ast_channel *chan, struct ast_vm_user *vmu, struct vm_state *vms, char *fmtc)
+{
+       int cmd = 0;
+       int retries = 0;
+       int duration = 0;
+       char prefile[256]="";
+       char buf[256];
+       int bytes=0;
+
+       if (adsi_available(chan))
+       {
+               bytes += adsi_logo(buf + bytes);
+               bytes += adsi_display(buf + bytes, ADSI_COMM_PAGE, 3, ADSI_JUST_CENT, 0, "Temp Greeting Menu", "");
+               bytes += adsi_display(buf + bytes, ADSI_COMM_PAGE, 4, ADSI_JUST_CENT, 0, "Not Done", "");
+               bytes += adsi_set_line(buf + bytes, ADSI_COMM_PAGE, 1);
+               bytes += adsi_voice_mode(buf + bytes, 0);
+               adsi_transmit_message(chan, buf, bytes, ADSI_MSG_DISPLAY);
+       }
+       snprintf(prefile,sizeof(prefile),"voicemail/%s/%s/temp",vmu->context, vms->username);
+       while((cmd >= 0) && (cmd != 't')) {
+               if (cmd)
+                       retries = 0;
+               if (ast_fileexists(prefile, NULL, NULL) > 0) {
+                       switch (cmd) {
+                       case '1':
+                               cmd = play_record_review(chan,"vm-rec-temp",prefile, maxgreet, fmtc, 0, vmu, &duration);
+                               break;
+                       case '2':
+                               ast_filedelete(prefile, NULL);
+                               ast_play_and_wait(chan,"vm-tempremoved");
+                               cmd = 't';      
+                               break;
+                       case '*': 
+                               cmd = 't';
+                               break;
+                       default:
+                               if (ast_fileexists(prefile, NULL, NULL) > 0) {
+                                       cmd = ast_play_and_wait(chan,"vm-tempgreeting2");
+                               } else {
+                                       cmd = ast_play_and_wait(chan,"vm-tempgreeting");
+                               } if (!cmd) {
+                                       cmd = ast_waitfordigit(chan,6000);
+                               } if (!cmd) {
+                                       retries++;
+                               } if (retries > 3) {
+                                       cmd = 't';
+                               }
+                       }
+               } else {
+                       play_record_review(chan,"vm-rec-temp",prefile, maxgreet, fmtc, 0, vmu, &duration);
+                       cmd = 't';      
+               }
+       }
+       if (cmd == 't')
+               cmd = 0;
+       return cmd;
+}
+
 /* Default English syntax */
 static int vm_browse_messages(struct ast_channel *chan, struct vm_state *vms, struct ast_vm_user *vmu)
 {
index ff4adba..411e661 100755 (executable)
 
 %vm-onefor.gsm%Press 1 for
 
-%vm-options.gsm%Press 1 to record your unavailable message, press 2 to record your busy message, press 3 to record your name, press 4 to change  your password, press star to return to the main menu.
+%vm-options.gsm%Press 1 to record your unavailable message, press 2 to record your busy message, press 3 to record your name, press 4 to record your temporary message, press 5 to change your password, press star to return to the main menu.
 
 %vm-opts.gsm%Press 2 to change folders, press zero for mailbox options.
 
 
 %vm-rec-unv.gsm%After the tone say your unavailable message and then press the pound key.
 
+%vm-rec-temp.gsm%After the tone, say your temporary message, and then press the pound key.
+
 %vm-reenterpassword.gsm%Please re-enter your password followed by the pound key.
 
 %vm-repeat.gsm%Press 5 to repeat the current message.
 
 %vm-sorry.gsm%I'm sorry I did not understand your response.
 
+%vm-tempgreeting.gsm%press 1 to record your temporary greeting
+
+%vm-tempgreeting2.gsm%press 1 to record your temporary greeting, or press 2 to erase your temporary greeting
+
+%vm-tempremoved.gsm%Your temporary greeting has been removed
+
 %vm-theperson.gsm%The person at extension
 
 %vm-tocancel.gsm%or pound to cancel.
index 0f18be0..a563527 100755 (executable)
Binary files a/sounds/vm-options.gsm and b/sounds/vm-options.gsm differ
diff --git a/sounds/vm-rec-temp.gsm b/sounds/vm-rec-temp.gsm
new file mode 100755 (executable)
index 0000000..53614ab
Binary files /dev/null and b/sounds/vm-rec-temp.gsm differ
diff --git a/sounds/vm-tempgreeting.gsm b/sounds/vm-tempgreeting.gsm
new file mode 100755 (executable)
index 0000000..16c07ed
Binary files /dev/null and b/sounds/vm-tempgreeting.gsm differ
diff --git a/sounds/vm-tempgreeting2.gsm b/sounds/vm-tempgreeting2.gsm
new file mode 100755 (executable)
index 0000000..fc0438d
Binary files /dev/null and b/sounds/vm-tempgreeting2.gsm differ
diff --git a/sounds/vm-tempremoved.gsm b/sounds/vm-tempremoved.gsm
new file mode 100755 (executable)
index 0000000..897233a
Binary files /dev/null and b/sounds/vm-tempremoved.gsm differ