diff --git a/apps/app_voicemail.c b/apps/app_voicemail.c index 1d53a674f6fc15c82d66a606719512062bb1131d..13bcd3ea57dbe881e93e26bc66d63359fd0f224e 100644 --- a/apps/app_voicemail.c +++ b/apps/app_voicemail.c @@ -15118,26 +15118,22 @@ static struct ast_vm_mailbox_snapshot *vm_mailbox_snapshot_create(const char *ma mailbox_snapshot->folders = ARRAY_LEN(mailbox_folders); for (i = 0; i < mailbox_snapshot->folders; i++) { - int combining_old = 0; - /* Assume we are combining folders if: - * - The current index is the old folder index OR - * - The current index is urgent and we were looking for INBOX or all folders OR - * - The current index is INBOX and we were looking for Urgent or all folders - */ - if ((i == old_index || - (i == urgent_index && (this_index_only == inbox_index || this_index_only == -1)) || - (i == inbox_index && (this_index_only == urgent_index || this_index_only == -1))) && (combine_INBOX_and_OLD)) { - combining_old = 1; - } + int msg_folder_index = i; - /* This if statement is confusing looking. Here is what it means in english. - * - If a folder is given to the function and that folder's index is not the one we are iterating over, skip it... - * - Unless the folder provided is the INBOX folder and the current index is the OLD folder and we are combining OLD and INBOX msgs. + /* We want this message in the snapshot if any of the following: + * No folder was specified. + * The specified folder matches the current folder. + * The specified folder is INBOX AND we were asked to combine messages AND the current folder is either Old or Urgent. */ - if ((this_index_only != -1) && (this_index_only != i) && !(combining_old && i == old_index && this_index_only == inbox_index)) { + if (!(this_index_only == -1 || this_index_only == i || (this_index_only == inbox_index && combine_INBOX_and_OLD && (i == old_index || i == urgent_index)))) { continue; } + /* Make sure that Old or Urgent messages are marked as being in INBOX. */ + if (combine_INBOX_and_OLD && (i == old_index || i == urgent_index)) { + msg_folder_index = inbox_index; + } + memset(&vms, 0, sizeof(vms)); ast_copy_string(vms.username, mailbox, sizeof(vms.username)); vms.lastmsg = -1; @@ -15152,7 +15148,7 @@ static struct ast_vm_mailbox_snapshot *vm_mailbox_snapshot_create(const char *ma /* Iterate through each msg, storing off info */ if (vms.lastmsg != -1) { - if ((vm_msg_snapshot_create(vmu, &vms, mailbox_snapshot, combining_old ? inbox_index : i, i, descending, sort_val))) { + if ((vm_msg_snapshot_create(vmu, &vms, mailbox_snapshot, msg_folder_index, i, descending, sort_val))) { ast_log(LOG_WARNING, "Failed to create msg snapshots for %s@%s\n", mailbox, context); goto snapshot_cleanup; }