From 6b9a7dfb5de47bab0c80c02b4a0ddbda3514ce2a Mon Sep 17 00:00:00 2001 From: Sean Bright Date: Fri, 21 Aug 2020 10:17:59 -0400 Subject: [PATCH] app_voicemail: Process urgent messages with mailcmd 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 | 30 +++++++++--------------------- 1 file changed, 9 insertions(+), 21 deletions(-) diff --git a/apps/app_voicemail.c b/apps/app_voicemail.c index 0bd357b4bd..52c2664b73 100644 --- a/apps/app_voicemail.c +++ b/apps/app_voicemail.c @@ -6627,8 +6627,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]; @@ -7047,6 +7045,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) { @@ -7127,25 +7133,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 -- 2.47.2