X-Git-Url: http://www.git.stargrave.org/?a=blobdiff_plain;f=lib%2FPublicInbox%2FInbox.pm;h=8ac7eb302a0c6ed9ef7b9b97f53888bcc115d866;hb=be55542acc90572da54d828313c2416ae1c902b1;hp=da81fb67ad22efa8248c208a2d65629512153bbe;hpb=68046e0fff12c35d793a7ae9f164ac415c84cc21;p=public-inbox.git diff --git a/lib/PublicInbox/Inbox.pm b/lib/PublicInbox/Inbox.pm index da81fb67..8ac7eb30 100644 --- a/lib/PublicInbox/Inbox.pm +++ b/lib/PublicInbox/Inbox.pm @@ -28,7 +28,7 @@ sub do_cleanup { check_inodes($ibx); } else { delete(@$ibx{qw(over mm description cloneurl - -imap_url -nntp_url)}); + -imap_url -nntp_url -pop3_url)}); } my $srch = $ibx->{search} // $ibx; delete @$srch{qw(xdb qp)}; @@ -230,9 +230,9 @@ sub base_url { $url; } -# imapserver, nntpserver, and pop3server configs are used here: +# imapserver, nntpserver configs are used here: sub _x_url ($$$) { - my ($self, $x, $ctx) = @_; # $x is "imap", "nntp", or "pop3" + my ($self, $x, $ctx) = @_; # $x is "imap" or "nntp" # no checking for nntp_usable here, we can point entirely # to non-local servers or users run by a different user my $ns = $self->{"${x}server"} // @@ -276,7 +276,29 @@ EOM # my ($self, $ctx) = @_; sub imap_url { $_[0]->{-imap_url} //= _x_url($_[0], 'imap', $_[1]) } sub nntp_url { $_[0]->{-nntp_url} //= _x_url($_[0], 'nntp', $_[1]) } -sub pop3_url { $_[0]->{-pop3_url} //= _x_url($_[0], 'pop3', $_[1]) } + +sub pop3_url { + my ($self, $ctx) = @_; + $self->{-pop3_url} //= do { + my $ps = $self->{'pop3server'} // + $ctx->{www}->{pi_cfg}->get_all('publicinbox.pop3server'); + my $group = $self->{newsgroup}; + my @urls; + ($ps && $group) and + @urls = map { m!\Apop3?s?://! ? $_ : "pop3://$_" } @$ps; + if (my $mi = $self->{'pop3mirror'}) { + my @m = map { m!\Apop3?s?://! ? $_ : "pop3://$_" } @$mi; + my %seen; # List::Util::uniq requires Perl 5.26+ + @urls = grep { !$seen{$_}++ } (@urls, @m); + } + my $n = 0; + for (@urls) { $n += s!/+\z!! } + warn <over->recent($opts, $after, $before); -} - sub modified { my ($self) = @_; if (my $over = $self->over) { @@ -387,6 +404,16 @@ sub uidvalidity { $_[0]->{uidvalidity} //= eval { $_[0]->mm->created_at } } sub eidx_key { $_[0]->{newsgroup} // $_[0]->{inboxdir} } +# only used by NNTP, so we need ->mm anyways +sub art_min { $_[0]->{-art_min} //= eval { $_[0]->mm(1)->min } } + +# used by IMAP, too, which tries to avoid ->mm (but ->{mm} is likely +# faster since it's smaller iff available) +sub art_max { + $_[0]->{-art_max} //= eval { $_[0]->{mm}->max } // + eval { $_[0]->over(1)->max }; +} + sub mailboxid { # rfc 8474, 8620, 8621 my ($self, $imap_slice) = @_; my $pfx = defined($imap_slice) ? $self->{newsgroup} : $self->{name}; @@ -399,4 +426,6 @@ sub mailboxid { # rfc 8474, 8620, 8621 sprintf('-%x', uidvalidity($self) // 0) } +sub thing_type { 'public inbox' } + 1;