X-Git-Url: http://www.git.stargrave.org/?a=blobdiff_plain;f=lib%2FPublicInbox%2FLeiInspect.pm;h=ab2c98d99228b2af7851199ffb6eca501d2ab5e0;hb=0c385e6500f26babc47a0768b730ea38e290a5f5;hp=48da826b89b65f6bf87d74eeffb24a77030ead72;hpb=eed4017d3361220e7533d786565c3633e305cc16;p=public-inbox.git diff --git a/lib/PublicInbox/LeiInspect.pm b/lib/PublicInbox/LeiInspect.pm index 48da826b..ab2c98d9 100644 --- a/lib/PublicInbox/LeiInspect.pm +++ b/lib/PublicInbox/LeiInspect.pm @@ -11,6 +11,7 @@ use v5.10.1; use parent qw(PublicInbox::IPC); use PublicInbox::Config; use PublicInbox::MID qw(mids); +use PublicInbox::NetReader qw(imap_uri nntp_uri); sub inspect_blob ($$) { my ($lei, $oidhex) = @_; @@ -32,13 +33,33 @@ sub inspect_imap_uid ($$) { my $ent = {}; my $lms = $lei->lms or return $ent; my $oidhex = $lms->imap_oid($lei, $uid_uri); - if (ref(my $err = $oidhex)) { # art2folder error + if (ref(my $err = $oidhex)) { # arg2folder error $lei->qerr(@{$err->{qerr}}) if $err->{qerr}; } $ent->{$$uid_uri} = $oidhex; $ent; } +sub inspect_nntp_range { + my ($lei, $uri) = @_; + my ($ng, $beg, $end) = $uri->group; + $uri = $uri->clone; + $uri->group($ng); + my $ent = {}; + my $ret = { "$uri" => $ent }; + my $lms = $lei->lms or return $ret; + my $err = $lms->arg2folder($lei, my $folders = [ $$uri ]); + if ($err) { + $lei->qerr(@{$err->{qerr}}) if $err->{qerr}; + } + $end //= $beg; + for my $art ($beg..$end) { + my $oidbin = $lms->imap_oidbin($folders->[0], $art); + $ent->{$art} = $oidbin ? unpack('H*', $oidbin) : undef; + } + $ret; +} + sub inspect_sync_folder ($$) { my ($lei, $folder) = @_; my $ent = {}; @@ -161,14 +182,6 @@ sub inspect1 ($$$) { my $ent; if ($item =~ /\Ablob:(.+)/) { $ent = inspect_blob($lei, $1); - } elsif ($item =~ m!\Aimaps?://!i) { - require PublicInbox::URIimap; - my $uri = PublicInbox::URIimap->new($item); - if (defined($uri->uid)) { - $ent = inspect_imap_uid($lei, $uri); - } else { - $ent = inspect_sync_folder($lei, $item); - } } elsif ($item =~ m!\A(?:maildir|mh):!i || -d $item) { $ent = inspect_sync_folder($lei, $item); } elsif ($item =~ m!\Adocid:([0-9]+)\z!) { @@ -177,6 +190,23 @@ sub inspect1 ($$$) { $ent = inspect_num($lei, $1 + 0); } elsif ($item =~ m!\A(?:mid|m):(.+)\z!) { $ent = inspect_mid($lei, $1); + } elsif (my $iuri = imap_uri($item)) { + if (defined($iuri->uid)) { + $ent = inspect_imap_uid($lei, $iuri); + } else { + $ent = inspect_sync_folder($lei, $item); + } + } elsif (my $nuri = nntp_uri($item)) { + if (defined(my $mid = $nuri->message)) { + $ent = inspect_mid($lei, $mid); + } else { + my ($group, $beg, $end) = $nuri->group; + if (defined($beg)) { + $ent = inspect_nntp_range($lei, $nuri); + } else { + $ent = inspect_sync_folder($lei, $item); + } + } } else { # TODO: more things return $lei->fail("$item not understood"); }