]> Sergey Matveev's repositories - public-inbox.git/blobdiff - lib/PublicInbox/NetReader.pm
lei import: --incremental default for NNTP and IMAP
[public-inbox.git] / lib / PublicInbox / NetReader.pm
index c269d841e1f835d8f61adaf0f2b5456ff5b1582d..c7b43f014f6bd31d5c2e435f8ef3b71640cbfa17 100644 (file)
@@ -8,6 +8,7 @@ use v5.10.1;
 use parent qw(Exporter PublicInbox::IPC);
 use PublicInbox::Eml;
 our %IMAPflags2kw = map {; "\\\u$_" => $_ } qw(seen answered flagged draft);
+$IMAPflags2kw{'$Forwarded'} = 'forwarded';  # RFC 5550
 
 our @EXPORT = qw(uri_section imap_uri nntp_uri);
 
@@ -264,10 +265,11 @@ sub imap_common_init ($;$) {
        my $mics = {}; # schema://authority => IMAPClient obj
        for my $uri (@{$self->{imap_order}}) {
                my $sec = uri_section($uri);
-               $mics->{$sec} //= mic_for($self, "$sec/", $mic_args, $lei);
+               my $mic = $mics->{$sec} //=
+                               mic_for($self, "$sec/", $mic_args, $lei) //
+                               die "Unable to continue\n";
                next unless $self->isa('PublicInbox::NetWriter');
                my $dst = $uri->mailbox // next;
-               my $mic = $mics->{$sec} // die "Unable to continue\n";
                next if $mic->exists($dst); # already exists
                $mic->create($dst) or die "CREATE $dst failed <$uri>: $@";
        }
@@ -371,6 +373,13 @@ sub run_commit_cb ($) {
        $cb->(@args);
 }
 
+sub _itrk ($$) {
+       my ($self, $uri) = @_;
+       return unless $self->{incremental};
+       # itrk_fn is set by lei
+       PublicInbox::IMAPTracker->new($$uri, $self->{itrk_fn});
+}
+
 sub _imap_fetch_all ($$$) {
        my ($self, $mic, $uri) = @_;
        my $sec = uri_section($uri);
@@ -387,8 +396,7 @@ sub _imap_fetch_all ($$$) {
                return "E: $uri cannot get UIDVALIDITY";
        $r_uidnext //= $mic->uidnext($mbx) //
                return "E: $uri cannot get UIDNEXT";
-       my $itrk = $self->{incremental} ?
-                       PublicInbox::IMAPTracker->new($$uri) : 0;
+       my $itrk = _itrk($self, $uri);
        my ($l_uidval, $l_uid) = $itrk ? $itrk->get_last : ();
        $l_uidval //= $r_uidval; # first time
        $l_uid //= 0;
@@ -541,8 +549,7 @@ sub _nntp_fetch_all ($$$) {
        # IMAPTracker is also used for tracking NNTP, UID == article number
        # LIST.ACTIVE can get the equivalent of UIDVALIDITY, but that's
        # expensive.  So we assume newsgroups don't change:
-       my $itrk = $self->{incremental} ?
-                       PublicInbox::IMAPTracker->new($$uri) : 0;
+       my $itrk = _itrk($self, $uri);
        my (undef, $l_art) = $itrk ? $itrk->get_last : ();
 
        # allow users to specify articles to refetch