From: Eric Wong <e@yhbt.net>
To: meta@public-inbox.org
Subject: [PATCH 6/8] watch: imap: only remove \Seen spam
Date: Thu, 27 Aug 2020 12:17:04 +0000 [thread overview]
Message-ID: <20200827121706.4545-7-e@yhbt.net> (raw)
In-Reply-To: <20200827121706.4545-1-e@yhbt.net>
This matches the behavior of Maildir `watchspam' handling in not
removing unseen messages. NNTP can't match this behavior, since
NNTP servers don't store flags, clients do.
---
lib/PublicInbox/WatchMaildir.pm | 20 ++++++++++++--------
1 file changed, 12 insertions(+), 8 deletions(-)
diff --git a/lib/PublicInbox/WatchMaildir.pm b/lib/PublicInbox/WatchMaildir.pm
index 768e0efe..4ae400f7 100644
--- a/lib/PublicInbox/WatchMaildir.pm
+++ b/lib/PublicInbox/WatchMaildir.pm
@@ -382,8 +382,8 @@ sub mic_for ($$$) { # mic = Mail::IMAPClient
$mic;
}
-sub imap_import_msg ($$$$) {
- my ($self, $url, $uid, $raw) = @_;
+sub imap_import_msg ($$$$$) {
+ my ($self, $url, $uid, $raw, $flags) = @_;
# our target audience expects LF-only, save storage
$$raw =~ s/\r\n/\n/sg;
@@ -394,10 +394,13 @@ sub imap_import_msg ($$$$) {
my $x = import_eml($self, $ibx, $eml);
}
} elsif ($inboxes eq 'watchspam') {
- local $SIG{__WARN__} = warn_ignore_cb();
- my $eml = PublicInbox::Eml->new($raw);
- my $arg = [ $self, $eml, "$url UID:$uid" ];
- $self->{config}->each_inbox(\&remove_eml_i, $arg);
+ # we don't remove unseen messages
+ if ($flags =~ /\\Seen\b/) {
+ local $SIG{__WARN__} = warn_ignore_cb();
+ my $eml = PublicInbox::Eml->new($raw);
+ my $arg = [ $self, $eml, "$url UID:$uid" ];
+ $self->{config}->each_inbox(\&remove_eml_i, $arg);
+ }
} else {
die "BUG: destination unknown $inboxes";
}
@@ -474,7 +477,7 @@ sub imap_fetch_all ($$$) {
my @batch = splice(@$uids, 0, $bs);
$batch = join(',', @batch);
local $0 = "UID:$batch $mbx $sec";
- my $r = $mic->fetch_hash($batch, $req);
+ my $r = $mic->fetch_hash($batch, $req, 'FLAGS');
unless ($r) { # network error?
$err = "E: $url UID FETCH $batch error: $!";
last;
@@ -483,7 +486,8 @@ sub imap_fetch_all ($$$) {
# messages get deleted, so holes appear
my $per_uid = delete $r->{$uid} // next;
my $raw = delete($per_uid->{$key}) // next;
- imap_import_msg($self, $url, $uid, \$raw);
+ my $fl = $per_uid->{FLAGS} // '';
+ imap_import_msg($self, $url, $uid, \$raw, $fl);
$last_uid = $uid;
last if $self->{quit};
}
next prev parent reply other threads:[~2020-08-27 12:17 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-08-27 12:16 [PATCH 0/8] mostly watch-related odds and ends Eric Wong
2020-08-27 12:16 ` [PATCH 1/8] watchmaildir: ensure I:/W:/E: prefixes in warnings Eric Wong
2020-08-27 12:17 ` [PATCH 2/8] imaptracker: preserve WAL journal_mode if set by user Eric Wong
2020-08-27 12:17 ` [PATCH 3/8] overidx: inline create_ghost sub Eric Wong
2020-08-27 12:17 ` [PATCH 4/8] doc: document graceful shutdown signals Eric Wong
2020-08-27 12:17 ` [PATCH 5/8] doc: speling fickses Eric Wong
2020-08-27 12:17 ` Eric Wong [this message]
2020-08-27 12:17 ` [PATCH 7/8] doc: move watch config docs to -watch manpage Eric Wong
2020-08-27 12:17 ` [PATCH 8/8] doc: watch: expand on NNTP and IMAP-specific knobs Eric Wong
2020-08-28 4:22 ` Eric Wong
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: https://public-inbox.org/README
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20200827121706.4545-7-e@yhbt.net \
--to=e@yhbt.net \
--cc=meta@public-inbox.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).