]> Sergey Matveev's repositories - public-inbox.git/blobdiff - lib/PublicInbox/IMAP.pm
imap: LIST shows "INBOX" in all caps
[public-inbox.git] / lib / PublicInbox / IMAP.pm
index 803ce31ff2284adb576bff65faf438c8fcb9f1a8..b3c449b0712778b571ab2cbbb0d5e24b72e53c65 100644 (file)
@@ -53,7 +53,7 @@ my %FETCH_NEED = (
        'BODY[]' => [ NEED_BLOB, \&emit_rfc822 ],
        'RFC822.HEADER' => [ NEED_EML, \&emit_rfc822_header ],
        'RFC822.TEXT' => [ NEED_EML, \&emit_rfc822_text ],
-       'RFC822.SIZE' => [ NEED_BLOB, \&emit_rfc822_size ],
+       'RFC822.SIZE' => [ NEED_SMSG, \&emit_rfc822_size ],
        RFC822 => [ NEED_BLOB, \&emit_rfc822 ],
        BODY => [ NEED_EML, \&emit_body ],
        BODYSTRUCTURE => [ NEED_EML, \&emit_bodystructure ],
@@ -254,13 +254,14 @@ sub cmd_done ($$) {
 
 sub ensure_ranges_exist ($$$) {
        my ($imapd, $ibx, $max) = @_;
+       defined(my $mb_top = $ibx->{newsgroup}) or return;
        my $mailboxes = $imapd->{mailboxes};
-       my $mb_top = $ibx->{newsgroup};
        my @created;
        for (my $i = int($max/UID_BLOCK); $i >= 0; --$i) {
                my $sub_mailbox = "$mb_top.$i";
                last if exists $mailboxes->{$sub_mailbox};
                $mailboxes->{$sub_mailbox} = $ibx;
+               $sub_mailbox =~ s/\Ainbox\./INBOX./i; # more familiar to users
                push @created, $sub_mailbox;
        }
        return unless @created;
@@ -500,11 +501,12 @@ sub emit_rfc822 {
        $self->msg_more($$bref);
 }
 
-# Mail::IMAPClient::message_string cares about this by default
-# (->Ignoresizeerrors attribute)
+# Mail::IMAPClient::message_string cares about this by default,
+# (->Ignoresizeerrors attribute).  Admins are encouraged to
+# --reindex for IMAP support, anyways.
 sub emit_rfc822_size {
-       my ($self, $k, undef, $bref) = @_;
-       $self->msg_more(' RFC822.SIZE ' . length($$bref));
+       my ($self, $k, $smsg) = @_;
+       $self->msg_more(' RFC822.SIZE ' . $smsg->{bytes});
 }
 
 sub emit_internaldate {
@@ -692,9 +694,8 @@ sub cmd_list ($$$$) {
                # request for hierarchy delimiter
                $l = [ qq[* LIST (\\Noselect) "." ""\r\n] ];
        } elsif ($refname ne '' || $wildcard ne '*') {
-               $wildcard = lc $wildcard;
-               $wildcard =~ s!([^a-z0-9_])!$patmap{$1} // "\Q$1"!eg;
-               $l = [ grep(/ \Q$refname\E$wildcard\r\n\z/s, @$l) ];
+               $wildcard =~ s!([^a-z0-9_])!$patmap{$1} // "\Q$1"!egi;
+               $l = [ grep(/ \Q$refname\E$wildcard\r\n\z/is, @$l) ];
        }
        \(join('', @$l, "$tag OK List done\r\n"));
 }
@@ -883,7 +884,7 @@ sub fetch_compile ($) {
        @r;
 }
 
-sub cmd_uid_fetch ($$$;@) {
+sub cmd_uid_fetch ($$$$;@) {
        my ($self, $tag, $range_csv, @want) = @_;
        my $ibx = $self->{ibx} or return "$tag BAD No mailbox selected\r\n";
        my ($cb, $ops, $partial) = fetch_compile(\@want);