diff --git a/exec/imapservice.js b/exec/imapservice.js index 250a39eaea714a7ddabbe43ca0d0bbeaa63fb1a7..2d50e82d1e7f628e336570dba763b0c6912a2973 100644 --- a/exec/imapservice.js +++ b/exec/imapservice.js @@ -8,6 +8,8 @@ * $Id$ */ +load("sbbsdefs.js"); + var sepchar="|"; var debug=true; @@ -207,21 +209,25 @@ function sendrecent() untagged("0 RECENT"); } -function sublist(group, match) +function sublist(group, match, subscribed) { var grp; var sub; var ret=[]; match=match.replace(/\%/, "*"); + group=group.replace(/\%/, "*"); for(grp in msg_area.grp_list) { -// if(group=='' || msg_area.grp_list[grp].description==group) { + if(group=='' || wildmatch(true, msg_area.grp_list[grp].description, group)) { ret.push(msg_area.grp_list[grp].description+sepchar); for(sub in msg_area.grp_list[grp].sub_list) { - ret.push(msg_area.grp_list[grp].description+sepchar+msg_area.grp_list[grp].sub_list[sub].description); + if(wildmatch(true, msg_area.grp_list[grp].sub_list[sub].description, match, false)) { + if((!subscribed) || msg_area.grp_list[grp].sub_list[sub].scan_cfg&SCAN_CFG_NEW) + ret.push(msg_area.grp_list[grp].description+sepchar+msg_area.grp_list[grp].sub_list[sub].description); + } } -// } + } } return(ret); } @@ -271,17 +277,17 @@ authenticated_command_handlers = { arguments:1, handler:function(args){ var tag=args[0]; - var sub=args[1]; + var sub=getsub(args[1]); base=new MsgBase(sub); - if(base == undefined) { + if(base == undefined || (!base.open())) { tagged(tag, "NO", "Can't find your mailbox"); return; } sendflags(false); - untagged("EXISTS"); - untagged("RECENT"); - untagged("OK [UNSEEN]"); + untagged(base.total_msgs+" EXISTS"); + untagged("0 RECENT"); + untagged("OK [UNSEEN "+(base.total_msgs+1)+"]"); sendflags(true); untagged("OK [UIDNEXT "+(base.last_msg+1)+"]"); untagged("OK [UIDVALIDITY 0]"); @@ -320,11 +326,11 @@ authenticated_command_handlers = { arguments:1, handler:function(args) { var tag=args[0]; - var sub=args[1]; + var sub=getsub(args[1]); if(msg_area.sub[sub]!=undefined && msg_area.sub[sub].can_read) { tagged(tag, "OK", "Subscribed..."); - //msg_area.sub[sub].scan_cfg=SCAN_CFG_NEW; + msg_area.sub[sub].scan_cfg|=SCAN_CFG_NEW; } else tagged(tag, "NO", "Can't subscribe to that sub (what is it?)"); @@ -334,11 +340,12 @@ authenticated_command_handlers = { arguments:1, handler:function(args) { var tag=args[0]; - var sub=args[1]; + var sub=getsub(args[1]); if(msg_area.sub[sub]!=undefined && msg_area.sub[sub].can_read) { tagged(tag, "OK", "Unsubscribed..."); - //msg_area.sub[sub].scan_cfg=0; + // This may leave the to you only bit set... yay. + msg_area.sub[sub].scan_cfg&=~SCAN_CFG_NEW; } else tagged(tag, "NO", "Can't unsubscribe that sub (what is it?)"); @@ -348,9 +355,17 @@ authenticated_command_handlers = { arguments:2, handler:function(args) { var tag=args[0]; - var ref=args[1]; + var group=args[1]; var sub=args[2]; - + var groups=sublist(group, sub, false); + var group; + + for(group in groups) { + if(groups[group].substr(-1)==sepchar) + untagged('LIST (\\Noselect) "'+sepchar+'" "'+groups[group].substr(0,groups[group].length-1)+'"'); + else + untagged('LIST () "'+sepchar+'" "'+groups[group]+'"'); + } tagged(tag, "OK", "There you go."); }, }, @@ -360,12 +375,12 @@ authenticated_command_handlers = { var tag=args[0]; var group=args[1]; var sub=args[2]; - var groups=sublist(group, sub); + var groups=sublist(group, sub, true); var group; for(group in groups) { if(groups[group].substr(-1)==sepchar) - untagged('LSUB (\Noselect) "'+sepchar+'" "'+groups[group].substr(0,-1)+'"'); + untagged('LSUB (\\Noselect) "'+sepchar+'" "'+groups[group].substr(0,groups[group].length-1)+'"'); else untagged('LSUB () "'+sepchar+'" "'+groups[group]+'"'); }