user/dev discussion of public-inbox itself
 help / color / mirror / code / Atom feed
Search results ordered by [date|relevance]  view[summary|nested|Atom feed]
thread overview below | download mbox.gz: |
* [PATCH 0/2] -watch: support configurable subject filters
@ 2017-01-26  3:40  7% Eric Wong
  2017-01-26  3:40  6% ` [PATCH 2/2] add filter for Subject: tags Eric Wong
  0 siblings, 1 reply; 2+ results
From: Eric Wong @ 2017-01-26  3:40 UTC (permalink / raw)
  To: meta

Unfortunately, some mailing list administrators insist on tagging
Subject: lines with the list name instead of teaching users to
look for list-specific headers and build better user interfaces
for managing their own mail.

So, public-inbox now provide an interface to strip those tags
from Subject lines to reduce clutter when mirroring those
archives.

Eric Wong (2):
      watchmaildir: allow arguments for filters
      add filter for Subject: tags

 MANIFEST                             |  2 ++
 lib/PublicInbox/Filter/SubjectTag.pm | 33 +++++++++++++++++++++++++++++++++
 lib/PublicInbox/WatchMaildir.pm      |  8 +++++++-
 t/filter_subjecttag.t                | 27 +++++++++++++++++++++++++++
 4 files changed, 69 insertions(+), 1 deletion(-)


^ permalink raw reply	[relevance 7%]

* [PATCH 2/2] add filter for Subject: tags
  2017-01-26  3:40  7% [PATCH 0/2] -watch: support configurable subject filters Eric Wong
@ 2017-01-26  3:40  6% ` Eric Wong
  0 siblings, 0 replies; 2+ results
From: Eric Wong @ 2017-01-26  3:40 UTC (permalink / raw)
  To: meta

Some mailing lists add annoying tags into the Subject line which
discourages readers from doing proper mail organization on the
client side.  They also waste precious screen space and
attention span.

Remove them from our archives to reduce clutter.
---
 MANIFEST                             |  2 ++
 lib/PublicInbox/Filter/SubjectTag.pm | 33 +++++++++++++++++++++++++++++++++
 t/filter_subjecttag.t                | 27 +++++++++++++++++++++++++++
 3 files changed, 62 insertions(+)
 create mode 100644 lib/PublicInbox/Filter/SubjectTag.pm
 create mode 100644 t/filter_subjecttag.t

diff --git a/MANIFEST b/MANIFEST
index 76fd1da..f16843a 100644
--- a/MANIFEST
+++ b/MANIFEST
@@ -51,6 +51,7 @@ lib/PublicInbox/ExtMsg.pm
 lib/PublicInbox/Feed.pm
 lib/PublicInbox/Filter/Base.pm
 lib/PublicInbox/Filter/Mirror.pm
+lib/PublicInbox/Filter/SubjectTag.pm
 lib/PublicInbox/Filter/Vger.pm
 lib/PublicInbox/GetlineBody.pm
 lib/PublicInbox/Git.pm
@@ -127,6 +128,7 @@ t/fail-bin/spamc
 t/feed.t
 t/filter_base.t
 t/filter_mirror.t
+t/filter_subjecttag.t
 t/filter_vger.t
 t/git-http-backend.psgi
 t/git-http-backend.t
diff --git a/lib/PublicInbox/Filter/SubjectTag.pm b/lib/PublicInbox/Filter/SubjectTag.pm
new file mode 100644
index 0000000..1d28142
--- /dev/null
+++ b/lib/PublicInbox/Filter/SubjectTag.pm
@@ -0,0 +1,33 @@
+# Copyright (C) 2017 all contributors <meta@public-inbox.org>
+# License: AGPL-3.0+ <https://www.gnu.org/licenses/agpl-3.0.txt>
+
+# Filter for various [tags] in subjects
+package PublicInbox::Filter::SubjectTag;
+use strict;
+use warnings;
+use base qw(PublicInbox::Filter::Base);
+
+sub new {
+	my ($class, %opts) = @_;
+	my $tag = delete $opts{-tag};
+	die "tag not defined!\n" unless defined $tag && $tag ne '';
+	my $self = $class->SUPER::new(%opts);
+	$self->{tag_re} = qr/\A\s*(re:\s+|)\Q$tag\E\s*/i;
+	$self;
+}
+
+sub scrub {
+	my ($self, $mime) = @_;
+	my $subj = $mime->header('Subject');
+	$subj =~ s/$self->{tag_re}/$1/; # $1 is "Re: "
+	$mime->header_str_set('Subject', $subj);
+	$self->ACCEPT($mime);
+}
+
+# no suffix/article rejection for mirrors
+sub delivery {
+	my ($self, $mime) = @_;
+	$self->scrub($mime);
+}
+
+1;
diff --git a/t/filter_subjecttag.t b/t/filter_subjecttag.t
new file mode 100644
index 0000000..54a219e
--- /dev/null
+++ b/t/filter_subjecttag.t
@@ -0,0 +1,27 @@
+# Copyright (C) 2017 all contributors <meta@public-inbox.org>
+# License: AGPL-3.0+ <https://www.gnu.org/licenses/agpl-3.0.txt>
+use strict;
+use warnings;
+use Test::More;
+use Email::MIME;
+use_ok 'PublicInbox::Filter::SubjectTag';
+
+my $f = eval { PublicInbox::Filter::SubjectTag->new };
+like($@, qr/tag not defined/, 'error without args');
+$f = PublicInbox::Filter::SubjectTag->new('-tag', '[foo]');
+is(ref $f, 'PublicInbox::Filter::SubjectTag', 'new object created');
+
+my $mime = Email::MIME->new(<<EOF);
+To: you <you\@example.com>
+Subject: =?UTF-8?B?UmU6IFtmb29dIEVsw4PCqWFub3I=?=
+
+EOF
+
+$mime = $f->delivery($mime);
+is($mime->header('Subject'), "Re: El\xc3\xa9anor", 'filtered with Re:');
+
+$mime->header_str_set('Subject', '[FOO] bar');
+$mime = $f->delivery($mime);
+is($mime->header('Subject'), 'bar', 'filtered non-reply');
+
+done_testing();
-- 
EW


^ permalink raw reply related	[relevance 6%]

Results 1-2 of 2 | reverse | options above
-- pct% links below jump to the message on this page, permalinks otherwise --
2017-01-26  3:40  7% [PATCH 0/2] -watch: support configurable subject filters Eric Wong
2017-01-26  3:40  6% ` [PATCH 2/2] add filter for Subject: tags Eric Wong

Code repositories for project(s) associated with this public inbox

	https://80x24.org/public-inbox.git

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).