From f8aa88945cb98d45c021dfff5aaad4199f8ce299 Mon Sep 17 00:00:00 2001 From: deuce <> Date: Sat, 14 Nov 2009 00:13:44 +0000 Subject: [PATCH] Add partial FETCH for BODY[] --- exec/imapservice.js | 25 ++++++++++++++++++++----- 1 file changed, 20 insertions(+), 5 deletions(-) diff --git a/exec/imapservice.js b/exec/imapservice.js index 5309f9e89f..467293a585 100644 --- a/exec/imapservice.js +++ b/exec/imapservice.js @@ -364,12 +364,25 @@ function send_fetch_response(msgnum, fmat, uid) } if(fmat[i].toUpperCase().substr(0,4)=='BODY') { function get_mime_part(fmat) { - var m=fmat.match(/^BODY((?:\.PEEK)?)\[([^[\]]*)/i); + var m=fmat.match(/^BODY((?:\.PEEK)?)\[([^[\]]*)(?:\]\<([0-9]+)\.([0-9]+)\>)?/i); var specifiers; var i; var tmp; var part_name=''; + function encode_binary_part(start, len, str) + { + if(start==undefined || start=='') + start=0; + else + start=parseInt(start,10); + if(len==undefined || len=='') + len=str.length; + else + len=parseInt(len,10); + return(encode_binary(str.substr(start,len))); + } + part=mime; if(m==null) return(undefined); @@ -387,6 +400,8 @@ function send_fetch_response(msgnum, fmat, uid) else break; } + if(m[3]!=undefined && m[3]!='') + part_name += '<'+m[3]+'>'; switch(specifiers[i]) { case 'HEADER': if(specifiers[i+1]!=undefined) { @@ -394,16 +409,16 @@ function send_fetch_response(msgnum, fmat, uid) return undefined; } else - return(part_name+" "+encode_binary(part.headers['::'].join('')+"\r\n")+' '); + return(part_name+" "+encode_binary_part(m[3],m[4],part.headers['::'].join('')+"\r\n")+' '); case 'MIME': - return(part_name+" "+encode_binary(part.headers[':mime:'].join('')+"\r\n")+' '); + return(part_name+" "+encode_binary_part(m[3],m[4],part.headers[':mime:'].join('')+"\r\n")+' '); case '': if(specifiers.length==1) - return(part_name+" "+encode_binary(part.headers['::'].join('')+'\r\n'+part.text)+' '); + return(part_name+" "+encode_binary_part(m[3],m[4],part.headers['::'].join('')+'\r\n'+part.text)+' '); // Fall-through case undefined: case 'TEXT': - return(part_name+' '+encode_binary(part.text)+' '); + return(part_name+' '+encode_binary_part(m[3],m[4],part.text)+' '); } } -- GitLab