about summary refs log tree commit homepage
path: root/lib/PublicInbox/LeiToMail.pm
diff options
context:
space:
mode:
Diffstat (limited to 'lib/PublicInbox/LeiToMail.pm')
-rw-r--r--lib/PublicInbox/LeiToMail.pm48
1 files changed, 30 insertions, 18 deletions
diff --git a/lib/PublicInbox/LeiToMail.pm b/lib/PublicInbox/LeiToMail.pm
index 3420b06e..b3228a59 100644
--- a/lib/PublicInbox/LeiToMail.pm
+++ b/lib/PublicInbox/LeiToMail.pm
@@ -267,6 +267,17 @@ sub _mbox_write_cb ($$) {
         }
 }
 
+sub update_kw_maybe ($$$$) {
+        my ($lei, $lse, $eml, $kw) = @_;
+        return unless $lse;
+        my $x = $lse->kw_changed($eml, $kw);
+        if ($x) {
+                $lei->{sto}->ipc_do('set_eml', $eml, @$kw);
+        } elsif (!defined($x)) {
+                # TODO: xkw
+        }
+}
+
 sub _augment_or_unlink { # maildir_each_eml cb
         my ($f, $kw, $eml, $lei, $lse, $mod, $shard, $unlink) = @_;
         if ($mod) {
@@ -276,14 +287,7 @@ sub _augment_or_unlink { # maildir_each_eml cb
                                 $1 : sha256_hex($f);
                 my $recno = hex(substr($hex, 0, 8));
                 return if ($recno % $mod) != $shard;
-                if ($lse) {
-                        my $x = $lse->kw_changed($eml, $kw);
-                        if ($x) {
-                                $lei->{sto}->ipc_do('set_eml', $eml, @$kw);
-                        } elsif (!defined($x)) {
-                                # TODO: xkw
-                        }
-                }
+                update_kw_maybe($lei, $lse, $eml, $kw);
         }
         $unlink ? unlink($f) : _augment($eml, $lei);
 }
@@ -446,26 +450,32 @@ sub _do_augment_maildir {
         }
 }
 
-sub _post_augment_maildir {
-        my ($self, $lei) = @_;
-        $lei->{opt}->{'import-augment'} or return;
-        my $wait = $lei->{sto}->ipc_do('checkpoint', 1);
-}
-
-sub _augment_imap { # PublicInbox::NetReader::imap_each cb
-        my ($url, $uid, $kw, $eml, $lei) = @_;
-        _augment($eml, $lei);
+sub _imap_augment_or_delete { # PublicInbox::NetReader::imap_each cb
+        my ($url, $uid, $kw, $eml, $lei, $lse, $delete_mic) = @_;
+        update_kw_maybe($lei, $lse, $eml, $kw);
+        if ($delete_mic) {
+                $lei->{net}->imap_delete_1($url, $uid, $delete_mic);
+        } else {
+                _augment($eml, $lei);
+        }
 }
 
 sub _do_augment_imap {
         my ($self, $lei) = @_;
         my $net = $lei->{net};
+        my $lse = $lei->{sto}->search if $lei->{opt}->{'import-augment'};
         if ($lei->{opt}->{augment}) {
                 my $dedupe = $lei->{dedupe};
                 if ($dedupe && $dedupe->prepare_dedupe) {
-                        $net->imap_each($self->{uri}, \&_augment_imap, $lei);
+                        $net->imap_each($self->{uri}, \&_imap_augment_or_delete,
+                                        $lei, $lse);
                         $dedupe->pause_dedupe;
                 }
+        } elsif ($lse) {
+                my $delete_mic;
+                $net->imap_each($self->{uri}, \&_imap_augment_or_delete,
+                                        $lei, $lse, \$delete_mic);
+                $delete_mic->expunge if $delete_mic;
         } elsif (!$self->{-wq_worker_nr}) { # undef or 0
                 # clobber existing IMAP folder
                 $net->imap_delete_all($self->{uri});
@@ -539,6 +549,8 @@ sub do_augment { # slow, runs in wq worker
 # fast (spawn compressor or mkdir), runs in same process as pre_augment
 sub post_augment {
         my ($self, $lei, @args) = @_;
+        my $wait = $lei->{opt}->{'import-augment'} ?
+                        $lei->{sto}->ipc_do('checkpoint', 1) : 0;
         # _post_augment_mbox
         my $m = $self->can("_post_augment_$self->{base_type}") or return;
         $m->($self, $lei, @args);