use v5.10.1;
use parent qw(Exporter PublicInbox::IPC);
use PublicInbox::Eml;
-
our %IMAPflags2kw = map {; "\\\u$_" => $_ } qw(seen answered flagged draft);
our @EXPORT = qw(uri_section imap_uri nntp_uri);
+sub ndump {
+ require Data::Dumper;
+ Data::Dumper->new(\@_)->Useqq(1)->Terse(1)->Dump;
+}
+
# returns the git config section name, e.g [imap "imaps://user@example.com"]
# without the mailbox, so we can share connections between different inboxes
sub uri_section ($) {
$$raw =~ s/\r\n/\n/sg;
my $kw = [];
for my $f (split(/ /, $flags)) {
- my $k = $IMAPflags2kw{$f} // next; # TODO: X-Label?
- push @$kw, $k;
+ if (my $k = $IMAPflags2kw{$f}) {
+ push @$kw, $k;
+ } elsif ($f eq "\\Recent") { # not in JMAP
+ } elsif ($f eq "\\Deleted") { # not in JMAP
+ return;
+ } elsif ($self->{verbose}) {
+ warn "# unknown IMAP flag $f <$uri;uid=$uid>\n";
+ }
}
+ @$kw = sort @$kw; # for all UI/UX purposes
my ($eml_cb, @args) = @{$self->{eml_each}};
$eml_cb->($uri, $uid, $kw, PublicInbox::Eml->new($raw), @args);
}
my $sec = uri_section($uri);
my ($nr, $beg, $end) = $nn->group($group);
unless (defined($nr)) {
- chomp(my $msg = $nn->message);
+ my $msg = ndump($nn->message);
return "E: GROUP $group <$sec> $msg";
}
return if $l_art >= $end; # nothing to do
$beg = $l_art + 1;
}
- my ($err, $art);
+ my ($err, $art, $last_art, $kw); # kw stays undef, no keywords in NNTP
unless ($self->{quiet}) {
warn "# $uri fetching ARTICLE $beg..$end\n";
}
- my $last_art;
my $n = $self->{max_batch};
for ($beg..$end) {
last if $self->{quit};
}
my $raw = $nn->article($art);
unless (defined($raw)) {
- my $msg = $nn->message;
+ my $msg = ndump($nn->message);
if ($nn->code == 421) { # pseudo response from Net::Cmd
$err = "E: $msg";
last;
$raw = join('', @$raw);
$raw =~ s/\r\n/\n/sg;
my ($eml_cb, @args) = @{$self->{eml_each}};
- $eml_cb->($uri, $art, [], PublicInbox::Eml->new(\$raw), @args);
+ $eml_cb->($uri, $art, $kw, PublicInbox::Eml->new(\$raw), @args);
$last_art = $art;
}
run_commit_cb($self);