aboutsummaryrefslogtreecommitdiffstats
path: root/apps
diff options
context:
space:
mode:
Diffstat (limited to 'apps')
-rw-r--r--apps/app_voicemail.c14
1 files changed, 8 insertions, 6 deletions
diff --git a/apps/app_voicemail.c b/apps/app_voicemail.c
index 74825f2ca..10c90a12a 100644
--- a/apps/app_voicemail.c
+++ b/apps/app_voicemail.c
@@ -148,7 +148,7 @@ AST_THREADSTORAGE(ts_vmstate);
static int init_mailstream(struct vm_state *vms, int box);
static void write_file(char *filename, char *buffer, unsigned long len);
static char *get_header_by_tag(char *header, char *tag, char *buf, size_t len);
-static void vm_imap_delete(int msgnum, struct ast_vm_user *vmu);
+static void vm_imap_delete(char *file, int msgnum, struct ast_vm_user *vmu);
static char *get_user_by_mailbox(char *mailbox, char *buf, size_t len);
static struct vm_state *get_vm_state_by_imapuser(const char *user, int interactive);
static struct vm_state *get_vm_state_by_mailbox(const char *mailbox, const char *context, int interactive);
@@ -469,7 +469,7 @@ static char odbc_table[80];
#define EXISTS(a,b,c,d) (ast_fileexists(c,NULL,d) > 0)
#define RENAME(a,b,c,d,e,f,g,h) (rename_file(g,h));
#define COPY(a,b,c,d,e,f,g,h) (copy_file(g,h));
-#define DELETE(a,b,c,d) (vm_imap_delete(b,d))
+#define DELETE(a,b,c,d) (vm_imap_delete(a,b,d))
#else
#define RETRIEVE(a,b,c,d)
#define DISPOSE(a,b)
@@ -1352,14 +1352,15 @@ static void free_user(struct ast_vm_user *vmu)
/* All IMAP-specific functions should go in this block. This
* keeps them from being spread out all over the code */
#ifdef IMAP_STORAGE
-static void vm_imap_delete(int msgnum, struct ast_vm_user *vmu)
+static void vm_imap_delete(char *file, int msgnum, struct ast_vm_user *vmu)
{
char arg[10];
struct vm_state *vms;
unsigned long messageNum;
- /* Greetings aren't stored in IMAP, so we can't delete them there */
- if (msgnum < 0) {
+ /* If greetings aren't stored in IMAP, just delete the file */
+ if (msgnum < 0 && !imapgreetings) {
+ ast_filedelete(file, NULL);
return;
}
@@ -1381,6 +1382,7 @@ static void vm_imap_delete(int msgnum, struct ast_vm_user *vmu)
snprintf (arg, sizeof(arg), "%lu",messageNum);
ast_mutex_lock(&vms->lock);
mail_setflag (vms->mailstream,arg,"\\DELETED");
+ mail_expunge(vms->mailstream);
ast_mutex_unlock(&vms->lock);
}
@@ -6302,7 +6304,7 @@ static int notify_new_message(struct ast_channel *chan, struct ast_vm_user *vmu,
#ifdef IMAP_STORAGE
vm_delete(fn); /* Delete the file, but not the IMAP message */
if (ast_test_flag(vmu, VM_DELETE)) { /* Delete the IMAP message if delete = yes */
- vm_imap_delete(vms->curmsg, vmu);
+ vm_imap_delete(NULL, vms->curmsg, vmu);
vms->newmessages--; /* Fix new message count */
}
#endif