I realize this has come up several times and thought of in different ways.  
Recently in getting all of the fun fun imap code working I have been thinking 
all this ifdef and statically defined options etc is the wrong way to do 
things.  I think with one fairly well done chunk of code the rest of imap could 
be rewritten very simply.
First we need a generic storage api so main/storage  This would not take to 
much work as the majority of work is already there inside of app_voicemail.  
Then we abstract each storage type into store/store_local, store/store_odbc, 
store/store_imap.  also shouldnt be too difficult to move this code out of 
app_voicemail.
Then app_voicemail is just a handler for voicemail users and a loader of the 
default config file. voicemailmain and voicemail dialplan applications would 
just point to macros like this in your dial plan

[voicemail-default]
;;${ARG1} == User
;;${ARG2} == Context
;;${ARG3} == Password
;;${ARG4} == options
exten => s,1,playback(comedian-mail)
exten => s,2,VMAuthenticate([EMAIL PROTECTED]|${ARG3}|${ARG4}) ;; vmauthenicate 
doesnt accept pass currently but it could.
exten => s,3,goto(voicemail-menu,s,1)

[voicemail-menu]
exten => s,1,background(press-1-for-new-messages)
exten => s,2,background(press-2-to-change-folders)
exten => s,3,background(press-0-for-mailbox-options)
exten => s,4,background(press-*-for-help)
exten => s,5,background(or-pound-to-exit)

exten => 1,1,goto(voicemail-playback-menu)

exten => 2,1,goto(voicemail-folder-choice-menu)

exten => 0,1,goto(voicemail-options-menu)

exten => *,1,playback(voicemail-help)
exten => *,2,goto(s,1)

exten => #,1,hangup

exten => t,1,goto(s,1)
exten => i,1,playback(invalid)
exten => i,2,goto(s,1)

[voicemail-playback-menu]
exten => s,1,set(MSGNUM=0)
exten => s,2,while($[$[${MSGNUM}] != -1])
exten => s,3,retrieve(IMAP| ${MSGNUM}| oldtonew | readunread)
exten => s,4,background(${CURRENTMESSAGE})
exten => s,5,endwhile()

exten => 4,1,set(MSGNUM = $[$[${MSGNUM}] - 1])
exten => 4,1,goto(s,3)

exten => 5,1,goto(s,3)

exten => 6,1,set(MSGNUM = $[$[${MSGNUM}] + 1])
exten => 6,2,goto(s,3)

exten => 7,1,markdelete(IMAP|${MSGNUM} |oldtonew| readunread)
exten => 8,1,goto(voicemail-foward-menu,s,1)
exten => 9,1,goto(voicemail-save-menu,s,1)

exten => t,1,goto(s,3)
exten => i,1,playback(invalid)
exten => i,2,goto(s,3)


etc etc
obviously not everyone will want to change to this new way of doing voicemail 
menus as it will tend to be pages of dialplan, probably a good bit shorter in 
ael.  But I think we could give out a good set of defaults and people could do 
tweaks here and there.  As well as making it easier for people to develop more 
storage methods for asterisk voicemail and making the world a generally better 
place.

what do you guys think?

Mog









_______________________________________________
--Bandwidth and Colocation provided by Easynews.com --

asterisk-dev mailing list
To UNSUBSCRIBE or update options visit:
   http://lists.digium.com/mailman/listinfo/asterisk-dev

Reply via email to