Index: apps/app_voicemail.c =================================================================== --- apps/app_voicemail.c (revision 103476) +++ apps/app_voicemail.c (working copy) @@ -662,7 +662,7 @@ signed char record_gain, struct vm_state *vms); static int vm_tempgreeting(struct ast_channel *chan, struct ast_vm_user *vmu, struct vm_state *vms, char *fmtc, signed char record_gain); static int vm_play_folder_name(struct ast_channel *chan, char *mbox); -static int notify_new_message(struct ast_channel *chan, struct ast_vm_user *vmu, int msgnum, long duration, char *fmt, char *cidnum, char *cidname); +static int notify_new_message(struct ast_channel *chan, struct ast_vm_user *vmu, struct vm_state *vms, int msgnum, long duration, char *fmt, char *cidnum, char *cidname); static void make_email_file(FILE *p, char *srcemail, struct ast_vm_user *vmu, int msgnum, char *context, char *mailbox, char *cidnum, char *cidname, char *attach, char *format, int duration, int attach_user_voicemail, struct ast_channel *chan, const char *category, int imap); static void apply_options(struct ast_vm_user *vmu, const char *options); static int is_valid_dtmf(const char *key); @@ -2841,7 +2841,7 @@ ast_log(LOG_ERROR, "Recipient mailbox %s@%s is full\n", recip->mailbox, recip->context); } ast_unlock_path(todir); - notify_new_message(chan, recip, recipmsgnum, duration, fmt, S_OR(chan->cid.cid_num, NULL), S_OR(chan->cid.cid_name, NULL)); + notify_new_message(chan, recip, NULL, recipmsgnum, duration, fmt, S_OR(chan->cid.cid_num, NULL), S_OR(chan->cid.cid_name, NULL)); return 0; } @@ -3403,7 +3403,7 @@ } /* Notification and disposal needs to happen after the copy, though. */ if (ast_fileexists(fn, NULL, NULL)) { - notify_new_message(chan, vmu, msgnum, duration, fmt, S_OR(chan->cid.cid_num, NULL), S_OR(chan->cid.cid_name, NULL)); + notify_new_message(chan, vmu, vms, msgnum, duration, fmt, S_OR(chan->cid.cid_num, NULL), S_OR(chan->cid.cid_name, NULL)); DISPOSE(dir, msgnum); } } @@ -4183,7 +4183,7 @@ AST_EVENT_IE_END); } -static int notify_new_message(struct ast_channel *chan, struct ast_vm_user *vmu, int msgnum, long duration, char *fmt, char *cidnum, char *cidname) +static int notify_new_message(struct ast_channel *chan, struct ast_vm_user *vmu, struct vm_state *vms, int msgnum, long duration, char *fmt, char *cidnum, char *cidname) { char todir[PATH_MAX], fn[PATH_MAX], ext_context[PATH_MAX], *stringp; int newmsgs = 0, oldmsgs = 0; @@ -4230,9 +4230,6 @@ if (ast_test_flag(vmu, VM_DELETE)) DELETE(todir, msgnum, fn); -#ifdef IMAP_STORAGE - DELETE(todir, msgnum, fn); -#endif /* Leave voicemail for someone */ if (ast_app_has_voicemail(ext_context, NULL)) ast_app_inboxcount(ext_context, &newmsgs, &oldmsgs); @@ -4241,6 +4238,14 @@ manager_event(EVENT_FLAG_CALL, "MessageWaiting", "Mailbox: %s@%s\r\nWaiting: %d\r\nNew: %d\r\nOld: %d\r\n", vmu->mailbox, vmu->context, ast_app_has_voicemail(ext_context, NULL), newmsgs, oldmsgs); run_externnotify(vmu->context, vmu->mailbox); + +#ifdef IMAP_STORAGE + DELETE(todir, msgnum, fn); /* Delete the file, but not the IMAP message */ + if (ast_test_flag(vmu, VM_DELETE)) { /* Delete the IMAP message if delete = yes */ + IMAP_DELETE(vms->curdir, vms->curmsg, vms->fn, vms); + vms->newmessages--; /* Fix new message count */ + } +#endif return 0; }