]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
Fix VM snapshot handling for combined INBOX.
authorJason Parker <jparker@digium.com>
Wed, 15 May 2013 14:25:08 +0000 (14:25 +0000)
committerJason Parker <jparker@digium.com>
Wed, 15 May 2013 14:25:08 +0000 (14:25 +0000)
The snapshot API contains an option that allow for combining of new
and old messages within a single snapshot. New messages, however,
include options beyond just 'INBOX' - it also includes the Urgent
folder. A previous patch that combined INBOX and Urgent accidentally
impacted snapshots that attempted to gain messages from just the Old
folder. This patch fixes the snapshot gathering such that the API
returns the appropriate messages for the folder selected, with and
without the combine option.

This should make it more clear about what's happening.

Review: https://reviewboard.asterisk.org/r/2539/

git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/10-digiumphones@388815 65c4cc65-6c06-0410-ace0-fbb531ad65f3

apps/app_voicemail.c

index ad63432093dd1bda41a6e88a00e4a1216e53dfe7..82e8edfb0954d1b5eccafaf2673faa3c186582d6 100644 (file)
@@ -14436,17 +14436,20 @@ 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;
-               if ((i == old_index) && (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)) {
-                       continue;
+               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));
@@ -14463,7 +14466,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;
                        }