lib/PublicInbox/NetWriter.pm | 14 ++++++-------- xt/net_writer-imap.t | 9 +++++++-- diff --git a/lib/PublicInbox/NetWriter.pm b/lib/PublicInbox/NetWriter.pm index 49ac02a6eedd6fae23cf6d3a5fbb3c93d1096233..06d69f2787a6d218e78bfadfbaae8b1661bae158 100644 --- a/lib/PublicInbox/NetWriter.pm +++ b/lib/PublicInbox/NetWriter.pm @@ -53,17 +53,15 @@ $$delete_mic //= mic_for_folder($self, my $uri = $url) or return; $$delete_mic->delete_message($uid); } -sub imap_set_kw { - my ($self, $url, $uid, $kw) = @_; - my $mic = mic_for_folder($self, my $uri = $url) or return; - $mic->set_flag(kw2flags($kw), $uid); +sub imap_add_kw { + my ($self, $mic, $uid, $kw) = @_; + $mic->store($uid, '+FLAGS.SILENT', '('.kw2flags($kw).')'); $mic; # caller must ->expunge } -sub imap_unset_kw { - my ($self, $url, $uid, $kw) = @_; - my $mic = mic_for_folder($self, my $uri = $url) or return; - $mic->unset_flag(kw2flags($kw), $uid); +sub imap_set_kw { + my ($self, $mic, $uid, $kw) = @_; + $mic->store($uid, 'FLAGS.SILENT', '('.kw2flags($kw).')'); $mic; # caller must ->expunge } diff --git a/xt/net_writer-imap.t b/xt/net_writer-imap.t index 007de35ea7155eb4e5ce87d4c6596b159ebd4db7..1298b958f683ba5d40404146e8162651736fc087 100644 --- a/xt/net_writer-imap.t +++ b/xt/net_writer-imap.t @@ -157,8 +157,13 @@ 'no results before import'); lei_ok qw(import -F eml), $f, \'import local copy w/o keywords'; - $nwr->imap_set_kw($folder_uri, $uid[0], [ 'seen' ])->expunge - or BAIL_OUT "expunge $@"; + $mic = $nwr->mic_for_folder($folder_uri); + # dummy set to ensure second set_kw clobbers + $nwr->imap_set_kw($mic, $uid[0], [ qw(seen answered flagged) ] + )->expunge or BAIL_OUT "expunge $@"; + $nwr->imap_set_kw($mic, $uid[0], [ 'seen' ] + )->expunge or BAIL_OUT "expunge $@"; + $mic = undef; @res = (); $nwr->imap_each($folder_uri, $imap_slurp_all, \@res); is_deeply(\@res, [ [ ['seen'], $exp ] ], 'seen flag set') or