]> Sergey Matveev's repositories - public-inbox.git/blobdiff - lib/PublicInbox/Watch.pm
watch: IMAP: ignore \Deleted and \Draft messages
[public-inbox.git] / lib / PublicInbox / Watch.pm
index 0b72bd160330a1474b0c9387eda79106cc934767..4fbc96405cb5b799445ecc104767ebc6166b88f6 100644 (file)
@@ -287,30 +287,9 @@ sub watch_fs_init ($) {
        PublicInbox::DirIdle->new([keys %{$self->{mdmap}}], $cb);
 }
 
-sub imap_import_msg ($$$$$) {
-       my ($self, $uri, $uid, $raw, $flags) = @_;
-       # our target audience expects LF-only, save storage
-       $$raw =~ s/\r\n/\n/sg;
-
-       my $inboxes = $self->{imap}->{$$uri};
-       if (ref($inboxes)) {
-               for my $ibx (@$inboxes) {
-                       my $eml = PublicInbox::Eml->new($$raw);
-                       import_eml($self, $ibx, $eml);
-               }
-       } elsif ($inboxes eq 'watchspam') {
-               return if $flags !~ /\\Seen\b/; # don't remove unseen messages
-               local $SIG{__WARN__} = PublicInbox::Eml::warn_ignore_cb();
-               my $eml = PublicInbox::Eml->new($raw);
-               $self->{pi_cfg}->each_inbox(\&remove_eml_i,
-                                               $self, $eml, "$uri UID:$uid");
-       } else {
-               die "BUG: destination unknown $inboxes";
-       }
-}
-
 sub net_cb { # NetReader::(nntp|imap)_each callback
        my ($uri, $art, $kw, $eml, $self, $inboxes) = @_;
+       return if grep(/\Adraft\z/, @$kw);
        local $self->{cur_uid} = $art; # IMAP UID or NNTP article
        if (ref($inboxes)) {
                my @ibx = @$inboxes;
@@ -321,6 +300,9 @@ sub net_cb { # NetReader::(nntp|imap)_each callback
                }
                import_eml($self, $last, $eml);
        } elsif ($inboxes eq 'watchspam') {
+               if ($uri->scheme =~ /\Aimaps?\z/ && !grep(/\Aseen\z/, @$kw)) {
+                       return;
+               }
                $self->{pi_cfg}->each_inbox(\&remove_eml_i,
                                $self, $eml, "$uri #$art");
        } else {
@@ -544,7 +526,7 @@ sub poll_fetch_reap {
 
 sub watch_imap_init ($$) {
        my ($self, $poll) = @_;
-       my $mics = imap_common_init($self); # read args from config
+       my $mics = PublicInbox::NetReader::imap_common_init($self);
        my $idle = []; # [ [ uri1, intvl1 ], [uri2, intvl2] ]
        for my $uri (@{$self->{imap_order}}) {
                my $sec = uri_section($uri);
@@ -565,7 +547,7 @@ sub watch_imap_init ($$) {
 
 sub watch_nntp_init ($$) {
        my ($self, $poll) = @_;
-       nntp_common_init($self); # read args from config
+       PublicInbox::NetReader::nntp_common_init($self);
        for my $uri (@{$self->{nntp_order}}) {
                my $sec = uri_section($uri);
                my $intvl = $self->{nntp_opt}->{$sec}->{pollInterval};