diff options
Diffstat (limited to 'lib/PublicInbox/IMAP.pm')
-rw-r--r-- | lib/PublicInbox/IMAP.pm | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/lib/PublicInbox/IMAP.pm b/lib/PublicInbox/IMAP.pm index 7745d9f9..ca9a0ea7 100644 --- a/lib/PublicInbox/IMAP.pm +++ b/lib/PublicInbox/IMAP.pm @@ -336,6 +336,20 @@ sub cmd_status ($$$;@) { "$tag OK Status complete\r\n"; } +my %patmap = ('*' => '.*', '%' => '[^\.]*'); +sub cmd_list ($$$$) { + my ($self, $tag, $refname, $wildcard) = @_; + my $l = $self->{imapd}->{inboxlist}; + if ($refname eq '' && $wildcard eq '') { + # request for hierarchy delimiter + $l = [ qq[* LIST (\\Noselect) "." ""\r\n] ]; + } elsif ($refname ne '' || $wildcard ne '*') { + $wildcard =~ s!([^a-z0-9_])!$patmap{$1} // "\Q$1"!eig; + $l = [ grep(/ \Q$refname\E$wildcard\r\n\z/s, @$l) ]; + } + \(join('', @$l, "$tag OK List complete\r\n")); +} + sub cmd_uid_fetch ($$$;@) { my ($self, $tag, $range, @want) = @_; my $ibx = $self->{ibx} or return "$tag BAD No mailbox selected\r\n"; |