]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
app_voicemail: Process urgent messages with mailcmd
authorSean Bright <sean.bright@gmail.com>
Fri, 21 Aug 2020 14:17:59 +0000 (10:17 -0400)
committerFriendly Automation <jenkins2@gerrit.asterisk.org>
Tue, 25 Aug 2020 21:38:14 +0000 (16:38 -0500)
Rather than putting messages into INBOX and then moving them to Urgent
later, put them directly in to the Urgent folder. This prevents
mailcmd from being skipped.

ASTERISK-27273 #close

Change-Id: I49934e093290d308506ab8d45a40ef705c5ae4f5

apps/app_voicemail.c

index e7e0a5c0fa1489d24b81a8bc34fdbb638a8df893..742c9c36eb41e64c41b3f0349176635eba8f20be 100644 (file)
@@ -6660,8 +6660,6 @@ static int leave_voicemail(struct ast_channel *chan, char *ext, struct leave_vm_
 {
 #ifdef IMAP_STORAGE
        int newmsgs, oldmsgs;
-#else
-       char urgdir[PATH_MAX];
 #endif
        char txtfile[PATH_MAX];
        char tmptxtfile[PATH_MAX];
@@ -7080,6 +7078,14 @@ static int leave_voicemail(struct ast_channel *chan, char *ext, struct leave_vm_
                }
                res = play_record_review(chan, NULL, tmptxtfile, vmu->maxsecs, fmt, 1, vmu, &duration, &sound_duration, NULL, options->record_gain, vms, flag, msg_id, 0);
 
+               /* At this point, either we were instructed to make the message Urgent
+                  by arguments to VoiceMail or during the review process by the person
+                  leaving the message. So we update the directory where we want this
+                  message to go. */
+               if (!strcmp(flag, "Urgent")) {
+                       create_dirpath(dir, sizeof(dir), vmu->context, ext, "Urgent");
+               }
+
                if (txt) {
                        fprintf(txt, "flag=%s\n", flag);
                        if (sound_duration < vmu->minsecs) {
@@ -7160,25 +7166,7 @@ static int leave_voicemail(struct ast_channel *chan, char *ext, struct leave_vm_
                                                        free_user(recip);
                                                }
                                        }
-#ifndef IMAP_STORAGE
-                                       if (!ast_strlen_zero(flag) && !strcmp(flag, "Urgent")) { /* If this is an Urgent message */
-                                               /* Move the message from INBOX to Urgent folder if this is urgent! */
-                                               char sfn[PATH_MAX];
-                                               char dfn[PATH_MAX];
-                                               int x;
-                                               /* It's easier just to try to make it than to check for its existence */
-                                               create_dirpath(urgdir, sizeof(urgdir), vmu->context, ext, "Urgent");
-                                               x = last_message_index(vmu, urgdir) + 1;
-                                               make_file(sfn, sizeof(sfn), dir, msgnum);
-                                               make_file(dfn, sizeof(dfn), urgdir, x);
-                                               ast_debug(5, "Created an Urgent message, moving file from %s to %s.\n", sfn, dfn);
-                                               RENAME(dir, msgnum, vmu->mailbox, vmu->context, urgdir, x, sfn, dfn);
-                                               /* Notification must happen for this new message in Urgent folder, not INBOX */
-                                               ast_copy_string(fn, dfn, sizeof(fn));
-                                               pbx_builtin_setvar_helper(chan, "VM_MESSAGEFILE", fn);
-                                               msgnum = x;
-                                       }
-#endif
+
                                        /* Notification needs to happen after the copy, though. */
                                        if (ast_fileexists(fn, NULL, NULL)) {
 #ifdef IMAP_STORAGE