diff --git a/apps/app_voicemail.c b/apps/app_voicemail.c index 73813dfe91037b0deb23bd9a32b7ceb695dc1de0..cc96a1c28ec3098c29352091b518a7231d0278f5 100644 --- a/apps/app_voicemail.c +++ b/apps/app_voicemail.c @@ -6576,8 +6576,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]; @@ -6996,6 +6994,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) { @@ -7076,25 +7082,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