]> Sergey Matveev's repositories - public-inbox.git/blobdiff - lib/PublicInbox/LeiRefreshMailSync.pm
imap+nntp: share COMPRESS implementation
[public-inbox.git] / lib / PublicInbox / LeiRefreshMailSync.pm
index 2f1050059976cb15bcd5ff2e7cedba4e5c996411..a60a9a5e9761ca2ca89320adfd121d291b070e8b 100644 (file)
@@ -7,7 +7,7 @@ package PublicInbox::LeiRefreshMailSync;
 use strict;
 use v5.10.1;
 use parent qw(PublicInbox::IPC PublicInbox::LeiInput);
-use PublicInbox::LeiExportKw;
+use PublicInbox::LeiImport;
 use PublicInbox::InboxWritable qw(eml_from_path);
 use PublicInbox::Import;
 
@@ -36,7 +36,7 @@ sub pmdir_cb { # called via LeiPmdir->each_mdir_fn
        my ($folder, $bn) = ($f =~ m!\A(.+?)/(?:new|cur)/([^/]+)\z!) or
                die "BUG: $f was not from a Maildir?";
        substr($folder, 0, 0) = 'maildir:'; # add prefix
-       return if defined($self->{lms}->name_oidbin($folder, $bn));
+       return if scalar($self->{lms}->name_oidbin($folder, $bn));
        my $eml = eml_from_path($f) // return;
        my $oidbin = $self->{lei}->git_oid($eml)->digest;
        $self->{lms}->set_src($oidbin, $folder, \$bn);
@@ -73,23 +73,18 @@ lei mail_sync.sqlite3 uninitialized, see lei-import(1)
 EOM
        if (defined(my $all = $lei->{opt}->{all})) {
                $lms->group2folders($lei, $all, \@folders) or return;
+               # TODO: handle NNTP servers which delete messages
+               @folders = grep(!m!\Anntps?://!, @folders);
        } else {
-               my $err = $lms->arg2folder($lei, \@folders);
-               $lei->qerr(@{$err->{qerr}}) if $err->{qerr};
-               return $lei->fail($err->{fail}) if $err->{fail};
+               $lms->arg2folder($lei, \@folders); # may die
        }
        $lms->lms_pause; # must be done before fork
        $sto->write_prepare($lei);
        my $self = bless { missing_ok => 1, lms => $lms }, __PACKAGE__;
        $lei->{opt}->{'mail-sync'} = 1; # for prepare_inputs
        $self->prepare_inputs($lei, \@folders) or return;
-       my $ops = {};
-       $lei->{auth}->op_merge($ops, $self) if $lei->{auth};
-       (my $op_c, $ops) = $lei->workers_start($self, 1, $ops);
-       $lei->{wq1} = $self;
        $lei->{-err_type} = 'non-fatal';
-       net_merge_all_done($self) unless $lei->{auth};
-       $lei->wait_wq_events($op_c, $ops); # net_merge_all_done if !{auth}
+       $lei->wq1_start($self);
 }
 
 sub ipc_atfork_child { # needed for PublicInbox::LeiPmdir
@@ -99,8 +94,16 @@ sub ipc_atfork_child { # needed for PublicInbox::LeiPmdir
        undef;
 }
 
+sub _complete_refresh_mail_sync {
+       my ($lei, @argv) = @_;
+       my $lms = $lei->lms or return ();
+       my $match_cb = $lei->complete_url_prepare(\@argv);
+       my @k = $lms->folders($argv[-1] // undef, 1);
+       my @m = map { $match_cb->($_) } @k;
+       @m ? @m : @k
+}
+
 no warnings 'once';
-*_complete_refresh_mail_sync = \&PublicInbox::LeiExportKw::_complete_export_kw;
 *net_merge_all_done = \&PublicInbox::LeiInput::input_only_net_merge_all_done;
 
 1;