]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
IMAP storage functioned under the assumption that folders
authorMark Michelson <mmichelson@digium.com>
Fri, 1 Aug 2008 14:29:48 +0000 (14:29 +0000)
committerMark Michelson <mmichelson@digium.com>
Fri, 1 Aug 2008 14:29:48 +0000 (14:29 +0000)
such as "Work" and "Family" would be subfolders of the
INBOX. This is an invalid assumption to make, but it could
be desirable to set up folders in this manner, so a new
option for voicemail.conf, "imapparentfolder" has been
added to allow for this.

(closes issue #13142)
Reported by: jaroth
Patches:
      parentfolder.patch uploaded by jaroth (license 50)

git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@135067 65c4cc65-6c06-0410-ace0-fbb531ad65f3

apps/app_voicemail.c
configs/voicemail.conf.sample

index 8a7b2aaeeac369aaf826846620b8c185585716dc..17f5e376763b413ea4123b07563f823bda70e784 100644 (file)
@@ -125,6 +125,7 @@ static char imapserver[48];
 static char imapport[8];
 static char imapflags[128];
 static char imapfolder[64];
+static char imapparentfolder[64] = "\0";
 static char greetingfolder[64];
 static char authuser[32];
 static char authpassword[42];
@@ -5986,8 +5987,13 @@ static void imap_mailbox_name(char *spec, size_t len, struct vm_state *vms, int
                snprintf(spec, len, "%s%s", tmp, use_folder? imapfolder: "INBOX");
        else if (box == GREETINGS_FOLDER)
                snprintf(spec, len, "%s%s", tmp, greetingfolder);
-       else
-               snprintf(spec, len, "%s%s%c%s", tmp, imapfolder, delimiter, mbox(box));
+       else    /* Other folders such as Friends, Family, etc... */
+               if (!ast_strlen_zero(imapparentfolder)) {
+                       /* imapparentfolder would typically be set to INBOX */
+                       snprintf(spec, len, "%s%s%c%s", tmp, imapparentfolder, delimiter, mbox(box));
+               } else {
+                       snprintf(spec, len, "%s%s", tmp, mbox(box));
+               }
 }
 
 static int init_mailstream(struct vm_state *vms, int box)
@@ -9577,6 +9583,7 @@ static int load_config(int reload)
                ucfg = ast_config_load("users.conf", config_flags);
        }
 
+       ast_copy_string(imapparentfolder, "\0", sizeof(imapparentfolder));
        /* set audio control prompts */
        strcpy(listen_control_forward_key,DEFAULT_LISTEN_CONTROL_FORWARD_KEY);
        strcpy(listen_control_reverse_key,DEFAULT_LISTEN_CONTROL_REVERSE_KEY);
@@ -9731,6 +9738,9 @@ static int load_config(int reload)
                } else {
                        ast_copy_string(imapfolder,"INBOX", sizeof(imapfolder));
                }
+               if ((val = ast_variable_retrieve(cfg, "general", "imapparentfolder"))) {
+                       ast_copy_string(imapparentfolder, val, sizeof(imapparentfolder));
+               }
                if ((val = ast_variable_retrieve(cfg, "general", "imapgreetings"))) {
                        imapgreetings = ast_true(val);
                } else {
index d2213c56344f90ec44e7880264097c9140d47924..67c349d5e90bfd963b2ebd8a9e674659a2589e37 100644 (file)
@@ -156,6 +156,11 @@ emaildateformat=%A, %B %d, %Y at %r
 ; If imapgreetings=yes, then specify which folder to store your greetings in. If
 ; you do not specify a folder, then INBOX will be used
 ;greetingsfolder=INBOX
+; Some IMAP server implementations store folders under INBOX instead of 
+; using a top level folder (ex. INBOX/Friends).  In this case, user
+; imapparentfolder to set the parent folder. For example, Cyrus IMAP does
+; NOT use INBOX as the parent. Default is to have no parent folder set.
+;imapparentfolder=INBOX
 ; 
 ; Users may be located in different timezones, or may have different 
 ; message announcements for their introductory message when they enter