From 9b3cd5e254fafa08c774a24f85c2b2eac12a9de5 Mon Sep 17 00:00:00 2001 From: Eric Wong Date: Fri, 28 May 2021 00:07:56 +0000 Subject: lei: handle a single IMAP message in most places "lei import" can now import a single IMAP message via Likewise, "lei inspect" can show the blob information for UID URLs and "lei lcat" can display the blob without network access if imported. "lei lcat" also gets rid of some unused code and supports "blob:$OIDHEX" syntax as described in the comments (and used by our "text" output format). v2: enforce UID in URL, fail without v3: fix error reporting (s/fail/child_error/) --- lib/PublicInbox/LeiInspect.pm | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) (limited to 'lib/PublicInbox/LeiInspect.pm') diff --git a/lib/PublicInbox/LeiInspect.pm b/lib/PublicInbox/LeiInspect.pm index 46b9197f..7205979e 100644 --- a/lib/PublicInbox/LeiInspect.pm +++ b/lib/PublicInbox/LeiInspect.pm @@ -24,6 +24,19 @@ sub inspect_blob ($$) { $ent; } +sub inspect_imap_uid ($$) { + my ($lei, $uid_uri) = @_; + my $ent = {}; + my $lse = $lei->{lse} or return $ent; + my $lms = $lse->lms or return $ent; + my $oidhex = $lms->imap_oid($lei, $uid_uri); + if (ref(my $err = $oidhex)) { # art2folder error + $lei->qerr(@{$err->{qerr}}) if $err->{qerr}; + } + $ent->{$$uid_uri} = $oidhex; + $ent; +} + sub inspect_sync_folder ($$) { my ($lei, $folder) = @_; my $ent = {}; @@ -49,8 +62,15 @@ sub inspect1 ($$$) { my $ent; if ($item =~ /\Ablob:(.+)/) { $ent = inspect_blob($lei, $1); - } elsif ($item =~ m!\Aimaps?://!i || - $item =~ m!\A(?:maildir|mh):!i || -d $item) { + } 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); } else { # TODO: more things return $lei->fail("$item not understood"); -- cgit v1.2.3-24-ge0c7